diff --git a/.env.sample b/.env.sample
index c7c242b..e533f7d 100644
--- a/.env.sample
+++ b/.env.sample
@@ -5,6 +5,7 @@ PLATFORM6_ROOT=~/platform6/instances
# - 5.24.7
# - 6.0.0-alpha-4
# - 6.0.0-alpha-5
-PLATFORM6_VERSION=6.0.0-alpha-5
+# - 6.0.0-beta-1
+PLATFORM6_VERSION=6.0.0-beta-1
# Generated environment variables below, please do not edit
diff --git a/docker-compose.yaml b/docker-compose.yaml
index baac3be..9fb91b4 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -27,6 +27,7 @@ services:
image: $P6CORE_IMAGE_ID
depends_on:
- pgsql
+ - demobc
volumes:
- $INSTANCE_DATA_PATH/p6core.data:/opt/b2box5.data
links:
@@ -54,8 +55,6 @@ services:
- LOG_LEVEL=3
- PROXY_NO_SSL=true
- PROXY_NO_CACHE=true
- links:
- - p6core:b2box
ports:
- "8480:8480"
networks:
@@ -64,9 +63,10 @@ services:
# Local Ethereum blockchain used by the Demo App, delete this container in production
demobc:
container_name: demobc
- image: pegasyseng/pantheon:latest
+ image: pegasyseng/pantheon:1.2.2
command:
--network=dev
+ --data-path=/var/lib/pantheon
--rpc-http-enabled
--rpc-ws-enabled
--host-whitelist="all"
diff --git a/reference_data/6.0.0-beta-1/p6core.data/conf/application.conf b/reference_data/6.0.0-beta-1/p6core.data/conf/application.conf
new file mode 100644
index 0000000..c8c5389
--- /dev/null
+++ b/reference_data/6.0.0-beta-1/p6core.data/conf/application.conf
@@ -0,0 +1,5 @@
+p6auth {
+ remote.provider {
+ url: "https://login.amalto.io/apis/v2/b2auth"
+ }
+}
diff --git a/reference_data/6.0.0-beta-1/p6core.data/conf/pgsqljdbc.properties b/reference_data/6.0.0-beta-1/p6core.data/conf/pgsqljdbc.properties
new file mode 100644
index 0000000..24531e9
--- /dev/null
+++ b/reference_data/6.0.0-beta-1/p6core.data/conf/pgsqljdbc.properties
@@ -0,0 +1,4 @@
+jdbc.driverClassName=org.postgresql.Driver
+jdbc.url=jdbc:postgresql://database:5432/b2box
+jdbc.username=b2box
+jdbc.password=qsd56fg
diff --git a/reference_data/6.0.0-beta-1/p6core.data/conf/reportingjdbc.properties b/reference_data/6.0.0-beta-1/p6core.data/conf/reportingjdbc.properties
new file mode 100644
index 0000000..d1a66a8
--- /dev/null
+++ b/reference_data/6.0.0-beta-1/p6core.data/conf/reportingjdbc.properties
@@ -0,0 +1,11 @@
+######################################################################
+# b2box reporting data source configuration
+######################################################################
+
+# PGSQL
+jdbc.driverClassName=org.postgresql.Driver
+jdbc.url=jdbc:postgresql://database:5432/b2box
+jdbc.username=b2box
+jdbc.password=qsd56fg
+jdbc.validation.query=select 1
+dialect.mapper=com.amalto.b2box.core.store.impl.dialect.pgsqlxml.mappers.proc.ReportingDataSourceProcMapper
diff --git a/reference_data/6.0.0-beta-1/p6core.data/lib/Tahoma_font.jar b/reference_data/6.0.0-beta-1/p6core.data/lib/Tahoma_font.jar
new file mode 100644
index 0000000..8679686
Binary files /dev/null and b/reference_data/6.0.0-beta-1/p6core.data/lib/Tahoma_font.jar differ
diff --git a/reference_data/6.0.0-beta-1/p6core.data/lib/demo-app-smart-contract-1.1.jar b/reference_data/6.0.0-beta-1/p6core.data/lib/demo-app-smart-contract-1.1.jar
new file mode 100644
index 0000000..27a1dff
Binary files /dev/null and b/reference_data/6.0.0-beta-1/p6core.data/lib/demo-app-smart-contract-1.1.jar differ
diff --git a/reference_data/6.0.0-beta-1/p6core.data/logs/.marker b/reference_data/6.0.0-beta-1/p6core.data/logs/.marker
new file mode 100644
index 0000000..1059e25
--- /dev/null
+++ b/reference_data/6.0.0-beta-1/p6core.data/logs/.marker
@@ -0,0 +1 @@
+Marker file to ensure folder is tracked in git
\ No newline at end of file
diff --git a/reference_data/6.0.0-beta-1/p6core.data/resources/certificates/readme.txt b/reference_data/6.0.0-beta-1/p6core.data/resources/certificates/readme.txt
new file mode 100644
index 0000000..dccb670
--- /dev/null
+++ b/reference_data/6.0.0-beta-1/p6core.data/resources/certificates/readme.txt
@@ -0,0 +1 @@
+Note: PKI certificate files should be stored in this folder.
diff --git a/reference_data/6.0.0-beta-1/p6core.data/resources/ftpd/conf/users/.marker b/reference_data/6.0.0-beta-1/p6core.data/resources/ftpd/conf/users/.marker
new file mode 100644
index 0000000..1059e25
--- /dev/null
+++ b/reference_data/6.0.0-beta-1/p6core.data/resources/ftpd/conf/users/.marker
@@ -0,0 +1 @@
+Marker file to ensure folder is tracked in git
\ No newline at end of file
diff --git a/reference_data/6.0.0-beta-1/p6core.data/resources/ftpd/repository/.marker b/reference_data/6.0.0-beta-1/p6core.data/resources/ftpd/repository/.marker
new file mode 100644
index 0000000..1059e25
--- /dev/null
+++ b/reference_data/6.0.0-beta-1/p6core.data/resources/ftpd/repository/.marker
@@ -0,0 +1 @@
+Marker file to ensure folder is tracked in git
\ No newline at end of file
diff --git a/reference_data/6.0.0-beta-1/p6core.data/resources/jmsdata/.marker b/reference_data/6.0.0-beta-1/p6core.data/resources/jmsdata/.marker
new file mode 100644
index 0000000..1059e25
--- /dev/null
+++ b/reference_data/6.0.0-beta-1/p6core.data/resources/jmsdata/.marker
@@ -0,0 +1 @@
+Marker file to ensure folder is tracked in git
\ No newline at end of file
diff --git a/reference_data/6.0.0-beta-1/p6core.data/resources/schemas/.marker b/reference_data/6.0.0-beta-1/p6core.data/resources/schemas/.marker
new file mode 100644
index 0000000..1059e25
--- /dev/null
+++ b/reference_data/6.0.0-beta-1/p6core.data/resources/schemas/.marker
@@ -0,0 +1 @@
+Marker file to ensure folder is tracked in git
\ No newline at end of file
diff --git a/reference_data/6.0.0-beta-1/p6core.data/resources/sshd/conf/sftp.hostkey.ser b/reference_data/6.0.0-beta-1/p6core.data/resources/sshd/conf/sftp.hostkey.ser
new file mode 100644
index 0000000..df8623b
Binary files /dev/null and b/reference_data/6.0.0-beta-1/p6core.data/resources/sshd/conf/sftp.hostkey.ser differ
diff --git a/reference_data/6.0.0-beta-1/p6core.data/resources/sshd/repository/.marker b/reference_data/6.0.0-beta-1/p6core.data/resources/sshd/repository/.marker
new file mode 100644
index 0000000..1059e25
--- /dev/null
+++ b/reference_data/6.0.0-beta-1/p6core.data/resources/sshd/repository/.marker
@@ -0,0 +1 @@
+Marker file to ensure folder is tracked in git
\ No newline at end of file
diff --git a/reference_data/6.0.0-beta-1/p6core.data/resources/templates/.marker b/reference_data/6.0.0-beta-1/p6core.data/resources/templates/.marker
new file mode 100644
index 0000000..1059e25
--- /dev/null
+++ b/reference_data/6.0.0-beta-1/p6core.data/resources/templates/.marker
@@ -0,0 +1 @@
+Marker file to ensure folder is tracked in git
\ No newline at end of file
diff --git a/reference_data/6.0.0-beta-1/p6core.data/webapps/.marker b/reference_data/6.0.0-beta-1/p6core.data/webapps/.marker
new file mode 100644
index 0000000..1059e25
--- /dev/null
+++ b/reference_data/6.0.0-beta-1/p6core.data/webapps/.marker
@@ -0,0 +1 @@
+Marker file to ensure folder is tracked in git
\ No newline at end of file
diff --git a/reference_data/6.0.0-beta-1/reference.sql b/reference_data/6.0.0-beta-1/reference.sql
new file mode 100644
index 0000000..83c1367
--- /dev/null
+++ b/reference_data/6.0.0-beta-1/reference.sql
@@ -0,0 +1,842 @@
+--
+-- PostgreSQL database cluster dump
+--
+
+SET default_transaction_read_only = off;
+
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+
+--
+-- Drop databases (except postgres and template1)
+--
+
+DROP DATABASE b2box;
+
+
+
+
+--
+-- Drop roles
+--
+
+DROP ROLE b2box;
+DROP ROLE postgres;
+
+
+--
+-- Roles
+--
+
+CREATE ROLE b2box;
+ALTER ROLE b2box WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'md556e436fe2c6d8a21cdd3d1313b6410e4';
+CREATE ROLE postgres;
+ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS;
+
+
+
+
+
+
+--
+-- PostgreSQL database dump
+--
+
+-- Dumped from database version 11.3 (Debian 11.3-1.pgdg90+1)
+-- Dumped by pg_dump version 11.3 (Debian 11.3-1.pgdg90+1)
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET idle_in_transaction_session_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SELECT pg_catalog.set_config('search_path', '', false);
+SET check_function_bodies = false;
+SET xmloption = content;
+SET client_min_messages = warning;
+SET row_security = off;
+
+UPDATE pg_catalog.pg_database SET datistemplate = false WHERE datname = 'template1';
+DROP DATABASE template1;
+--
+-- Name: template1; Type: DATABASE; Schema: -; Owner: postgres
+--
+
+CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8';
+
+
+ALTER DATABASE template1 OWNER TO postgres;
+
+\connect template1
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET idle_in_transaction_session_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SELECT pg_catalog.set_config('search_path', '', false);
+SET check_function_bodies = false;
+SET xmloption = content;
+SET client_min_messages = warning;
+SET row_security = off;
+
+--
+-- Name: DATABASE template1; Type: COMMENT; Schema: -; Owner: postgres
+--
+
+COMMENT ON DATABASE template1 IS 'default template for new databases';
+
+
+--
+-- Name: template1; Type: DATABASE PROPERTIES; Schema: -; Owner: postgres
+--
+
+ALTER DATABASE template1 IS_TEMPLATE = true;
+
+
+\connect template1
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET idle_in_transaction_session_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SELECT pg_catalog.set_config('search_path', '', false);
+SET check_function_bodies = false;
+SET xmloption = content;
+SET client_min_messages = warning;
+SET row_security = off;
+
+--
+-- Name: DATABASE template1; Type: ACL; Schema: -; Owner: postgres
+--
+
+REVOKE CONNECT,TEMPORARY ON DATABASE template1 FROM PUBLIC;
+GRANT CONNECT ON DATABASE template1 TO PUBLIC;
+
+
+--
+-- PostgreSQL database dump complete
+--
+
+--
+-- PostgreSQL database dump
+--
+
+-- Dumped from database version 11.3 (Debian 11.3-1.pgdg90+1)
+-- Dumped by pg_dump version 11.3 (Debian 11.3-1.pgdg90+1)
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET idle_in_transaction_session_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SELECT pg_catalog.set_config('search_path', '', false);
+SET check_function_bodies = false;
+SET xmloption = content;
+SET client_min_messages = warning;
+SET row_security = off;
+
+--
+-- Name: b2box; Type: DATABASE; Schema: -; Owner: postgres
+--
+
+CREATE DATABASE b2box WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8';
+
+
+ALTER DATABASE b2box OWNER TO postgres;
+
+\connect b2box
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET idle_in_transaction_session_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SELECT pg_catalog.set_config('search_path', '', false);
+SET check_function_bodies = false;
+SET xmloption = content;
+SET client_min_messages = warning;
+SET row_security = off;
+
+--
+-- Name: p6core; Type: SCHEMA; Schema: -; Owner: b2box
+--
+
+CREATE SCHEMA p6core;
+
+
+ALTER SCHEMA p6core OWNER TO b2box;
+
+--
+-- Name: tablefunc; Type: EXTENSION; Schema: -; Owner:
+--
+
+CREATE EXTENSION IF NOT EXISTS tablefunc WITH SCHEMA public;
+
+
+--
+-- Name: EXTENSION tablefunc; Type: COMMENT; Schema: -; Owner:
+--
+
+COMMENT ON EXTENSION tablefunc IS 'functions that manipulate whole tables, including crosstab';
+
+
+--
+-- Name: itempartitiontype; Type: TYPE; Schema: p6core; Owner: b2box
+--
+
+CREATE TYPE p6core.itempartitiontype AS ENUM (
+ 'LOG',
+ 'TABLE_DATA',
+ 'TRANSACTION'
+);
+
+
+ALTER TYPE p6core.itempartitiontype OWNER TO b2box;
+
+--
+-- Name: array_to_string_i(text[], text); Type: FUNCTION; Schema: public; Owner: b2box
+--
+
+CREATE FUNCTION public.array_to_string_i(texts text[], sep text) RETURNS text
+ LANGUAGE sql IMMUTABLE STRICT
+ AS $$
+
+
+ select array_to_string (texts, sep)
+
+
+ $$;
+
+
+ALTER FUNCTION public.array_to_string_i(texts text[], sep text) OWNER TO b2box;
+
+SET default_tablespace = '';
+
+SET default_with_oids = false;
+
+--
+-- Name: activeroutingorder; Type: TABLE; Schema: p6core; Owner: b2box
+--
+
+CREATE TABLE p6core.activeroutingorder (
+ name character varying(512) NOT NULL,
+ content xml NOT NULL
+);
+
+
+ALTER TABLE p6core.activeroutingorder OWNER TO b2box;
+
+--
+-- Name: completedroutingorder; Type: TABLE; Schema: p6core; Owner: b2box
+--
+
+CREATE TABLE p6core.completedroutingorder (
+ name character varying(512) NOT NULL,
+ content xml NOT NULL
+);
+
+
+ALTER TABLE p6core.completedroutingorder OWNER TO b2box;
+
+--
+-- Name: failedroutingorder; Type: TABLE; Schema: p6core; Owner: b2box
+--
+
+CREATE TABLE p6core.failedroutingorder (
+ name character varying(512) NOT NULL,
+ content xml NOT NULL
+);
+
+
+ALTER TABLE p6core.failedroutingorder OWNER TO b2box;
+
+--
+-- Name: flyway_schema_history; Type: TABLE; Schema: p6core; Owner: b2box
+--
+
+CREATE TABLE p6core.flyway_schema_history (
+ installed_rank integer NOT NULL,
+ version character varying(50),
+ description character varying(200) NOT NULL,
+ type character varying(20) NOT NULL,
+ script character varying(1000) NOT NULL,
+ checksum integer,
+ installed_by character varying(100) NOT NULL,
+ installed_on timestamp without time zone DEFAULT now() NOT NULL,
+ execution_time integer NOT NULL,
+ success boolean NOT NULL
+);
+
+
+ALTER TABLE p6core.flyway_schema_history OWNER TO b2box;
+
+--
+-- Name: item; Type: TABLE; Schema: p6core; Owner: b2box
+--
+
+CREATE TABLE p6core.item (
+ datapartition p6core.itempartitiontype NOT NULL,
+ datatype character varying(64) NOT NULL,
+ iid1 character varying(256) NOT NULL,
+ iid2 character varying(96) NOT NULL,
+ iid3 character varying(96) NOT NULL,
+ iid4 character varying(96) NOT NULL,
+ content xml NOT NULL,
+ inserttime bigint
+)
+PARTITION BY LIST (datapartition);
+
+
+ALTER TABLE p6core.item OWNER TO b2box;
+
+--
+-- Name: log; Type: TABLE; Schema: p6core; Owner: b2box
+--
+
+CREATE TABLE p6core.log PARTITION OF p6core.item
+FOR VALUES IN ('LOG');
+
+
+ALTER TABLE p6core.log OWNER TO b2box;
+
+--
+-- Name: rawbytes; Type: TABLE; Schema: p6core; Owner: b2box
+--
+
+CREATE TABLE p6core.rawbytes (
+ id1 character varying(96) NOT NULL,
+ id2 character varying(96) NOT NULL,
+ content bytea NOT NULL,
+ inserttime bigint
+);
+
+
+ALTER TABLE p6core.rawbytes OWNER TO b2box;
+
+--
+-- Name: serviceconfig; Type: TABLE; Schema: p6core; Owner: b2box
+--
+
+CREATE TABLE p6core.serviceconfig (
+ id1 character varying(512) NOT NULL,
+ id2 character varying(256) NOT NULL,
+ id3 character varying(256) NOT NULL,
+ content jsonb NOT NULL,
+ bytes bytea,
+ inserttime bigint
+);
+
+
+ALTER TABLE p6core.serviceconfig OWNER TO b2box;
+
+--
+-- Name: table_data; Type: TABLE; Schema: p6core; Owner: b2box
+--
+
+CREATE TABLE p6core.table_data PARTITION OF p6core.item
+FOR VALUES IN ('TABLE_DATA');
+
+
+ALTER TABLE p6core.table_data OWNER TO b2box;
+
+--
+-- Name: transaction; Type: TABLE; Schema: p6core; Owner: b2box
+--
+
+CREATE TABLE p6core.transaction PARTITION OF p6core.item
+FOR VALUES IN ('TRANSACTION');
+
+
+ALTER TABLE p6core.transaction OWNER TO b2box;
+
+--
+-- Data for Name: activeroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box
+--
+
+COPY p6core.activeroutingorder (name, content) FROM stdin;
+\.
+
+
+--
+-- Data for Name: completedroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box
+--
+
+COPY p6core.completedroutingorder (name, content) FROM stdin;
+\.
+
+
+--
+-- Data for Name: failedroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box
+--
+
+COPY p6core.failedroutingorder (name, content) FROM stdin;
+\.
+
+
+--
+-- Data for Name: flyway_schema_history; Type: TABLE DATA; Schema: p6core; Owner: b2box
+--
+
+COPY p6core.flyway_schema_history (installed_rank, version, description, type, script, checksum, installed_by, installed_on, execution_time, success) FROM stdin;
+1 1 << Flyway Baseline >> BASELINE << Flyway Baseline >> \N b2box 2019-07-09 16:56:52.327831 0 t
+2 2 B2BOX5-1833 Rename schema SQL V2__B2BOX5-1833_Rename_schema.sql -1383918368 b2box 2019-07-09 16:56:52.555483 81 t
+3 3 B2BOX5-1757 Remove old tables SQL V3__B2BOX5-1757_Remove_old_tables.sql -877196747 b2box 2019-07-09 16:56:52.69576 76 t
+4 4 B2BOX5-1797 Rename transaction dataType SQL V4__B2BOX5-1797_Rename_transaction_dataType.sql -1502122155 b2box 2019-07-09 16:56:52.976214 101 t
+5 5 B2BOX5-1832 Remove iid-columns from item table SQL V5__B2BOX5-1832_Remove_iid-columns_from_item_table.sql 2108340418 b2box 2019-07-09 16:56:53.098325 26 t
+6 6 B2BOX5-1832 Rename cluster column from item table SQL V6__B2BOX5-1832_Rename_cluster_column_from_item_table.sql -828191573 b2box 2019-07-09 16:56:53.153305 970 t
+7 7 B2BOX5-1832 Rename concept column from item table SQL V7__B2BOX5-1832_Rename_concept_column_from_item_table.sql 938934585 b2box 2019-07-09 16:56:54.436847 45 t
+8 8 B2BOX5-1832 Remove universPK from routingorder tables content SQL V8__B2BOX5-1832_Remove_universPK_from_routingorder_tables_content.sql -1348765445 b2box 2019-07-09 16:56:54.5331 277 t
+9 9 B2BOX5-1832 Fix routingorder tables content SQL V9__B2BOX5-1832_Fix_routingorder_tables_content.sql -2075348165 b2box 2019-07-09 16:56:54.8256 38 t
+10 10 B2BOX5-1832 Fix routingorder tables content adapter SQL V10__B2BOX5-1832_Fix_routingorder_tables_content_adapter.sql -1495442787 b2box 2019-07-09 16:56:54.892106 77 t
+11 11 B2BOX5-1845 Table item partition SQL V11__B2BOX5-1845_Table_item_partition.sql -1362038486 b2box 2019-07-09 16:56:54.99719 417 t
+12 12 B2BOX-1852 Fix transaction content for WFWorkItem SQL V12__B2BOX-1852_Fix_transaction_content_for_WFWorkItem.sql -257561398 b2box 2019-07-09 16:56:55.457054 72 t
+13 13 B2BOX5-1540 Rename WFWorkItem to WorkflowTask SQL V13__B2BOX5-1540_Rename_WFWorkItem_to_WorkflowTask.sql 1974853329 b2box 2019-07-09 16:56:55.568073 29 t
+14 13.1 B2BOX5-1540 Rename WFWorkItem to WorkflowTask in views SQL V13_1__B2BOX5-1540_Rename_WFWorkItem_to_WorkflowTask_in_views.sql 142754584 b2box 2019-07-09 16:56:55.631853 31 t
+15 14 B2BOX5-1839 Simplify counter view SQL V14__B2BOX5-1839_Simplify_counter_view.sql 2110665982 b2box 2019-07-09 16:56:55.687712 35 t
+16 15 B2BOX5-1901 Add indexes SQL V15__B2BOX5-1901_Add_indexes.sql -1607078097 b2box 2019-07-12 12:36:31.128033 66 t
+17 16 B2BOX5-1928 Remove meta table SQL V16__B2BOX5-1928_Remove_meta_table.sql -1060199810 b2box 2019-09-06 12:59:24.811813 33 t
+18 17 B2BOX5-1914 DSL migration SQL V17__B2BOX5-1914_DSL_migration.sql 2012373981 b2box 2019-09-06 12:59:24.884128 14 t
+19 18 B2BOX5-1937 Exception migration SQL V18__B2BOX5-1937_Exception_migration.sql 1562596096 b2box 2019-09-06 12:59:24.913329 11 t
+20 19 B2BOX5-1929 Remove application min-max version SQL V19__B2BOX5-1929_Remove_application_min-max_version.sql -656397094 b2box 2019-09-06 12:59:24.93409 169 t
+21 20 B2BOX5-1822 DSL remove deprecated SQL V20__B2BOX5-1822_DSL_remove_deprecated.sql 791640323 b2box 2019-09-06 12:59:25.121487 10 t
+\.
+
+
+--
+-- Data for Name: log; Type: TABLE DATA; Schema: p6core; Owner: b2box
+--
+
+COPY p6core.log (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin;
+\.
+
+
+--
+-- Data for Name: rawbytes; Type: TABLE DATA; Schema: p6core; Owner: b2box
+--
+
+COPY p6core.rawbytes (id1, id2, content, inserttime) FROM stdin;
+\.
+
+
+--
+-- Data for Name: serviceconfig; Type: TABLE DATA; Schema: p6core; Owner: b2box
+--
+
+COPY p6core.serviceconfig (id1, id2, id3, content, bytes, inserttime) FROM stdin;
+Default email {"name": "Default", "type": "JAVAMAIL", "appKey": "", "enabled": true, "revisionId": "edf7ea27e3c35e3c0071e669e34d1d98", "contentMode": "NONE", "description": {"EN": "Default email profile"}, "defaultProfile": true, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548169368257, "configurationProperties": {}} \N 1548169368271
+Logging Event views {"name": "Logging Event", "type": "TRANSACTIONS", "appKey": "", "enabled": true, "xmlView": "\\n \\n logging_event\\n \\n LOG\\n \\n \\n \\n ID\\n \\n Id\\n Identifiant\\n \\n logging_event/id\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n RangeOfDates(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n StringContains\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n StringContains\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n StringContains\\n \\n \\n AnyField\\n \\n Contains the words\\n Contient les mots\\n \\n logging_event\\n StringContains\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n Date(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n String\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n String\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n String\\n \\n \\n Level\\n \\n Level\\n Level\\n \\n logging_event/level\\n String\\n \\n \\n\\n", "revisionId": "efe8acc7d4f399db36d7f501f3487c9c", "contentMode": "NONE", "description": {"EN": "Logging Event", "FR": "Evènement de log"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548267162338} \N 1548267162347
+_logging_event datamodels {"name": "_logging_event", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n", "enabled": false, "revisionId": "92330d48ae06ac2623bca161872d6cf0", "contentMode": "NONE", "description": {"EN": " Logging events (formerly named .logging_event)"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1538389926868} \N 1538389926969
+WorkflowTask datamodels {"name": "WorkflowTask", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n", "enabled": false, "revisionId": "05d747b40331bffd64ce9f7aa64c7692", "contentMode": "READ", "description": {"EN": "WorkflowTask Data Model"}, "lastModifiedBy": null, "lastModifiedDate": 1562691470454} \N 1562691470561
+2c101aa8e2234e1baf8bbd278ce3732d p6_demo applications {"logo": "data:image/jpeg;base64,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", "name": "2c101aa8e2234e1baf8bbd278ce3732d", "appKey": "p6_demo", "status": "6.0.0-beta-1", "content": "eyJwbGF0Zm9ybTYudmlld3MiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnZpZXdzIiwibmFtZSI6IlRyYW5zYWN0aW9ucyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUcmFuc2FjdGlvbnMgZm9yIHA2X2RlbW9cIixcIkZSXCI6XCJUcmFuc2FjdGlvbnMgcG91ciBwNl9kZW1vXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1NjQsXCJyZXZpc2lvbklkXCI6XCI1Y2ZmMGFkMTQ5ZDJjMzFkNmQyOWNiMGUzZDA3YWJkYVwiLFwidHlwZVwiOlwiVFJBTlNBQ1RJT05TXCIsXCJ4bWxWaWV3XCI6XCI8Vmlldz5cXG4gICAgPFNtYXJ0VGFncz5cXG4gICAgICAgIDxUcmFuc2FjdGlvblR5cGU+VHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZTwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICAgICAgPFRyYW5zYWN0aW9uRm9ybWF0PlRyYW5zYWN0aW9uSW5mby9QaXZvdERvY3VtZW50Rm9ybWF0PC9UcmFuc2FjdGlvbkZvcm1hdD5cXG4gICAgPC9TbWFydFRhZ3M+XFxuICAgIDxEYXRhVHlwZT5UcmFuc2FjdGlvbkluZm88L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPlRyYW5zYWN0aW9uSW5mbzwvRGF0YU1vZGVsPlxcbiAgICA8RGF0YVBhcnRpdGlvbj5UUkFOU0FDVElPTjwvRGF0YVBhcnRpdGlvbj5cXG4gICAgPFJlcHJvY2Vzc1JvdXRlVXJpPmRpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXI8L1JlcHJvY2Vzc1JvdXRlVXJpPlxcbiAgICA8TGlzdE9mS2V5cz5cXG4gICAgICAgIDxLZXk+XFxuICAgICAgICAgICAgPE5hbWU+SWQ8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+SWQ8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+SWQ8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9JZDwvWFBhdGg+XFxuICAgICAgICA8L0tleT5cXG4gICAgPC9MaXN0T2ZLZXlzPlxcbiAgICA8TGlzdE9mU2VhcmNoYWJsZXM+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Mb2FkRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Mb2FkIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBjcsOpYXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9DcmVhdGlvbkRhdGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlJhbmdlT2ZEYXRlcyh5eXl5TU1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlN0YXR1c0RhdGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VGVjaC4gU3RhdHVzIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBtb2RpZi4gU3RhdHV0IFRlY2guPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzRGF0ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+UmFuZ2VPZkRhdGVzKHl5eXlNTWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VHJhbnNhY3Rpb25UeXBlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRyYW5zYWN0aW9uIFR5cGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+VHlwZSBkZSB0cmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICAgICAgPENob2ljZSBmaWVsZC1saW5lLWhlaWdodD1cXFwiMVxcXCIgbXVsdGktc2VsZWN0PVxcXCJ0cnVlXFxcIiBtdWx0aS1zZWxlY3QtZGVsaW1pdGVyPVxcXCJ8XFxcIj5SZXF1ZXN0IGZvciBRdW90YXRpb24sIFF1b3RlLCBQdXJjaGFzZSBPcmRlcjwvQ2hvaWNlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VHJhbnNhY3Rpb25OdW1iZXI8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gTnVtYmVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk51bcOpcm8gZGUgdHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvbk51bWJlcjwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5CdXllck5hbWU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+QnV5ZXIgTmFtZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Ob20gZGUgbCdhY2hldGV1cjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlWy4vS2V5ID0gXFxcIkJ1eWVyIE5hbWVcXFwiXS9WYWx1ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5LZXl3b3JkczwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5LZXl3b3JkczwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Nb3RzIGNsZWZzPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm88L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VGVjaG5pY2FsU3RhdHVzQ29kZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UZWNobmljYWwgU3RhdHVzPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlN0YXR1dCB0ZWNobmlxdWU8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgICAgICA8Q2hvaWNlIGZpZWxkLWxpbmUtaGVpZ2h0PVxcXCIyXFxcIiBtdWx0aS1zZWxlY3Q9XFxcInRydWVcXFwiIG11bHRpLXNlbGVjdC1kZWxpbWl0ZXI9XFxcInxcXFwiPkhhbmRsZWQsUmVjZWl2ZWQsU2VudDwvQ2hvaWNlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+RnVuY3Rpb25hbFN0YXR1c0NvZGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+RnVuY3Rpb25hbCBTdGF0dXM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+U3RhdHV0IGZvbmN0aW9ubmVsPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vRnVuY3Rpb25hbFN0YXR1c0NvZGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgICAgIDxDaG9pY2UgZmllbGQtbGluZS1oZWlnaHQ9XFxcIjJcXFwiIG11bHRpLXNlbGVjdD1cXFwidHJ1ZVxcXCIgbXVsdGktc2VsZWN0LWRlbGltaXRlcj1cXFwifFxcXCI+QWNjZXB0ZWQsRGVjbGluZWQsUXVvdGUgcHJvdmlkZWQsUmVqZWN0ZWQ8L0Nob2ljZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgPC9MaXN0T2ZTZWFyY2hhYmxlcz5cXG4gICAgPExpc3RPZlZpZXdhYmxlcz5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Mb2FkRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Mb2FkIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBjcsOpYXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9DcmVhdGlvbkRhdGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eU1NZGQnVCdISDptbTpzcyk8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlN0YXR1c0RhdGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+U3RhdHVzIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBzdGF0dXQ8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNEYXRlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5EYXRlKHl5eXlNTWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UcmFuc2FjdGlvblR5cGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGRlIHRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlRyYW5zYWN0aW9uTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRyYW5zYWN0aW9uICM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+TsKwIGRlIHRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25OdW1iZXI8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+U2VsbGVyTmFtZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5TZWxsZXIgTmFtZTwvRU4+XFxuICAgICAgICAgICAgICAgICA8RlI+Tm9tIHZlbmRldXI8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9LZXlWYWx1ZVtLZXk9XFxcIlNlbGxlciBOYW1lXFxcIl0vVmFsdWU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+QnV5ZXJOYW1lPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkJ1eWVyIE5hbWU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+Tm9tIGRlIGwnYWNoZXRldXI8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9LZXlWYWx1ZVtLZXk9XFxcIkJ1eWVyIE5hbWVcXFwiXS9WYWx1ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UZWNobmljYWxTdGF0dXNDb2RlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRlY2guIFN0YXR1czwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgdGVjaC48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkZ1bmN0aW9uYWxTdGF0dXNDb2RlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkZ1bmN0LiBTdGF0dXM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+U3RhdHV0IGZvbmN0LjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0Z1bmN0aW9uYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkZ1bmN0LiBTdGF0dXMgTXNnLjwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgRm9uY3QuIE1zZy48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Eb2N1bWVudDwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Eb2N1bWVudDwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5BY2PDqHMgZG9jLjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RhcmdldERvY3VtZW50VVJJPC9YUGF0aD5cXG4gICAgICAgICAgICAgPFR5cGU+VVJJPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIFxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgIDxOYW1lPml0ZW1MaW5rPC9OYW1lPlxcbiAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8RU4+V29yayBJdGVtPC9FTj5cXG4gICAgICAgICAgICA8RlI+VHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9Xb3JrZmxvdy9JbnN0YW5jZS9mbGluazwvWFBhdGg+XFxuICAgICAgICAgPFR5cGU+SXRlbUxpbms8L1R5cGU+XFxuICAgICAgPC9WaWV3YWJsZT5cXG4gICAgPC9MaXN0T2ZWaWV3YWJsZXM+XFxuPC9WaWV3PlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODU2NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi52aWV3cyIsIm5hbWUiOiJXb3JrZmxvdyBUYXNrcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldvcmtmbG93IFRhc2tzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIldvcmtmbG93IFRhc2tzIGZvciBwNl9kZW1vXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1NzgsXCJyZXZpc2lvbklkXCI6XCIyMGY2MTFlYjg2MzUzYjdhNzk3ZGQ2Y2Y3NmQ2ZGExM1wiLFwidHlwZVwiOlwiV09SS0lURU1TXCIsXCJ4bWxWaWV3XCI6XCI8Vmlldz5cXG4gICAgPFNtYXJ0VGFncy8+XFxuICAgIDxEYXRhVHlwZT5Xb3JrZmxvd1Rhc2s8L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPldvcmtmbG93VGFzazwvRGF0YU1vZGVsPlxcbiAgICA8RGF0YVBhcnRpdGlvbj5UUkFOU0FDVElPTjwvRGF0YVBhcnRpdGlvbj5cXG4gICAgPFJlcHJvY2Vzc1JvdXRlVXJpLz5cXG4gICAgPExpc3RPZktleXM+XFxuICAgICAgICA8S2V5PlxcbiAgICAgICAgICAgIDxOYW1lPklkPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPklkPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPklkPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaWQ8L1hQYXRoPlxcbiAgICAgICAgPC9LZXk+XFxuICAgIDwvTGlzdE9mS2V5cz5cXG4gICAgPExpc3RPZlNlYXJjaGFibGVzPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+RG9jLiBUeXBlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGR1IERvYzwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25UeXBlXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkRvYy4gTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gTnVtYmVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk7CsCBkdSBEb2M8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPldvcmtmbG93VGFzay9pdGVtQXR0cmlidXRlc1trZXk9XFxcIlRyYW5zYWN0aW9uTnVtYmVyXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkFzc2lnbmVlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkFzc2lnbmVlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRlc3RpbmF0YWlyZTwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2Fzc2lnbmVlcy9hc3NpZ25lZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+SW5MaXN0PC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICA8L0xpc3RPZlNlYXJjaGFibGVzPlxcbiAgICA8TGlzdE9mVmlld2FibGVzPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPldGU3RhcnREYXRlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBTdGFydCBEYXRlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRhdGUgZGUgZMOpYnV0PC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJTdGFydERhdGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eS1NTS1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgIDxOYW1lPkRvY1R5cGU8L05hbWU+XFxuICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgIDxGUj5UeXBlPC9GUj5cXG4gICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPFhQYXRoPi9Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJUcmFuc2FjdGlvblR5cGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgPE5hbWU+RG9jTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgIDxFTj5Eb2MuIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgIDxGUj5OwrAgZG9jLjwvRlI+XFxuICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgIDxYUGF0aD4vV29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25OdW1iZXJcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICBcXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5pdGVtTGluazwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UcmFuc2FjdGlvbjwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UcmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2ZsaW5rPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5JdGVtTGluazwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+V29ya2Zsb3dTdGVwPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBBY3Rpb25zPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjdGlvbnMgV0YuPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svc3RlcC9Xb3JrZmxvd1N0ZXA8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPldvcmtmbG93U3RlcDwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgIDwvTGlzdE9mVmlld2FibGVzPlxcbjwvVmlldz5cXG5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1Nzh9XSwicGxhdGZvcm02LnJvdXRlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlJvdXRpbmdSdWxlRGlzcGF0Y2hlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJvdXRpbmdSdWxlRGlzcGF0Y2hlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEaXNwYXRjaGVyIHRvIFJGUSwgUXVvdGUgb3IgUE8gUm91dGluZyBSdWxlc1wifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MDAzLFwicmV2aXNpb25JZFwiOlwiZjA1MDM1NzA2NGJiMmVmYWU4NTQ3ZmVmZGYzYmY2ZDRcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcbiAgICAgICAgICAgIC5jaG9pY2UoKVxcbiAgICAgICAgICAgICAgICAud2hlbih4cGF0aChcXFwiL1RyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvblR5cGU9J1JlcXVlc3QgRm9yIFF1b3RhdGlvbidcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC50bygnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUmVxdWVzdEZvclF1b3RhdGlvbicpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZT0nUXVvdGUnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAudG8oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1F1b3RlJylcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPSdQdXJjaGFzZSBPcmRlcidcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC50bygnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUHVyY2hhc2VPcmRlcicpXFxuICAgICAgICAgICAgICAgIC5vdGhlcndpc2UoKVxcbiAgICAgICAgICAgICAgICAgICAgLnRocm93RXhjZXB0aW9uKGlvLnBsYXRmb3JtNi5jb21tb24udXRpbC5QNkV4Y2VwdGlvbiwnTm8gbWF0Y2hpbmcgcnVsZSBmb3VuZCBmb3IgaXRlbSEnKVxcbiAgICAgICAgICAgIC5lbmQoKVxcbiAgICAgICAgICAgIC5yb3V0ZUlkKFxcXCJwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlclxcXCIpXFxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlclxcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MDAzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJTY2hlZHVsZXJGb3JSRlFDcmVhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNjaGVkdWxlckZvclJGUUNyZWF0aW9uXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlNjaGVkdWxlZCBjcmVhdGlvbiBvZiBSZXF1ZXN0cyBmb3IgUXVvdGF0aW9uXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjMxOTc3ODk3OTgsXCJyZXZpc2lvbklkXCI6XCJmZmM2MTA4MTEzNDU2M2RkODMyZWEwMTI0NTdjODhmNVwiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwiZGVmIHJvdXRlSWQgPSBcXFwicDZfZGVtbyBTY2hlZHVsZWQgY3JlYXRpb24gb2YgUkZRc1xcXCJcXG5cXG50cnkge1xcbiAgICBwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG4gICAgICAgIHZvaWQgY29uZmlndXJlKCkge1xcbiAgICAgICAgICAgIGZyb20oXFxcInRpbWVyOi8vbXlUaW1lcj9wZXJpb2Q9MTBtXFxcIilcXG4gICAgICAgICAgICAgICAgLnRvKCdwNmNtYjovL3NjcmlwdHM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPWV4ZWN1dGUmaWQ9cDZfZGVtby5DcmVhdGVSRlFUcmFuc2FjdGlvbicpXFxuICAgICAgICAgICAgICAgIC5yb3V0ZUlkKHJvdXRlSWQpXFxuICAgICAgICAgICAgICAgIC5kZXNjcmlwdGlvbihyb3V0ZUlkKVxcbiAgICAgICAgfVxcbiAgICB9KVxcblxcbiAgICBwNi51dGlscy5wYXVzZSgpXFxufSBmaW5hbGx5IHtcXG4gIHA2LmNhbWVsLmRlc3Ryb3lSb3V0ZShyb3V0ZUlkKVxcbn1cXG5cIixcInR5cGVcIjpcInNjaGVkdWxlclwiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjMxOTc3ODk3OTh9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlJvdXRpbmdSdWxlc0ZvclB1cmNoYXNlT3JkZXJzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUm91dGluZ1J1bGVzRm9yUHVyY2hhc2VPcmRlcnNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1Nzg5OTM3MTAsXCJyZXZpc2lvbklkXCI6XCI3ZDhlM2I4ZmM0ZDk0ZmFiMmExNGJlOGY5NzBkYmJiY1wiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwicDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuXFxuICAgIHZvaWQgY29uZmlndXJlKCkge1xcblxcbiAgICAgICAgZnJvbSgnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUHVyY2hhc2VPcmRlcicpXFxuICAgICAgICAgICAgLmNob2ljZSgpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0NvZGU9J1JlY2VpdmVkJ1xcXCIpKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwicGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uXFxcIikuY29uc3RhbnQoXFxcImludm9rZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGF0dXNcXFwiKS5jb25zdGFudChcXFwiUmVjZWl2ZWRcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwic3RlcFxcXCIpLmNvbnN0YW50KFxcXCJIYW5kbGVQdXJjaGFzZU9yZGVyXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcImFwcGtleVxcXCIpLmNvbnN0YW50KFxcXCJwNl9kZW1vXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcImZsb3duYW1lXFxcIikuY29uc3RhbnQoXFxcIlVVSURcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwic2NyaXB0XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW8uV0ZTdGVwQnVpbGRlclxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAudG8oXFxcInA2cm91dGU6Ly9wbGF0Zm9ybTYud29ya2Zsb3dzdGVwc1xcXCIpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzJylcXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzXFxcIilcXG4gICAgfVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJ4bWxfcm91dGluZ1wiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjE1Nzg5OTM3MTB9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlNjaGVkdWxlckZvckNvdW50ZXJzUmVmcmVzaCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNjaGVkdWxlckZvckNvdW50ZXJzUmVmcmVzaFwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRlcnNcIixcIkZSXCI6XCJBY3R1YWxpc2F0aW9uIHBsYW5pZmnDqWUgZGVzIGNvbXB0ZXVyc1wifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MDI4LFwicmV2aXNpb25JZFwiOlwiMzlkYTE5NmNkNGNkNTM4YjJiMmU1ZTE1MWU0ZGQ4ZTZcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcblxcdGRlZiB2b2lkIGNvbmZpZ3VyZSgpIHtcXG5cXHRcXHRmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfUkZRcz9jcm9uPTArMSsqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudFJGUXMnKVxcblxcdFxcdFxcdC5yb3V0ZUlkKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSRlFzJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UkZRcyBjb3VudGVyXFxcIilcXG5cXG5cXHRcXHRmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfUXVvdGVzP2Nyb249MCsyKyorKisqKz8rKlxcXCIpXFxuXFx0XFx0XFx0LnRvKCdwNmNtYjovL2NvdW50ZXJzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1zeW5jaHJvbml6ZSZpZD1wNl9kZW1vLkNvdW50UXVvdGVzJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50UXVvdGVzJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UXVvdGVzIGNvdW50ZXJcXFwiKVxcblxcbiAgICAgICAgZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X1BPc19BY2NlcHRlZD9jcm9uPTArMysqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudEFjY2VwdGVkUE9zJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50QWNjZXB0ZWRQT3MnKVxcblxcdFxcdFxcdC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRBY2NlcHRlZFBPcyBjb3VudGVyXFxcIilcXG5cXG4gICAgICAgIGZyb20oXFxcInF1YXJ0ejI6Ly9wbGF0Zm9ybTYvcDZyb3V0ZV9Db3VudF9QT3NfUmVqZWN0ZWQ/Y3Jvbj0wKzQrKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRSZWplY3RlZFBPcycpXFxuXFx0XFx0XFx0LnJvdXRlSWQoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFJlamVjdGVkUE9zJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UmVqZWN0ZWRQT3MgY291bnRlclxcXCIpXFxuXFxuXFx0XFx0ZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X0ZhaWxlZFJvdXRpbmdPcmRlcnM/Y3Jvbj0wKzAvMTUrKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50RmFpbGVkUm91dGluZ09yZGVycycpXFxuXFx0XFx0XFx0LmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFNjaGVkdWxlZCByZWZyZXNoIG9mIHRoZSBDb3VudEZhaWxlZFJvdXRpbmdPcmRlcnMgY291bnRlclxcXCIpXFxuXFx0fVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJzY2hlZHVsZXJcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MDI4fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJCbG9ja2NoYWluRXZlbnRIYW5kbGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQmxvY2tjaGFpbkV2ZW50SGFuZGxlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJCbG9ja2NoYWluIEV2ZW50IEhhbmRsZXJcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MzE5ODQyMjU0OCxcInJldmlzaW9uSWRcIjpcIjc1YTUxMTc2Mjc1MWI5N2U0ODUzYzA0Zjc2MDZlMDRhXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJkZWYgZXRoQ2xpZW50VVJMID0gcDYuYXBwY29uZmlnLmdldCgncDZfZGVtbycsICdldGhDbGllbnRVUkwnKVxcbmRlZiBjb250cmFjdEFkZHJlc3MgPSAgcDYuYXBwY29uZmlnLmdldCgncDZfZGVtbycsICdjb250cmFjdEFkZHJlc3MnKVxcblxcbnA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oXFxcIndlYjNqOi8vXFxcIiArIGV0aENsaWVudFVSTCArIFxcXCI/YWRkcmVzcz1cXFwiICsgY29udHJhY3RBZGRyZXNzICsgXFxcIiZvcGVyYXRpb249RVRIX0xPR19GTE9XQUJMRVxcXCIpXFxuICAgICAgICAgICAgLnRvKFxcXCJwNmNtYjovL3NjcmlwdHM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPWV4ZWN1dGUmaWQ9cDZfZGVtby5CbG9ja2NoYWluRXZlbnRIYW5kbGVyXFxcIilcXG4gICAgICAgICAgICAucm91dGVJZChcXFwicDZfZGVtbyBXZWIzaiAtIEJsb2NrY2hhaW5FdmVudEhhbmRsZXJcXFwiKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBCbG9ja2NoYWluIEV2ZW50IEhhbmRsZXJcXFwiKVxcbiAgICB9XFxufSlcXG5cIixcInR5cGVcIjpcIndlYjNqXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MzE5ODQyMjU0OH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5yb3V0ZXMiLCJuYW1lIjoiUm91dGluZ1J1bGVzRm9yUkZRcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJvdXRpbmdSdWxlc0ZvclJGUXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnNcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTU3ODk5Mzc1MyxcInJldmlzaW9uSWRcIjpcIjY5NDg1ZGFmYmIyZGVlYzQ4YTc2ZmI5MGM4ZTdmNGVkXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG5cXG4gICAgdm9pZCBjb25maWd1cmUoKSB7XFxuICAgICAgICBmcm9tKCdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19SZXF1ZXN0Rm9yUXVvdGF0aW9uJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzQ29kZT0nUmVjZWl2ZWQnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJwbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb25cXFwiKS5jb25zdGFudChcXFwiaW52b2tlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcInN0YXR1c1xcXCIpLmNvbnN0YW50KFxcXCJSZWNlaXZlZFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGVwXFxcIikuY29uc3RhbnQoXFxcIkhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb25cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiYXBwa2V5XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiZmxvd25hbWVcXFwiKS5jb25zdGFudChcXFwiVVVJRFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzY3JpcHRcXFwiKS5jb25zdGFudChcXFwicDZfZGVtby5XRlN0ZXBCdWlsZGVyXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC50byhcXFwicDZyb3V0ZTovL3BsYXRmb3JtNi53b3JrZmxvd3N0ZXBzXFxcIilcXG4gICAgICAgICAgICAgICAgLm90aGVyd2lzZSgpXFxuICAgICAgICAgICAgICAgICAgICAudGhyb3dFeGNlcHRpb24oaW8ucGxhdGZvcm02LmNvbW1vbi51dGlsLlA2RXhjZXB0aW9uLCdObyBtYXRjaGluZyBydWxlIGZvdW5kIGZvciBpdGVtIScpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnNcXFwiKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBSZXF1ZXN0Rm9yUXVvdGF0aW9uc1xcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNTc4OTkzNzUzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJSb3V0aW5nUnVsZXNGb3JRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSb3V0aW5nUnVsZXNGb3JRdW90ZXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUXVvdGVzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDcyNDc4MDcsXCJyZXZpc2lvbklkXCI6XCI0ZGUzY2RmZGJlMTJkZDVmMzIzZmViY2FhZjY5ZDA0ZVwiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwicDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuICAgIFxcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1F1b3RlJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzQ29kZT0nQ3JlYXRlZCdcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoICdwbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb24nKS5jb25zdGFudCgnZXhlY3V0ZScpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJhcHBrZXlcXFwiKS5jb25zdGFudChcXFwicDZfZGVtb1xcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKCdpZCcpLmNvbnN0YW50KCdwNl9kZW1vLlNlbmRRdW90ZVRvQmxvY2tjaGFpbicpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0UHJvcGVydHkoJ2V4ZWN1dGUuYXN5bmMnKS5jb25zdGFudCh0cnVlKVxcbiAgICAgICAgICAgICAgICAgICAgLnRvKFxcXCJwNnJvdXRlOi8vcGxhdGZvcm02LnNjcmlwdHNcXFwiKVxcbiAgICAgICAgICAgICAgICAub3RoZXJ3aXNlKClcXG4gICAgICAgICAgICAgICAgICAgIC50aHJvd0V4Y2VwdGlvbihpby5wbGF0Zm9ybTYuY29tbW9uLnV0aWwuUDZFeGNlcHRpb24sJ05vIG1hdGNoaW5nIHJ1bGUgZm91bmQgZm9yIGl0ZW0hJylcXG4gICAgICAgICAgICAuZW5kKClcXG4gICAgICAgICAgICAucm91dGVJZCgncDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBRdW90ZXMnKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBRdW90ZXNcXFwiKVxcbiAgICB9XFxufSlcXG5cIixcInR5cGVcIjpcInhtbF9yb3V0aW5nXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NzI0NzgwN31dLCJwbGF0Zm9ybTYudGFibGVzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi50YWJsZXMiLCJuYW1lIjoiSXRlbXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJJdGVtc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJJdGVtc1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODU0NSxcInJldmlzaW9uSWRcIjpcIjk1MjUxOTI4YTdlMTZlMTI5MTlkMjhmNzdjMDc2NTQ4XCIsXCJmaWVsZHNcIjpbe1wibmFtZVwiOlwiSWRcIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH0se1wibmFtZVwiOlwiRGVzY3JpcHRpb25cIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH0se1wibmFtZVwiOlwiVW5pdFByaWNlXCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcIkN1cnJlbmN5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcIlVPTVwiLFwidHlwZVwiOlwic3RyaW5nXCIsXCJsZW5ndGhcIjotMS4wfSx7XCJuYW1lXCI6XCJDYXRlZ29yeVwiLFwidHlwZVwiOlwic3RyaW5nXCIsXCJsZW5ndGhcIjotMS4wfV0sXCJrZXlzXCI6W1wiSWRcIl19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4NTQ1fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnRhYmxlcyIsIm5hbWUiOiJBcHBDb25maWciLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJBcHBDb25maWdcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQXBwbGljYXRpb24gQ29uZmlndXJhdGlvbiBUYWJsZVwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODUzMyxcInJldmlzaW9uSWRcIjpcImY1OTkzMWM0M2Q3YjlkNTc5NzE3ODIxM2FiOTQxMDVkXCIsXCJmaWVsZHNcIjpbe1wibmFtZVwiOlwia2V5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcInZhbHVlXCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcInR5cGVcIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH1dLFwia2V5c1wiOltcImtleVwiXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1MzN9XSwicGxhdGZvcm02LnNjcmlwdHMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiVmlld19Xb3JrZmxvdyBUYXNrcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlZpZXdfV29ya2Zsb3cgVGFza3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJvdmlkZSBodG1sIGRpc3BsYXkgb2YgV29ya2Zsb3cgVGFza3NcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTgyMTksXCJyZXZpc2lvbklkXCI6XCIyOWZmMTM4Y2MzYTliOTk3ZjE1ZDUwMWUzZjljZTc5NFwiLFwibWFpblNjcmlwdFwiOlwiZGVmIHJlc3VsdHMgPSBwNi54c2x0LnByb2Nlc3MoXFxcIlZpZXdfV29ya2xvdyBUYXNrc1xcXCIsIHA2LnJlc291cmNlLmdldCgnV29ya2Zsb3dfVGFza190b19IVE1MJyksIHA2LnBpcGVsaW5lLmdldCggJ3htbCcpKVxcblxcbnA2LnBpcGVsaW5lLnB1dCAncG9ydGFsSHRtbCcsIHJlc3VsdHMsICd0ZXh0L2h0bWwnXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOlt7XCJuYW1lXCI6XCJXb3JrZmxvd19UYXNrX3RvX0hUTUxcIixcInR5cGVcIjpcIlhTTFRcIixcImNvbnRlbnRcIjpcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD1cXFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtXFxcIiB2ZXJzaW9uPVxcXCIyLjBcXFwiPlxcbiAgICA8eHNsOm91dHB1dCBtZXRob2Q9XFxcImh0bWxcXFwiIGluZGVudD1cXFwieWVzXFxcIiBvbWl0LXhtbC1kZWNsYXJhdGlvbj1cXFwieWVzXFxcIiAvPlxcbiAgICBcXG4gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD1cXFwiL1dvcmtmbG93VGFza1xcXCI+XFxuXFxuXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZpZXctd3JhcHBlclxcXCI+XFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHRleHQtbWVkaXVtXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J1RyYW5zYWN0aW9uVHlwZSddL3ZhbHVlcy9fdGV4dFxcXCIvPjx4c2w6dGV4dD4gIyA8L3hzbDp0ZXh0Pjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J1RyYW5zYWN0aW9uTnVtYmVyJ10vdmFsdWVzL190ZXh0XFxcIi8+PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHRleHQtbWVkaXVtXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPkFzc2lnbmVkIHRvOjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVxcXCIjXFxcIiBkYXRhLXRvZ2dsZT1cXFwibW9kYWxcXFwiIGRhdGEtdGFyZ2V0PVxcXCIjYXNzaWduZWVzRGlhbG9nXFxcIj48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdBc3NpZ25lZFRvJ10vdmFsdWVzL0VOXFxcIi8+PC9hPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbGctNFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGF0dXM8L2Rpdj5cXG5cXHQgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdTdGF0dXMnXS92YWx1ZXMvRU5cXFwiLz48L2Rpdj5cXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbGctNFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGFydCBkYXRlPC9kaXY+XFxuXFx0ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9XFxcIml0ZW1BdHRyaWJ1dGVzW2tleT0nU3RhcnREYXRlJ10vdmFsdWVzL190ZXh0XFxcIi8+PC9kaXY+XFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0PC9kaXY+XFxuICAgICAgICBcXG4gICAgICAgIDxkaXYgaWQ9XFxcImFzc2lnbmVlc0RpYWxvZ1xcXCIgY2xhc3M9XFxcIm1vZGFsIGZhZGVcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWRpYWxvZ1xcXCI+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWNvbnRlbnRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtaGVhZGVyXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImNsb3NlXFxcIiBkYXRhLWRpc21pc3M9XFxcIm1vZGFsXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JiMyMTU7PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cXFwibW9kYWwtdGl0bGVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicmlnaHQtc3BhY2VkXFxcIj5Bc3NpZ25lZCB0bzo8L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J0Fzc2lnbmVkVG8nXS92YWx1ZXMvRU5cXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2g0PlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1ib2R5XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XFxcImJhc2ljLWxpc3Qgbm8tYm90dG9tLW1hcmdpblxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PVxcXCJhc3NpZ25lZXMvYXNzaWduZWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCIuXFxcIi8+PC9saT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcblxcdDwveHNsOnRlbXBsYXRlPlxcblxcbjwveHNsOnN0eWxlc2hlZXQ+XCIsXCJjb21waWxlZENvbnRlbnRcIjpudWxsLFwiYnl0ZUNvbnRlbnRcIjpudWxsfV19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MjE5fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZTdGVwQnVpbGRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGU3RlcEJ1aWxkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWRhcHQgV29ya2Zsb3cgU3RlcHMgb24gdGhlIGZseSBsZXZlcmFnaW5nIGEgV29ya2Zsb3cgU3RlcCB1c2VkIGFzIHRlbXBsYXRlIChvcHRpb25hbClcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ4MjEsXCJyZXZpc2lvbklkXCI6XCIwOGQyOWRhZWJhN2E0NmNiMjhiYTAwZWZlZDNmYTc0ZVwiLFwibWFpblNjcmlwdFwiOlwicDYucGlwZWxpbmUudmFyaWFibGVzKCkuZWFjaCgpIHsgbG9nLmRlYnVnIFxcXCJQSVBFTElORSBWQVIgJHtpdH1cXFwiIH1cXG5cXG5kZWYgd29ya2Zsb3dTdGVwID0gcDYucGlwZWxpbmUuZ2V0WG1sICd0ZW1wbGF0ZVN0ZXBYbWwnXFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaXRlbUlkcyA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuaWRzJ1xcblxcbmRlZiBpdGVtUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCBpdGVtSWRzKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZXhpc3RzKGl0ZW1QaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuLy9kZWYgdHJhbnNhY3Rpb25JbmZvID0gcGlwZWxpbmUuZ2V0WG1sICdfREVGQVVMVF8nXFxuXFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyogIEFERCBPTkUgUEFSQU1FVEVSIEJZIExJTkUgVE8gQUNUSU9OICAgKi9cXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG5kZWYgbXlBY3Rpb24gPSB3b3JrZmxvd1N0ZXAuQWN0aW9ucy5BY3Rpb24uZmluZHtpdC5AaWQgPSAnc2VuZCd9XFxuXFxuaW50IG5iTGluZXMgPSBJbnRlZ2VyLnBhcnNlSW50KHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5maW5ke2l0LktleSA9PSAnTGluZSBpdGVtcyd9LlZhbHVlLnRleHQoKSlcXG5cXG5kZWYgc3RlcFhtbCA9IGdyb292eS54bWwuWG1sVXRpbC5zZXJpYWxpemUoIHdvcmtmbG93U3RlcCApXFxuXFxucDYucGlwZWxpbmUucHV0ICdzdGVwWG1sJywgc3RlcFhtbFxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ4MjF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJJbml0aWFsaXplQXBwbGljYXRpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJJbml0aWFsaXplQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVwbG95IEJ1bmRsZWQgUmVzb3VyY2VzIGFuZCBpbml0aWFsaXplIFRhYmxlc1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQzOTkzNTY3OSxcInJldmlzaW9uSWRcIjpcIjc5MDY0ZDkwMmQyZjg3YTVkODE2NjQ4ZmZiNzM2Zjk5XCIsXCJtYWluU2NyaXB0XCI6XCIvLyBUaGlzIHNjcmlwdCBpcyBsYXVuY2hlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb24gdGhlIGluc3RhbmNlXFxuXFxuXFxuaW1wb3J0IGlvLnBsYXRmb3JtNi5kZW1vLnNjLlJlcXVlc3RGb3JRdW90YXRpb25zXFxuXFxuaW1wb3J0IG9yZy53ZWIzai50eC4qXFxuaW1wb3J0IG9yZy53ZWIzai50eC5yZXNwb25zZS5Qb2xsaW5nVHJhbnNhY3Rpb25SZWNlaXB0UHJvY2Vzc29yXFxuXFxuXFxuLy8gRGVwbG95IChjb3B5IHRvIGxvY2FsIGZpbGUgc3lzdGVtKSBidW5kbGVkIHJlc291cmNlc1xcbnA2LmJ1bmRsZWQuZGVwbG95KCdwNl9kZW1vLkRlbW9TbWFydENvbnRyYWN0JylcXG5wNi5idW5kbGVkLmRlcGxveSgncDZfZGVtby5QT1JldmlldycpXFxucDYuYnVuZGxlZC5kZXBsb3koJ3A2X2RlbW8uVGFibGVJdGVtc0RhdGEnKVxcbmxvZy5kZWJ1ZyAnTG9hZGVkIGJ1bmRsZWQgcmVzb3VyY2VzJ1xcblxcbi8vIFBvcHVsYXRlIHRoZSBJdGVtcyB0YWJsZSBmcm9tIHRoZSBwcm92aWRlZCBDU1YgZmlsZVxcblN0cmluZyBQNl9UTVAgPSBTeXN0ZW0uZ2V0ZW52KCdCMkJPWF9UTVAnKVxcbmRlZiBjc3ZGaWxlID0gWyBza2lwTGluZXM6IDAsIHNlcGFyYXRvcjogJywnLCB1c2VGaXJzdExpbmVIZWFkZXJzOiB0cnVlLCB1cmk6IFxcXCJmaWxlOi8vLyRQNl9UTVAvcDZfZGVtb19pdGVtcy5jc3ZcXFwiIF1cXG5cXG5wNi5jc3YucGFyc2UoY3N2RmlsZSkgeyByb3cgLT5cXG4gICAgZGVmIHJlY29yZHMgPSBuZXcgQXJyYXlMaXN0KClcXG4gICAgcmVjb3Jkc1swXSA9IHJvd1xcbiAgICBwNi50YWJsZS51cHNlcnQoJ3A2X2RlbW8uSXRlbXMnLCByZWNvcmRzKVxcbiAgICB0cnVlXFxufVxcbmxvZy5kZWJ1ZyAnUG9wdWxhdGVkIHRoZSBJdGVtcyB0YWJsZSBmcm9tIHRoZSBDU1YgZmlsZSdcXG5cXG4vLyBTYXZlIHdhbGxldCB0byBpbnRlcmFjdCB3aXRoIHNtYXJ0IGNvbnRyYWN0XFxucDYuYXBwY29uZmlnLnNhdmUoXFxcInA2X2RlbW9cXFwiLCBbXFxuICAgICdkZW1vV2FsbGV0JzogJ3tcXFwiYWRkcmVzc1xcXCI6XFxcIjYyNzMwNjA5MGFiYWIzYTZlMTQwMGU5MzQ1YmM2MGM3OGE4YmVmNTdcXFwiLFxcXCJpZFxcXCI6XFxcImM5MTM4NjdmLWU1ZTQtNGJlNi1hN2RhLTY1NGNlODMzYmZiNFxcXCIsXFxcInZlcnNpb25cXFwiOjMsXFxcImNyeXB0b1xcXCI6e1xcXCJjaXBoZXJcXFwiOlxcXCJhZXMtMTI4LWN0clxcXCIsXFxcImNpcGhlcnRleHRcXFwiOlxcXCI0YzA2MDRjY2EzMzE0ODM4ZDYzODQ3YjRlZDAyZTdhMmQxN2U1MTFlZmQ0NGY2MDUwZTA5YzIzOGE1ZDUwMDk1XFxcIixcXFwiY2lwaGVycGFyYW1zXFxcIjp7XFxcIml2XFxcIjpcXFwiYjQ4ZDgxNzMyMGVkNWI0NTliYmRkZjE0MGU1ZjA0NTNcXFwifSxcXFwia2RmXFxcIjpcXFwic2NyeXB0XFxcIixcXFwia2RmcGFyYW1zXFxcIjp7XFxcImRrbGVuXFxcIjozMixcXFwiblxcXCI6MjYyMTQ0LFxcXCJwXFxcIjoxLFxcXCJyXFxcIjo4LFxcXCJzYWx0XFxcIjpcXFwiMzVkNTMzOWFjZjZhOGYxNTQ2MmZmYzBiYjk4MWNmMzE5Nzk0YWUyMzljNTEzNDFmYjg1NGMxOGVlNDU4ZDVjN1xcXCJ9LFxcXCJtYWNcXFwiOlxcXCI3NmMxYTQ3ZjcxMjRjZDYzNDYwYWQyNWZiYjBiOWM2ZTNlYWI4ZWQ1MGQzNmY2NmUyZGM0MGMwMzg4ODExMjNlXFxcIn19J1xcbl0pXFxuXFxuLy8gRGVwbG95IHRoZSBzbWFydCBjb250cmFjdFxcbmRlZiBldGhDbGllbnRVUkwgPSBcXFwiaHR0cDovLzE3Mi4xMy4wLjIwOjg1NDVcXFwiXFxuZGVmIHdlYjNqID0gcDYuZXRoZXJldW1ycGMuYnVpbGQoZXRoQ2xpZW50VVJMKVxcbmRlZiBjcmVkZW50aWFscyA9IHA2LmV0aGVyZXVtcnBjLmdldENyZWRlbnRpYWxzKFxcXCJwNl9kZW1vLkFwcENvbmZpZ1xcXCIsIFtrZXk6IFxcXCJkZW1vV2FsbGV0XFxcIl0sIFxcXCJ2YWx1ZVxcXCIsIFxcXCJBRHVtbXlQYXNzd29yZFxcXCIpXFxuXFxuLy8gRGVmaW5lIGEgY3VzdG9tIHRyYW5zYWN0aW9uIG1hbmFnZXIgd2l0aCBhIHBvbGxpbmcgZnJlcXVlbmN5IG9mIDIgc2Vjb25kc1xcbmRlZiBwcm9jZXNzb3IgPSBuZXcgUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3Nvcih3ZWIzaiwgMjAwMEwsIFRyYW5zYWN0aW9uTWFuYWdlci5ERUZBVUxUX1BPTExJTkdfQVRURU1QVFNfUEVSX1RYX0hBU0gpXFxuZGVmIHRtID0gbmV3IFJhd1RyYW5zYWN0aW9uTWFuYWdlcih3ZWIzaiwgY3JlZGVudGlhbHMsIENoYWluSWRMb25nLk5PTkUsIHByb2Nlc3NvcilcXG5kZWYgY29udHJhY3QgPSBSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5kZXBsb3kod2ViM2osIHRtLCBwNi5ldGhlcmV1bXJwYy5ERUZBVUxUX0dBU19QUk9WSURFUikuc2VuZCgpXFxuXFxuLy8gU2F2ZSB0aGUgY29udHJhY3QgYWRkcmVzcyBhbmQgRXRoZXJldW0gY2xpZW50IFVSTCBpbiBjb25maWcgdGFibGVcXG5wNi5hcHBjb25maWcuc2F2ZShcXFwicDZfZGVtb1xcXCIsIFtcXG4gICAgXFxcImV0aENsaWVudFVSTFxcXCI6IGV0aENsaWVudFVSTCxcXG4gICAgXFxcImNvbnRyYWN0QWRkcmVzc1xcXCI6IGNvbnRyYWN0LmdldENvbnRyYWN0QWRkcmVzcygpLFxcbl0pXFxuXFxuLy8gTm90aWZ5IFA2IHRoYXQgaW5zdGFsbGF0aW9uIHdhcyBzdWNjZXNzZnVsXFxubG9nLmRlYnVnICdEZW1vIGFwcCBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkhJ1xcbnA2LnBpcGVsaW5lLnB1dChcXFwiaW5zdGFsbFNjcmlwdFJlc3VsdFxcXCIsIFxcXCJ0cnVlXFxcIilcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDM5OTM1Njc5fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiUkZRU21hcnRDb250cmFjdEhlbHBlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUkZRIFNtYXJ0IENvbnRyYWN0IEhlbHBlclwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAwODkxMjg0NCxcInJldmlzaW9uSWRcIjpcIjRmMzA5MjhhYjA2YTRhYzhhNWZjNWU0MjA4MjczYzhkXCIsXCJtYWluU2NyaXB0XCI6XCJkZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG4vLyBUZXN0IHByb3RlY3RpbmcgcHJpdmF0ZSBrZXkgd2l0aCBhIHBhc3N3b3JkIGluIGEgd2FsbGV0XFxuZGVmIHBhc3N3b3JkID0gXFxcIkFEdW1teVBhc3N3b3JkXFxcIlxcbmRlZiBwcml2YXRlS2V5ID0gXFxcIjB4Yzg3NTA5YTFjMDY3YmJkZTc4YmViNzkzZTZmYTc2NTMwYjYzODJhNGMwMjQxZTVlNGE5ZWMwYTBmNDRkYzBkM1xcXCJcXG5sb2cuZGVidWcgXFxcIldhbGxldCBmaWxlIFxcXCIgKyBoZWxwZXIuZ2VuZXJhdGVXYWxsZXRKU09ORnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleSwgcGFzc3dvcmQpXFxuXFxuLy8gVGVzdCByZWFkaW5nIGNyZWRlbnRpYWxzXFxuZGVmIGNyZWRlbnRpYWxzID0gaGVscGVyLnJlYWRDcmVkZW50aWFscygpXFxubG9nLmRlYnVnIFxcXCJBY2NvdW50IGFkZHJlc3MgaXM6IFxcXCIgKyBjcmVkZW50aWFscy5nZXRBZGRyZXNzKClcXG5sb2cuZGVidWcgXFxcIkFjY291bnQgcHJpdmF0ZSBrZXkgaXM6IDB4XFxcIiArIGNyZWRlbnRpYWxzLmdldEVjS2V5UGFpcigpLmdldFByaXZhdGVLZXkoKS50b1N0cmluZygxNilcXG5cXG4vLyBUZXN0IEV0aCBjbGllbnQgY29ubmVjdGlvblxcbmRlZiBjb250cmFjdCA9IGhlbHBlci5nZXRTbWFydENvbnRyYWN0KClcXG5sb2cuZGVidWcgXFxcIkdldCBudW1iZXIgb2YgUkZRc1xcXCJcXG5kZWYgbmJyT2ZSRlFzID0gY29udHJhY3QubmJyT2ZSRlFzKCkuc2VuZCgpXFxubG9nLmRlYnVnIFxcXCJDdXJyZW50IG51bWJlciBvZiBSRlFzIGlzOiBcXFwiICsgbmJyT2ZSRlFzXFxuXFxubG9nLmRlYnVnIFxcXCJHZXQgbnVtYmVyIG9mIHF1b3Rlc1xcXCJcXG5kZWYgbmJyT2ZRdW90ZXMgPSBjb250cmFjdC5uYnJPZlF1b3RlcygpLnNlbmQoKVxcbmxvZy5kZWJ1ZyBcXFwiQ3VycmVudCBudW1iZXIgb2YgcXVvdGVzIGlzOiBcXFwiICsgbmJyT2ZRdW90ZXNcXG5cXG4vLyBUZXN0IFJGUSBzdWJtaXNzaW9uXFxuZGVmIHJmcUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5sb2cuZGVidWcgXFxcIlJGUSBpZCBpcyBcXFwiICsgcmZxSWRcXG5cXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIHVibCA9IFxcXCI8Li4uPlxcXCJcXG5cXG5kZWYgcmVjZWlwdCA9IGhlbHBlci5zdWJtaXRSRlEocmZxSWQsIG5vdywgdWJsKVxcbmxvZy5kZWJ1ZyByZWNlaXB0LnRvU3RyaW5nKClcXG5cXG5kZWYgKHJlYWRJc3N1ZWRBdCwgcmVhZFVCTCwgcmVhZFN0YXR1cykgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVxcbmxvZy5kZWJ1ZyBcXFwiUkZRIGlzIGlzc3VlZCBhdDogXFxcIiArIHJlYWRJc3N1ZWRBdFxcbmxvZy5kZWJ1ZyBcXFwiUkZRIFVCTCBpczogXFxcIiArIHJlYWRVQkxcXG5sb2cuZGVidWcgXFxcIlJGUSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkU3RhdHVzXFxuXFxuLy8gUmVhZCBSRlFSZWNlaXZlZCBldmVudHNcXG4vL2RlZiB0b3BpY09mUkZRUmVjZWl2ZWQgPSBIYXNoLnNoYTNTdHJpbmcoXFxcIlJGUVJlY2VpdmVkKGJ5dGVzMTYsdWludDI1NixzdHJpbmcpXFxcIilcXG5sb2cuZGVidWcgXFxcIlRvcGljIG9mIFJGUVJlY2VpdmVkOiBcXFwiICsgaGVscGVyLlJGUVJlY2VpdmVkRXZlbnRIYXNoXFxuXFxuLy8gVGVzdCBkZWNsaW5pbmcgYSBSRlFcXG5kZWYgZGVjbGluZUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5yZWNlaXB0ID0gaGVscGVyLmRlY2xpbmVSRlEoZGVjbGluZUlkLCByZnFJZCwgbm93KVxcbmxvZy5kZWJ1ZyByZWNlaXB0LnRvU3RyaW5nKClcXG5cXG5kZWYgKHJlYWREZWNsaW5lSXNzdWVkQXQsIHJlYWREZWNsaW5lVUJMLCByZWFkRGVjbGluZVN0YXR1cywgcmVhZERlY2xpbmVSRlFJZCwgcmVhZERlY2xpbmVTdXBwbGllckFkZHJlc3MpID0gaGVscGVyLmdldFF1b3RlKGRlY2xpbmVJZClcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmUgaXMgaXNzdWVkIGF0OiBcXFwiICsgcmVhZERlY2xpbmVJc3N1ZWRBdFxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZSBVQkwgaXM6IFxcXCIgKyByZWFkRGVjbGluZVVCTCAvLyBzaG91bGQgYmUgZW1wdHlcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmUgc3RhdHVzIGlzOiBcXFwiICsgcmVhZERlY2xpbmVTdGF0dXMgLy8gc2hvdWxkIGJlIERlY2xpbmVcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmVkIFJGUSBpczogXFxcIiArIHJlYWREZWNsaW5lUkZRSWQgLy8gc2hvdWxkIGJlIHJmcUlkXFxubG9nLmRlYnVnIFxcXCJEZWNsaW5lIHN1cHBsaWVyIGFkZHJlc3MgaXM6IFxcXCIgKyByZWFkRGVjbGluZVN1cHBsaWVyQWRkcmVzc1xcblxcbmRlZiByZWFkRGVjbGluZWRSRlFTdGF0dXMgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVsyXVxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZWQgUkZRIHN0YXR1cyBpczogXFxcIiArIHJlYWREZWNsaW5lZFJGUVN0YXR1cyAvLyBzaG91bGQgYmUgRGVjbGluZWRcXG5cXG4vLyBUZXN0IHN1Ym1pdHRpbmcgYSBxdW90ZVxcbmRlZiBxdW90ZUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5kZWYgcXVvdGVVYmwgPSBcXFwiPHF1b3RlIC8+XFxcIlxcbnJlY2VpcHQgPSBoZWxwZXIuc3VibWl0UXVvdGUocXVvdGVJZCwgcmZxSWQsIG5vdywgcXVvdGVVYmwpXFxubG9nLmRlYnVnIHJlY2VpcHQudG9TdHJpbmcoKVxcblxcbmRlZiAocmVhZFF1b3RlSXNzdWVkQXQsIHJlYWRRdW90ZVVCTCwgcmVhZFF1b3RlU3RhdHVzLCByZWFkUXVvdGVSRlFJZCwgcmVhZFF1b3RlU3VwcGxpZXJBZGRyZXNzKSA9IGhlbHBlci5nZXRRdW90ZShxdW90ZUlkKVxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgaXMgaXNzdWVkIGF0OiBcXFwiICsgcmVhZFF1b3RlSXNzdWVkQXRcXG5sb2cuZGVidWcgXFxcIlF1b3RlIFVCTCBpczogXFxcIiArIHJlYWRRdW90ZVVCTFxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgc3RhdHVzIGlzOiBcXFwiICsgcmVhZFF1b3RlU3RhdHVzIC8vIHNob3VsZCBiZSBPZmZlclxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgUkZRIGlzOiBcXFwiICsgcmVhZFF1b3RlUkZRSWQgLy8gc2hvdWxkIGJlIHJmcUlkXFxubG9nLmRlYnVnIFxcXCJRdW90ZSBzdXBwbGllciBhZGRyZXNzIGlzOiBcXFwiICsgcmVhZFF1b3RlU3VwcGxpZXJBZGRyZXNzXFxuXFxuZGVmIHJlYWRSRlFTdGF0dXMgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVsyXVxcbmxvZy5kZWJ1ZyBcXFwiTmV3IFJGUSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkUkZRU3RhdHVzIC8vIHNob3VsZCBiZSBRdW90ZVByb3ZpZGVkXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7XCJSRlFTbWFydENvbnRyYWN0SGVscGVyXCI6XCJpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlclxcblxcbmltcG9ydCBpby5wbGF0Zm9ybTYuZGVtby5zYy5SZXF1ZXN0Rm9yUXVvdGF0aW9uc1xcblxcbmltcG9ydCBqYXZhLnRpbWUuKlxcblxcbmltcG9ydCBvcmcud2ViM2ouYWJpLkV2ZW50RW5jb2RlclxcbmltcG9ydCBvcmcud2ViM2ouYWJpLkV2ZW50VmFsdWVzXFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuRnVuY3Rpb25SZXR1cm5EZWNvZGVyXFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuVHlwZVJlZmVyZW5jZVxcbmltcG9ydCBvcmcud2ViM2ouYWJpLmRhdGF0eXBlcy5FdmVudFxcbmltcG9ydCBvcmcud2ViM2ouYWJpLmRhdGF0eXBlcy5UeXBlXFxuaW1wb3J0IG9yZy53ZWIzai5jcnlwdG8uKlxcbmltcG9ydCBvcmcud2ViM2oucHJvdG9jb2wuY29yZS5tZXRob2RzLnJlc3BvbnNlLlRyYW5zYWN0aW9uUmVjZWlwdFxcbmltcG9ydCBvcmcud2ViM2oudHguKlxcbmltcG9ydCBvcmcud2ViM2oudHgucmVzcG9uc2UuUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3NvclxcbmltcG9ydCBvcmcud2ViM2oudXRpbHMuTnVtZXJpY1xcblxcblxcbmVudW0gUkZRU3RhdHVzIHtcXG4gICAgUmVjZWl2ZWQsIERlY2xpbmVkLCBRdW90ZVByb3ZpZGVkXFxufVxcblxcbmVudW0gUXVvdGVTdGF0dXMge1xcbiAgICBPZmZlciwgRGVjbGluZVxcbn1cXG5cXG5jbGFzcyBSRlFTbWFydENvbnRyYWN0SGVscGVyIHtcXG5cXG4gICAgLy8gQ29uc3RhbnRzXFxuICAgIHN0YXRpYyBkZWYgY29uZmlnVGFibGVOYW1lID0gXFxcInA2X2RlbW8uQXBwQ29uZmlnXFxcIlxcbiAgICBzdGF0aWMgZGVmIGNyZWRlbnRpYWxLZXkgPSBba2V5OiBcXFwiZGVtb1dhbGxldFxcXCJdXFxuICAgIHN0YXRpYyBkZWYgY3JlZGVudGlhbEZpZWxkTmFtZSA9IFxcXCJ2YWx1ZVxcXCJcXG5cXG4gICAgLy8gISEhIEZvciBkZW1vIHB1cnBvc2VzLCBkb24ndCBkbyB0aGlzIGluIHByb2R1Y3Rpb24hIEFsd2F5cyBhc2sgdGhlIHVzZXIgZm9yIGhpcy9oZXIgcGFzc3dvcmQgb3Igc3RvcmUgeW91ciBwcml2YXRlIGtleSBpbiBhIHZhdWx0L0hEIHdhbGxldCFcXG4gICAgc3RhdGljIGRlZiBwYXNzd29yZCA9IFxcXCJBRHVtbXlQYXNzd29yZFxcXCJcXG5cXG4gICAgLy8gSGVscGVyIHN0YXRlXFxuICAgIGRlZiBjb250ZXh0XFxuICAgIGRlZiB3ZWIzalxcbiAgICBkZWYgc21hcnRDb250cmFjdFxcblxcbiAgICBSRlFTbWFydENvbnRyYWN0SGVscGVyKGRlZiBjb250ZXh0KSB7XFxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XFxuXFxuICAgICAgICBkZWYgZXRoQ2xpZW50VVJMICA9IGNvbnRleHQucDYudGFibGUubG9va3VwKCdwNl9kZW1vLkFwcENvbmZpZycsIFtrZXk6ICdldGhDbGllbnRVUkwnXSkudmFsdWVbMF1cXG4gICAgICAgIHRoaXMud2ViM2ogPSBjb250ZXh0LnA2LmV0aGVyZXVtcnBjLmJ1aWxkKGV0aENsaWVudFVSTClcXG5cXG4gICAgICAgIC8vIERlZmluZSBhIGN1c3RvbSB0cmFuc2FjdGlvbiBtYW5hZ2VyIHdpdGggYSBwb2xsaW5nIGZyZXF1ZW5jeSBvZiAyIHNlY29uZHNcXG4gICAgICAgIGRlZiBwcm9jZXNzb3IgPSBuZXcgUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3Nvcih3ZWIzaiwgMjAwMEwsIFRyYW5zYWN0aW9uTWFuYWdlci5ERUZBVUxUX1BPTExJTkdfQVRURU1QVFNfUEVSX1RYX0hBU0gpXFxuICAgICAgICBkZWYgdHJhbnNhY3Rpb25NYW5hZ2VyID0gbmV3IFJhd1RyYW5zYWN0aW9uTWFuYWdlcih3ZWIzaiwgcmVhZENyZWRlbnRpYWxzKCksIENoYWluSWRMb25nLk5PTkUsIHByb2Nlc3NvcilcXG5cXG4gICAgICAgIGRlZiBjb250cmFjdEFkZHJlc3MgPSBjb250ZXh0LnA2LnRhYmxlLmxvb2t1cCgncDZfZGVtby5BcHBDb25maWcnLCBba2V5OiAnY29udHJhY3RBZGRyZXNzJ10pLnZhbHVlWzBdXFxuICAgICAgICB0aGlzLnNtYXJ0Q29udHJhY3QgPSBSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5sb2FkKGNvbnRyYWN0QWRkcmVzcywgd2ViM2osIHRyYW5zYWN0aW9uTWFuYWdlciwgY29udGV4dC5wNi5ldGhlcmV1bXJwYy5ERUZBVUxUX0dBU19QUk9WSURFUilcXG4gICAgfVxcblxcbiAgICBDcmVkZW50aWFscyByZWFkQ3JlZGVudGlhbHMoKSB7XFxuICAgICAgICByZXR1cm4gY29udGV4dC5wNi5ldGhlcmV1bXJwYy5nZXRDcmVkZW50aWFscyhjb25maWdUYWJsZU5hbWUsIGNyZWRlbnRpYWxLZXksIGNyZWRlbnRpYWxGaWVsZE5hbWUsIHBhc3N3b3JkKVxcbiAgICB9XFxuXFxuICAgIFRyYW5zYWN0aW9uUmVjZWlwdCBzdWJtaXRSRlEoVVVJRCBpZCwgWm9uZWREYXRlVGltZSBub3csIFN0cmluZyB1YmwpIHtcXG4gICAgICAgIHJldHVybiBzbWFydENvbnRyYWN0LnN1Ym1pdFJGUShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLnpkdFRvQmlnSW50ZWdlcihub3cpLFxcbiAgICAgICAgICAgIHVibCkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UkZRKFVVSUQgaWQpIHtcXG4gICAgICAgIGRlZiByZXN1bHQgPSBzbWFydENvbnRyYWN0LmdldFJGUShjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCkpLnNlbmQoKVxcblxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVChyZXN1bHQuZ2V0VmFsdWUxKCkpXFxuICAgICAgICBkZWYgdWJsID0gcmVzdWx0LmdldFZhbHVlMigpXFxuICAgICAgICBkZWYgc3RhdHVzID0gUkZRU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IGRlY2xpbmVSRlEoVVVJRCBkZWNsaW5lSWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93KSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5kZWNsaW5lUkZRKFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRCeXRlc0Zyb21VVUlEKGRlY2xpbmVJZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UXVvdGUoVVVJRCBpZCkge1xcbiAgICAgICAgZGVmIHJlc3VsdCA9IHNtYXJ0Q29udHJhY3QuZ2V0UXVvdGUoY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQoaWQpKS5zZW5kKClcXG5cXG4gICAgICAgIGRlZiBpc3N1ZWRBdCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5iaWdJbnRlZ2VyVG9aRFQocmVzdWx0LmdldFZhbHVlMSgpKVxcbiAgICAgICAgZGVmIHVibCA9IHJlc3VsdC5nZXRWYWx1ZTIoKVxcbiAgICAgICAgZGVmIHN0YXR1cyA9IFF1b3RlU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMocmVzdWx0LmdldFZhbHVlNCgpKVxcbiAgICAgICAgZGVmIHN1cHBsaWVyQWRkcmVzcyA9IHJlc3VsdC5nZXRWYWx1ZTUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMsIHJmcUlkLCBzdXBwbGllckFkZHJlc3MpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IHN1Ym1pdFF1b3RlKFVVSUQgaWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93LCBTdHJpbmcgdWJsKSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5zdWJtaXRRdW90ZShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSwgdWJsKS5zZW5kKClcXG4gICAgfVxcblxcbiAgICAvLyBSZWFkIGV2ZW50c1xcblxcbiAgICBmaW5hbCBzdGF0aWMgU3RyaW5nIFJGUVJlY2VpdmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5SRlFSRUNFSVZFRF9FVkVOVClcXG5cXG4gICAgVHVwbGUgcmVhZFJGUVJlY2VpdmVkRXZlbnQoU3RyaW5nW10gbG9nVG9waWNzLCBTdHJpbmcgbG9nRGF0YSkge1xcbiAgICAgICAgZGVmIGV2ZW50ID0gZXh0cmFjdEV2ZW50KFJlcXVlc3RGb3JRdW90YXRpb25zLlJGUVJFQ0VJVkVEX0VWRU5ULCBsb2dUb3BpY3MsIGxvZ0RhdGEpXFxuXFxuICAgICAgICBkZWYgcmZxSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgaXNzdWVkQXQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uYmlnSW50ZWdlclRvWkRUKChCaWdJbnRlZ2VyKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDEpLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgdWJsID0gKFN0cmluZykgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgyKS5nZXRWYWx1ZSgpXFxuXFxuICAgICAgICByZXR1cm4gbmV3IFR1cGxlKHJmcUlkLCBpc3N1ZWRBdCwgdWJsKVxcbiAgICB9XFxuXFxuICAgIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkZRRGVjbGluZWRFdmVudEhhc2ggPSBFdmVudEVuY29kZXIuZW5jb2RlKFJlcXVlc3RGb3JRdW90YXRpb25zLlJGUURFQ0xJTkVEX0VWRU5UKVxcblxcbiAgICBUdXBsZSByZWFkUkZRRGVjbGluZWRFdmVudChTdHJpbmdbXSBsb2dUb3BpY3MsIFN0cmluZyBsb2dEYXRhKSB7XFxuICAgICAgICBkZWYgZXZlbnQgPSBleHRyYWN0RXZlbnQoUmVxdWVzdEZvclF1b3RhdGlvbnMuUkZRREVDTElORURfRVZFTlQsIGxvZ1RvcGljcywgbG9nRGF0YSlcXG5cXG4gICAgICAgIGRlZiBzdXBwbGllciA9IChTdHJpbmcpIGV2ZW50LmdldEluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKVxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgwKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHF1b3RlSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDEpLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgaXNzdWVkQXQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uYmlnSW50ZWdlclRvWkRUKChCaWdJbnRlZ2VyKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDIpLmdldFZhbHVlKCkpXFxuXFxuICAgICAgICByZXR1cm4gbmV3IFR1cGxlKHN1cHBsaWVyLCByZnFJZCwgcXVvdGVJZCwgaXNzdWVkQXQpXFxuICAgIH1cXG5cXG4gICAgZmluYWwgc3RhdGljIFN0cmluZyBRdW90ZVJlY2VpdmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5RVU9URVJFQ0VJVkVEX0VWRU5UKVxcblxcbiAgICBUdXBsZSByZWFkUXVvdGVSZWNlaXZlZEV2ZW50KFN0cmluZ1tdIGxvZ1RvcGljcywgU3RyaW5nIGxvZ0RhdGEpIHtcXG4gICAgICAgIGRlZiBldmVudCA9IGV4dHJhY3RFdmVudChSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5RVU9URVJFQ0VJVkVEX0VWRU5ULCBsb2dUb3BpY3MsIGxvZ0RhdGEpXFxuXFxuICAgICAgICBkZWYgc3VwcGxpZXIgPSAoU3RyaW5nKSBldmVudC5nZXRJbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKClcXG4gICAgICAgIGRlZiByZnFJZCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRVVUlERnJvbUJ5dGVzKChieXRlW10pIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKSlcXG4gICAgICAgIGRlZiBxdW90ZUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgxKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVCgoQmlnSW50ZWdlcikgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgyKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHVibCA9IChTdHJpbmcpIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMykuZ2V0VmFsdWUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0LCB1YmwpXFxuICAgIH1cXG5cXG4gICAgLy8gRXZlbnQgaGVscGVyIG1ldGhvZHNcXG5cXG4gICAgc3RhdGljIEV2ZW50VmFsdWVzIGV4dHJhY3RFdmVudChFdmVudCBldmVudCwgU3RyaW5nW10gbG9nVG9waWNzLCBTdHJpbmcgbG9nRGF0YSkge1xcbiAgICAgICAgU3RyaW5nIGVuY29kZWRFdmVudFNpZ25hdHVyZSA9IEV2ZW50RW5jb2Rlci5lbmNvZGUoZXZlbnQpXFxuXFxuICAgICAgICBpZiAobG9nVG9waWNzWzBdICE9IGVuY29kZWRFdmVudFNpZ25hdHVyZSkge1xcbiAgICAgICAgICAgIHJldHVybiBudWxsXFxuICAgICAgICB9XFxuXFxuICAgICAgICBMaXN0PFR5cGU+IGluZGV4ZWRWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PD4oKVxcbiAgICAgICAgTGlzdDxUeXBlPiBub25JbmRleGVkVmFsdWVzID0gRnVuY3Rpb25SZXR1cm5EZWNvZGVyLmRlY29kZShsb2dEYXRhLCBldmVudC5nZXROb25JbmRleGVkUGFyYW1ldGVycygpKVxcblxcbiAgICAgICAgTGlzdDxUeXBlUmVmZXJlbmNlPFR5cGU+PiBpbmRleGVkUGFyYW1ldGVycyA9IGV2ZW50LmdldEluZGV4ZWRQYXJhbWV0ZXJzKClcXG4gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXhlZFBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHtcXG4gICAgICAgICAgICBUeXBlIHZhbHVlID0gRnVuY3Rpb25SZXR1cm5EZWNvZGVyLmRlY29kZUluZGV4ZWRWYWx1ZShsb2dUb3BpY3NbaSArIDFdLCBpbmRleGVkUGFyYW1ldGVycy5nZXQoaSkpXFxuICAgICAgICAgICAgaW5kZXhlZFZhbHVlcy5hZGQodmFsdWUpXFxuICAgICAgICB9XFxuXFxuICAgICAgICByZXR1cm4gbmV3IEV2ZW50VmFsdWVzKGluZGV4ZWRWYWx1ZXMsIG5vbkluZGV4ZWRWYWx1ZXMpXFxuICAgIH1cXG5cXG4gICAgc3RhdGljIGdlbmVyYXRlV2FsbGV0SlNPTkZyb21Qcml2YXRlS2V5KFN0cmluZyBwcml2YXRlS2V5SW5IZXgsIFN0cmluZyBwYXNzd29yZCkge1xcbiAgICAgICAgZGVmIHByaXZhdGVLZXkgPSBuZXcgQmlnSW50ZWdlcihOdW1lcmljLmNsZWFuSGV4UHJlZml4KHByaXZhdGVLZXlJbkhleCksIDE2KVxcbiAgICAgICAgZGVmIGtleVBhaXIgPSBFQ0tleVBhaXIuY3JlYXRlKHByaXZhdGVLZXkpXFxuICAgICAgICBkZWYgd2FsbGV0RmlsZSA9IFdhbGxldC5jcmVhdGVTdGFuZGFyZChwYXNzd29yZCwga2V5UGFpcilcXG4gICAgICAgIGRlZiBvYmplY3RNYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKClcXG4gICAgICAgIHJldHVybiBvYmplY3RNYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKHdhbGxldEZpbGUpXFxuICAgIH1cXG5cXG4gICAgLy8gRGF0ZSAvIFRpbWUgaGVscGVyIGZ1bmN0aW9uc1xcblxcbiAgICBzdGF0aWMgWm9uZWREYXRlVGltZSBub3coKSB7XFxuICAgICAgICByZXR1cm4gWm9uZWREYXRlVGltZS5ub3coWm9uZUlkLnN5c3RlbURlZmF1bHQoKSlcXG4gICAgfVxcbn1cXG5cIn0sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMDg5MTI4NDR9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJSZWNlaXZlUkZRVHJhbnNhY3Rpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSZWNlaXZlUkZRVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIHRoZSByZWNlcHRpb24gb2YgYW4gUkZRIChjcmVhdGlvbiBvZiB0aGUgUkZRIFRyYW5zYWN0aW9uSW5mbywgc3RvcmFnZSB0byBmaWxlIHN5c3RlbeKApikgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBCbG9ja2NoYWluRXZlbnRIYW5kbGVyIHNjcmlwdFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODIzMixcInJldmlzaW9uSWRcIjpcImQ1YmJhYjk4ZGMxMDljYmIxY2M2Y2FmNjZmNzIwYzM0XCIsXCJtYWluU2NyaXB0XCI6XCJpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcbmltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdFxcblxcbi8vIFRoaXMgc2NyaXB0IHJlYWRzIHRoZSBpbmNvbWluZyBSRlEsIHBhcnNlcyBpdHMgY29udGVudCBhbmQgd3JpdGVzIHRoZSB0cmFuc2FjdGlvbiBpbiBQNiBkYXRhYmFzZSB1c2luZyBpdHMgaW50ZXJuYWwgVHJhbnNhY3Rpb25JbmZvIG1vZGVsIChjaGVjayB0aGUgRGF0YSBNb2RlbHMgbWVudSBmb3IgbW9yZSBpbmZvKVxcbmRlZiByZnFDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICd1YmwnXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoZmFsc2UsIHRydWUpXFxuZGVmIHJmcSA9IHNsdXJwZXIucGFyc2VUZXh0KHJmcUNvbnRlbnQpXFxuXFxuZGVmIGFwcGxpY2F0aW9uSWQgPSAnRGVtb0FwcCdcXG5cXG5kZWYgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXFxuU2ltcGxlRGF0ZUZvcm1hdCB0cmFuc2FjdGlvblNERiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KFxcXCJ5eXl5TU1kZCdUJ0hIOm1tOnNzXFxcIilcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IHRyYW5zYWN0aW9uU0RGLmZvcm1hdChjdXJyZW50RGF0ZSlcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHJmcS5JRC50ZXh0KClcXG5kZWYgY29tbWVudHMgPSByZnEuTm90ZS50ZXh0KClcXG5kZWYgaXNzdWVEYXRlID0gcmZxLklzc3VlRGF0ZS50ZXh0KClcXG5cXG5pbnQgbmJMaW5lcyA9IHJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5zaXplKClcXG5cXG5kZWYgc2VsbGVyTmFtZSA9IHJmcS5TZWxsZXJTdXBwbGllclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiBidXllck5hbWUgPSByZnEuT3JpZ2luYXRvckN1c3RvbWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdSZXF1ZXN0Rm9yUXVvdGF0aW9uJ1xcbmRlZiBzdGF0dXMgPSAnUmVjZWl2ZWQnXFxuZGVmIHN0YXR1c01lc3NhZ2UgPSAnUmVjZWl2ZWQgYnkgRGVtbyBBcHAnXFxuXFxuLy8gV3JpdGUgdGhlIHRyYW5zYWN0aW9uIG9uIHRoZSBmaWxlIHN5c3RlbVxcbmRlZiBzb3VyY2VVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUmVxdWVzdEZvclF1b3RhdGlvbi9pbi9cXFwiICsgdHJhbnNhY3Rpb25JZCArIFxcXCIueG1sXFxcIlxcbmRlZiBzb3VyY2VGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHNvdXJjZVVSSSlcXG5GaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUoc291cmNlRmlsZSwgcmZxQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0YXJnZXRVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUmVxdWVzdEZvclF1b3RhdGlvbi9cXFwiICsgdHJhbnNhY3Rpb25JZCArIFxcXCIueG1sXFxcIlxcbmRlZiB0YXJnZXRGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHRhcmdldFVSSSlcXG5GaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUodGFyZ2V0RmlsZSwgcmZxQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHt0cmFuc2FjdGlvbklkfTwvSWQ+XFxuICAgIDxDcmVhdGlvbkRhdGU+JHtmb3JtYXR0ZWREYXRlfTwvQ3JlYXRpb25EYXRlPlxcbiAgICA8VHJhbnNhY3Rpb25UeXBlPlJlcXVlc3QgRm9yIFF1b3RhdGlvbjwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHt0cmFuc2FjdGlvbklkfTwvVHJhbnNhY3Rpb25OdW1iZXI+XFxuICAgIDxTb3VyY2VTeXN0ZW0+RGVtbyBBcHA8L1NvdXJjZVN5c3RlbT5cXG4gICAgPFRhcmdldFN5c3RlbS8+XFxuICAgIDxTZW5kZXIvPlxcbiAgICA8RmluYWxSZWNpcGllbnQ+U3VwcGxpZXI8L0ZpbmFsUmVjaXBpZW50PlxcbiAgICA8VHJhbnNmZXJQcm90b2NvbD5CbG9ja2NoYWluPC9UcmFuc2ZlclByb3RvY29sPlxcbiAgICA8RGVsaXZlcmVkVmlhPkV0aGVyZXVtIEJsb2NrY2hhaW48L0RlbGl2ZXJlZFZpYT5cXG4gICAgPFNvdXJjZURvY3VtZW50Rm9ybWF0PlVCTDwvU291cmNlRG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxTb3VyY2VEb2N1bWVudFVSST4ke3NvdXJjZVVSSX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1Bpdm90RG9jdW1lbnRVUkk+XFxuICAgIDxQaXZvdERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1Bpdm90RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRhcmdldERvY3VtZW50Rm9ybWF0PlVCTDwvVGFyZ2V0RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxUYXJnZXREb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1RhcmdldERvY3VtZW50VVJJPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRlY2huaWNhbFN0YXR1c0NvZGU+JHtzdGF0dXN9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3N0YXR1c01lc3NhZ2V9PC9UZWNobmljYWxTdGF0dXNNZXNzYWdlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9UZWNobmljYWxTdGF0dXNEYXRlPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0NvZGUvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0RhdGUvPlxcbiAgICA8RmxhZ3M+e1xcXCJhYXZpc2libGVcXFwiOiB0cnVlfTwvRmxhZ3M+XFxuICAgIDxPcmdQYXRoPi8ke2FwcGxpY2F0aW9uSWR9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkJ1eWVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoYnV5ZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT48L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QXBwbGljYXRpb248L0tleT5cXG4gICAgICA8VmFsdWU+cDZfZGVtbzwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG48L1RyYW5zYWN0aW9uSW5mbz5cXFwiXFxcIlxcXCJcXG5cXG5kZWYgaXBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSygnVHJhbnNhY3Rpb25JbmZvJywgdHJhbnNhY3Rpb25JZClcXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUodHJhbnNhY3Rpb25JbmZvLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MjMyfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiVmlld19UcmFuc2FjdGlvbnMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJWaWV3X1RyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIGh0bWwgZGlzcGxheSBvZiBUcmFuc2FjdGlvbnNcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg0NTQsXCJyZXZpc2lvbklkXCI6XCI5MWY3MzM2ZTk2ZjkyOTI5NDg0OWI0YWVjZGJhNjQxYlwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0O1xcblxcbmxvZy5kZWJ1ZyAnUDZfREVNTydcXG5cXG5EZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoXFxcIiMjIywjIyMuMDBcXFwiKTtcXG5cXG4vLyBEaXNwbGF5IHBpcGVsaW5lIHZhcmlhYmxlc1xcbi8vIHBpcGVsaW5lLnZhcmlhYmxlcygpLmVhY2goKSB7IFxcbi8vICAgICBsb2cuZGVidWcgXFxcIlBJUEVMSU5FIFZBUiAke2l0fVxcXCIgXFxuLy8gfVxcblxcbi8vIEdldCBhbmQgZGlzcGxheSByYXcgWG1sIGZvciB0ZXN0XFxuZGVmIHByZXR0eVhtbCA9IHA2LnBpcGVsaW5lLmdldCAneG1sJ1xcblxcbi8vIEdldCBzbHVycGVkIHhtbFxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBwNi5waXBlbGluZS5nZXRYbWwgJ3htbCdcXG5cXG4vLyBSZXR1cm4gZmlsZSBleHRlbnNpb25cXG5kZWYgZ2V0X2ZpbGVfZXh0ZW5zaW9uID0geyBTdHJpbmcgcGF0aCAtPiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKSB9XFxuXFxuLy8gUmV0dXJuIGZpbGUgbmFtZVxcbmRlZiBnZXRfZmlsZV9uYW1lID0geyBTdHJpbmcgcGF0aCAtPiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCcvJykgKyAxKSB9IFxcblxcbi8vIEtleVxcbmRlZiBJZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5kZWYgQnVzaW5lc3NEb2NOYW1lID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uVHlwZS50ZXh0KClcXG5kZWYgQnVzaW5lc3NEb2NOdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uVHJhbnNhY3Rpb25OdW1iZXIudGV4dCgpXFxuZGVmIEVuZHBvaW50ID0gdHJhbnNhY3Rpb25JbmZvLkRlbGl2ZXJlZFZpYS50ZXh0KClcXG4vL2RlZiBNZXNzYWdlID0gbWVzc2FnZUluZm8uTWVzc2FnZS50ZXh0KClcXG5cXG4vLyBUcmFuc2FjdGlvblN0YXR1c0luZm9ybWF0aW9uIGJsb2NrIHN0YXJ0XFxuZGVmIFRlY2huaWNhbFN0YXR1c0NvZGUgPSB0cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZS50ZXh0KClcXG5kZWYgVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IHRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNEYXRlLnRleHQoKVxcbmRlZiBUZWNobmljYWxTdGF0dXNNZXNzYWdlID0gdHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c01lc3NhZ2UudGV4dCgpXFxuXFxuXFxuZGVmIEZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gdHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlLnRleHQoKVxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IHRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZS50ZXh0KClcXG5kZWYgRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSB0cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UudGV4dCgpXFxuLy8gVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiBibG9jayBlbmRcXG5cXG5kZWYgU291cmNlRG9jdW1lbnRVUkkgPSB0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpXFxuZGVmIHNyY0RvY0V4dGVuc2lvbiA9IGdldF9maWxlX2V4dGVuc2lvbihTb3VyY2VEb2N1bWVudFVSSSlcXG5kZWYgc3JjRG9jRmlsZU5hbWUgPSBnZXRfZmlsZV9uYW1lKFNvdXJjZURvY3VtZW50VVJJKVxcblxcbmRlZiBTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlID0gdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50Q29udGVudFR5cGUudGV4dCgpXFxuXFxuZGVmIEN1cnJlbnREb2N1bWVudFVSSSA9IHRyYW5zYWN0aW9uSW5mby5UYXJnZXREb2N1bWVudFVSSS50ZXh0KClcXG5kZWYgY3VyRG9jRXh0ZW5zaW9uID0gZ2V0X2ZpbGVfZXh0ZW5zaW9uKEN1cnJlbnREb2N1bWVudFVSSSlcXG5kZWYgY3VyRG9jRmlsZU5hbWUgPSBnZXRfZmlsZV9uYW1lKEN1cnJlbnREb2N1bWVudFVSSSlcXG5cXG5kZWYgQ3VycmVudERvY3VtZW50Q29udGVudFR5cGUgPSB0cmFuc2FjdGlvbkluZm8uVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZS50ZXh0KClcXG5cXG5kZWYgQXR0YWNobWVudHMgPSB0cmFuc2FjdGlvbkluZm8uQXR0YWNobWVudHNcXG5kZWYgRGlzcGxheWFibGVBdHRhY2htZW50cyA9IFxcXCJcXFwiXFxuXFxuQXR0YWNobWVudHMuZWFjaCB7XFxuICAgIGRlZiBVUkkgPSBpdC5BdHRhY2htZW50LlVSSS50ZXh0KClcXG4gICAgZGVmIENvbnRlbnRUeXBlID0gaXQuQXR0YWNobWVudC5Db250ZW50VHlwZS50ZXh0KClcXG4gICAgZGVmIGF0dGFjaG1lbnRFeHRlbnNpb24gPSBnZXRfZmlsZV9leHRlbnNpb24oVVJJKVxcbiAgICBkZWYgYXR0YWNobWVudEZpbGVOYW1lID0gZ2V0X2ZpbGVfbmFtZShVUkkpXFxuICAgIGRlZiBjdXJyZW50QXR0YWNobWVudCA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJpbmxpbmUtYmxvY2tcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj48Y2VudGVyPkF0dGFjaG1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke2F0dGFjaG1lbnRFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1leHRlbnNpb249XFxcIiR7YXR0YWNobWVudEV4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICBkYXRhLWlkcz0ke0lkfVxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiRVUkl9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50LXR5cGU9XFxcIiR7Q29udGVudFR5cGV9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS12aWV3PVxcXCJ7e1ZJRVdOQU1FfX1cXFwiPlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPVxcXCJhdHRhY2htZW50RmlsZU5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9XFxcImdldC1maWxlLW5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPVxcXCJwYXRoXFxcIiBzZWxlY3Q9XFxcIlVSSVxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+XFxuICAgICAgICAgICAgICAgICAgICA8L3hzbDp2YXJpYWJsZT5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGUtbmFtZVxcXCIgdGl0bGU9XFxcIiR7YXR0YWNobWVudEZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAke2F0dGFjaG1lbnRGaWxlTmFtZX1cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgRGlzcGxheWFibGVBdHRhY2htZW50cyA9IFxcXCIke0Rpc3BsYXlhYmxlQXR0YWNobWVudHN9JHtjdXJyZW50QXR0YWNobWVudH1cXFwiXFxufVxcblxcbi8vIFdpbGwgZGlzcGxheSBpbmZvIG9uIEVycm9ycyBjYXB0dXJlZCB0aGUgXFxcIm9sZFxcXCIgd2F5XFxuZGVmIElzc3VlID0gdHJhbnNhY3Rpb25JbmZvLklzc3VlXFxuZGVmIElzc3VlTGV2ZWxFUlJPUiA9IElzc3VlLmZpbmRBbGwgeyBpdC5sZXZlbCA9PSAnRVJST1InIH1cXG5kZWYgZXJyb3JzID0gW11cXG5cXG5Jc3N1ZUxldmVsRVJST1IuZWFjaCB7XFxuICAgIGlmIChpdC5sZXZlbCA9PSAnRVJST1InKSB7XFxuICAgICAgICBlcnJvcnMgPSB0b2tlbml6ZSggaXQuVGV4dCwgJyYjeEE7JyApXFxuICAgIH1cXG59XFxuXFxuZGVmIElzc3VlRXJyb3JMaW5lID0gXFxcIlxcXCJcXG5cXG5lcnJvcnMuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcIm1pLWxpbmVcXFwiPlxcbiAgICAgICAgPHN0cm9uZz48c3BhbiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke3Rva2VuaXplKGl0LCdcXFxcXFxcXHwnKVsxXX08L3NwYW4+PC9zdHJvbmc+IDxzcGFuPiAtIDwvc3Bhbj5cXG4gICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7dG9rZW5pemUoaXQsJ1xcXFxcXFxcfCcpWzJdfTwvc3Bhbj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgSXNzdWVFcnJvckxpbmUgPSBcXFwiJHtJc3N1ZUVycm9yTGluZX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgSXNzdWVMZXZlbEVycm9yT2xkV2F5ID0gKElzc3VlTGV2ZWxFUlJPUi5zaXplKCkgIT0gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkludmFsaWQgZG9jdW1lbnQgZHVlIHRvIDxzdHJvbmc+JHtlcnJvcnMuc2l6ZSgpfSBlcnJvcihzKTwvc3Ryb25nPjwvZGl2PlxcbiAgICAgICAgXFxuICAgICAgICAke0lzc3VlRXJyb3JMaW5lfVxcblxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbi8vIFdpbGwgZGlzcGxheSBpbmZvIG9uIEVycm9ycyBjYXB0dXJlZCB0aGUgXFxcIm5ld1xcXCIgd2F5XFxuZGVmIElzc3VlcyA9IHRyYW5zYWN0aW9uSW5mby5Jc3N1ZXNcXG5kZWYgSXNzdWVzTGV2ZWxFUlJPUiA9IElzc3Vlcy5Jc3N1ZS5maW5kQWxsIHsgaXQubGV2ZWwgPT0gJ0VSUk9SJyB9XFxuXFxuZGVmIElzc3Vlc0Vycm9yTGluZSA9IFxcXCJcXFwiXFxuXFxuSXNzdWVzTGV2ZWxFUlJPUi5lYWNoIHtcXG4gICAgZGVmIGxpbmUgPSBcXFwiXFxcIlxcXCJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1pLWxpbmVcXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPuKAoiAke2l0Lk1lc3NhZ2V9PC9zcGFuPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgaXNzdWVzTGV2ZWxFcnJvck5ld1dheSA9IFxcXCIke2lzc3Vlc0xldmVsRXJyb3JOZXdXYXl9JHtsaW5lfVxcXCJcXG59XFxuXFxuZGVmIGlzc3Vlc0xldmVsRXJyb3JOZXdXYXkgPSAoSXNzdWVzTGV2ZWxFUlJPUi5zaXplKCkgIT0gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkNvbnRlbnQgY2hlY2sgaGFzIGlkZW50aWZpZWQgPHN0cm9uZz4ke0lzc3Vlc0xldmVsRVJST1Iuc2l6ZSgpfSBlcnJvcihzKTwvc3Ryb25nPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAke2lzc3Vlc0xldmVsRXJyb3JOZXdXYXl9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbmRlZiBBdWRpdFRyYWlsID0gdHJhbnNhY3Rpb25JbmZvLkF1ZGl0VHJhaWxcXG5kZWYgQXVkaW9UcmFpbFJlY29yZCA9IEF1ZGl0VHJhaWwuUmVjb3JkID86IFtdXFxuZGVmIEF1ZGlvVHJhaWxSZWNvcmREaXNwbGF5ID0gXFxcIlxcXCJcXG5cXG5BdWRpb1RyYWlsUmVjb3JkLmVhY2gge1xcbiAgICBkZWYgYXVkaXRUeXBlID0gKGl0LlR5cGUgPT0gXFxcIkZ1bmN0aW9uYWxTdGF0dXNcXFwiKSA/IFxcXCJGdW5jdGlvbmFsIHN0YXR1c1xcXCIgOiAoaXQuVHlwZSA9PSBcXFwiVGVjaG5pY2FsU3RhdHVzXFxcIikgPyBcXFwiVGVjaG5pY2FsIHN0YXR1c1xcXCIgOiAnJ1xcbiAgICBkZWYgbGluZSA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgcm93LWl0ZW0tc2VwYXJhdGVkXFxcIj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0xXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlR5cGU8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPlxcbiAgICAgICAgICAgICAgICAke2F1ZGl0VHlwZX1cXG4gICAgICAgICAgICAvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuQ29kZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTNcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5EYXRlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctNlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5NZXNzYWdlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0Lk1lc3NhZ2V9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgQXVkaW9UcmFpbFJlY29yZERpc3BsYXkgPSBcXFwiJHtBdWRpb1RyYWlsUmVjb3JkRGlzcGxheX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgQXVkaW9UcmFpbERpc3BsYXkgPSAoQXVkaW9UcmFpbFJlY29yZC5zaXplKCkgPiAwKSA/IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgdG9wLW1hcmdpblxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiIHN0eWxlPVxcXCJtYXJnaW4tYm90dG9tOiA1cHg7XFxcIj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cXFwiYnRuIGJ0bi14cyBidG4tc3VjY2Vzc1xcXCIgZGF0YS10b2dnbGU9XFxcImNvbGxhcHNlXFxcIiBkYXRhLXRhcmdldD1cXFwiI2F1ZGl0VHJhaWxcXFwiPlN0YXR1cyBoaXN0b3J5PC9idXR0b24+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBpZD1cXFwiYXVkaXRUcmFpbFxcXCIgY2xhc3M9XFxcImNvbGxhcHNlIHNpZGUtcGFkZGVkXFxcIj48ZGl2PjwvZGl2PlxcbiAgICAgICAgICAgICAgICAke0F1ZGlvVHJhaWxSZWNvcmREaXNwbGF5fVxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgIDwvZGl2PlxcblxcXCJcXFwiXFxcIiA6IFxcXCJcXFwiXFxuXFxuZGVmIFdvcmtmbG93ID0gdHJhbnNhY3Rpb25JbmZvLldvcmtmbG93XFxuZGVmIFdvcmtmbG93SW5zdGFuY2UgPSB0cmFuc2FjdGlvbkluZm8uV29ya2Zsb3cuSW5zdGFuY2VcXG5kZWYgV29ya2Zsb3dJbnN0YW5jZURpc3BsYXkgPSBcXFwiXFxcIlxcblxcblxcbldvcmtmbG93SW5zdGFuY2UuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvdyByb3ctaXRlbS1zZXBhcmF0ZWRcXFwiPlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+V29ya2Zsb3cgVHlwZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGVwLnN0ZXBJZH08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhcnQgRGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGFydERhdGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkVuZCBEYXRlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LmVuZERhdGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc2lnbmVkIHRvPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LnN0ZXAuYXNzaWduZWRUb05hbWV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkhhbmRsZWQgYnk8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuc3RlcC5hY3Rpb25lZEJ5RW1haWx9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlN0YXR1czwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGF0dXN9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgV29ya2Zsb3dJbnN0YW5jZURpc3BsYXkgPSBcXFwiJHtXb3JrZmxvd0luc3RhbmNlRGlzcGxheX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgV29ya2Zsb3dEaXNwbGF5ID0gKFdvcmtmbG93SW5zdGFuY2Uuc2l6ZSgpID4gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwicm93IHRvcC1tYXJnaW5cXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XFxcImJ0biBidG4teHMgYnRuLXN1Y2Nlc3NcXFwiIGRhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCIgZGF0YS10YXJnZXQ9XFxcIiNoaXN0b3J5VHJhaWxcXFwiPldvcmtmbG93IGhpc3Rvcnk8L2J1dHRvbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGlkPVxcXCJoaXN0b3J5VHJhaWxcXFwiIGNsYXNzPVxcXCJjb2xsYXBzZSBzaWRlLXBhZGRlZFxcXCI+PGRpdj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgJHtXb3JrZmxvd0luc3RhbmNlRGlzcGxheX1cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbi8vIEtleVZhbHVlXFxuZGVmIFNlbGxlck5hbWUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIlNlbGxlciBOYW1lXFxcIn0uVmFsdWUudGV4dCgpXFxuZGVmIEJ1eWVyTmFtZSA9IHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5maW5ke2l0LktleSA9PSBcXFwiQnV5ZXIgTmFtZVxcXCJ9LlZhbHVlLnRleHQoKVxcbmRlZiBJc3N1ZURhdGUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIklzc3VlIERhdGVcXFwifS5WYWx1ZS50ZXh0KClcXG5kZWYgQ3VycmVuY3kgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkN1cnJlbmN5XFxcIn0uVmFsdWUudGV4dCgpXFxuXFxuZGVmIFRvdGFsQW1vdW50ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09IFxcXCJUb3RhbCBBbW91bnRcXFwifS5WYWx1ZS50ZXh0KClcXG5cXG5wcmludCBcXFwiVE9UQUwgQU1PVU5UXFxcIiArIFRvdGFsQW1vdW50XFxuZGVmIEZvcm1hdHRlZFRvdGFsQW1vdXQgPSBUb3RhbEFtb3VudCA/IGRmLmZvcm1hdChEb3VibGUudmFsdWVPZihUb3RhbEFtb3VudCkpIDogXFxcIlxcXCJcXG5cXG5sb2cuZGVidWcgJ1A2X0RFTU8gRm9ybWF0dGVkVG90YWxBbW91dCA9ICcrRm9ybWF0dGVkVG90YWxBbW91dFxcblxcblxcbmRlZiBMaW5lSXRlbXMgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkxpbmUgaXRlbXNcXFwifS5WYWx1ZS50ZXh0KClcXG5cXG5kZWYgVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiA9IChUZWNobmljYWxTdGF0dXNDb2RlICE9ICcnKVxcbiAgICA/IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlRlY2huaWNhbCBzdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7VGVjaG5pY2FsU3RhdHVzQ29kZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZSAtIGFzIG9mICR7VGVjaG5pY2FsU3RhdHVzRGF0ZX08L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7VGVjaG5pY2FsU3RhdHVzTWVzc2FnZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgXFxcIlxcXCJcXFwiXFxuICAgIDogXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhdHVzPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj48L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG5sb2cuZGVidWcgJ1A2REVNTyBWaWV3X0RlbW8gVHJhbnNhY3Rpb24gc2NyaXB0IExJTkUgMzA2JyAgXFxuICAgIFxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzSW5mb3JtYXRpb24gPSAoRnVuY3Rpb25hbFN0YXR1c0NvZGUgIT0gJycpXFxuICAgID8gXFxcIlxcXCJcXFwiXFxuICAgIDxoci8+XFx0XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RnVuY3Rpb25hbCBzdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7RnVuY3Rpb25hbFN0YXR1c0NvZGV9PC9kaXY+XFxuXFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtOFxcXCI+XFxuICAgICAgICBcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZSAtIGFzIG9mICR7RnVuY3Rpb25hbFN0YXR1c0RhdGV9PC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0Z1bmN0aW9uYWxTdGF0dXNNZXNzYWdlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgIDwvZGl2PiBcXG4gICAgXFxcIlxcXCJcXFwiXFxuICAgIDogJydcXG5cXG4vLyBkZWYgbXlfaHRtbCA9IFxcXCJcXFwiXFxcIjxkaXY+VEVTVDwvZGl2PlxcXCJcXFwiXFxcIlxcblxcbmxvZy5kZWJ1ZyAnUDZERU1PIFZpZXdfRGVtbyBUcmFuc2FjdGlvbiBzY3JpcHQgTElORSAzMzEnXFxuXFxuZGVmIG15X2h0bWwgPSBcXFwiXFxcIlxcXCJcXG48ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmlldy13cmFwcGVyXFxcIj5cXG5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtc20tNiBtZXNzYWdlLWluZm8tc2VjdGlvblxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWhlYWRlclxcXCI+VHJhbnNhY3Rpb246IDxzdHJvbmc+PHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+JHtCdXNpbmVzc0RvY05hbWV9PC9zcGFuPiAke0J1c2luZXNzRG9jTnVtYmVyfTwvc3Ryb25nPjwvZGl2PlxcblxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlNlbGxlciBuYW1lPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7U2VsbGVyTmFtZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+QnV5ZXIgbmFtZTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0J1eWVyTmFtZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGVsaXZlcmVkIHZpYTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0VuZHBvaW50fTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgeHMtc3RhY2tlZC1zcGFjZXIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkFkZGl0aW9uYWwgaW5mb3JtYXRpb248L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcblxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5EYXRlPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0lzc3VlRGF0ZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5Ub3RhbCBBbW91bnQ8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+JHtDdXJyZW5jeX08L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Rm9ybWF0dGVkVG90YWxBbW91dH1cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkxpbmUgaXRlbXM8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7TGluZUl0ZW1zfTwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcblxcbiAgICAgICAgXFxuICAgIDwvZGl2PlxcblxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgdG9wLW1hcmdpblxcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgeHMtc3RhY2tlZC1zcGFjZXIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPlRyYW5zYWN0aW9uIHN0YXR1cyBpbmZvcm1hdGlvbjwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgICR7VHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbn0gXFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgJHtGdW5jdGlvbmFsU3RhdHVzSW5mb3JtYXRpb259XFxuICAgICAgICAgICAgXFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIFxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1zbS02IG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIj5Eb2N1bWVudHMgYW5kIEF0dGFjaG1lbnQocyk8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2PlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbmxpbmUtYmxvY2tcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj48Y2VudGVyPlNvdXJjZSBkb2N1bWVudDwvY2VudGVyPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tZmlsZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgb25jbGljaz1cXFwicGxhdGZvcm02LnRyYW5zYWN0aW9uRG93bmxvYWQodGhpcylcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cXFwiZnQtaWNvbiBmdC1pY29uLSR7c3JjRG9jRXh0ZW5zaW9ufVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZXh0ZW5zaW9uPVxcXCIke3NyY0RvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWlkcz1cXFwiJHtJZH1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXVyaT1cXFwiJHtTb3VyY2VEb2N1bWVudFVSSX1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQtdHlwZT1cXFwiJHtTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke3NyY0RvY0ZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3NyY0RvY0ZpbGVOYW1lfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5saW5lLWJsb2NrXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+PGNlbnRlcj5UYXJnZXQgZG9jdW1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke2N1ckRvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWV4dGVuc2lvbj1cXFwiJHtjdXJEb2NFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1pZHM9XFxcIiR7SWR9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiR7Q3VycmVudERvY3VtZW50VVJJfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtY29udGVudC10eXBlPVxcXCIke0N1cnJlbnREb2N1bWVudENvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT1cXFwiY3VyRG9jRmlsZU5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9XFxcImdldC1maWxlLW5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPVxcXCJwYXRoXFxcIiBzZWxlY3Q9XFxcIkN1cnJlbnREb2N1bWVudFVSSVxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6dmFyaWFibGU+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke2N1ckRvY0ZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2N1ckRvY0ZpbGVOYW1lfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgXFxuXFxuICAgICAgICAgICAgICAgICR7RGlzcGxheWFibGVBdHRhY2htZW50c31cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcblxcbiAgICAgICAgPCEtLSBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJvbGRcXFwiIHdheSAtLT5cXG4gICAgICAgIFxcbiAgICAgICAgJHtJc3N1ZUxldmVsRXJyb3JPbGRXYXl9IFxcblxcbiAgICAgICAgPCEtLSBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJuZXdcXFwiIHdheSAtLT5cXG4gICAgICAgIFxcbiAgICAgICAgJHtpc3N1ZXNMZXZlbEVycm9yTmV3V2F5fVxcblxcbiAgICBcXG4gICAgPC9kaXY+XFxuXFxuICAgICR7QXVkaW9UcmFpbERpc3BsYXl9ICAgICAgICAgICAgXFxuICAgIFxcbiAgICAke1dvcmtmbG93RGlzcGxheX0gICAgICAgICAgICAgXFxuICAgIFxcbiAgICBcXG48L2Rpdj5cXG5cXFwiXFxcIlxcXCJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ3BvcnRhbEh0bWwnLCBteV9odG1sLCAndGV4dC9odG1sJ1xcblxcbmxvZy5kZWJ1ZyAnUDZERU1PIFZpZXdfRGVtbyBUcmFuc2FjdGlvbiBzY3JpcHQgZXhlY3V0aW9uIGlzIE9WRVInXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODQ1NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlVuaW5zdGFsbEFwcGxpY2F0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVW5pbnN0YWxsQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVsZXRlIGFsbCBTZXJ2aWNlIEl0ZW1zLCBUcmFuc2FjdGlvbnMgYW5kIFdvcmtmbG93IFRhc2tzIHJlbGF0ZWQgdG8gcDZfZGVtb1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQzOTkzNTYxMixcInJldmlzaW9uSWRcIjpcImRhOTliZGFjMjM3YWRkOTMyYWM2ZTc1MmI1YjBiYmE4XCIsXCJtYWluU2NyaXB0XCI6XCIvLyBUaGlzIHNjcmlwdCBpcyBleGVjdXRlZCB0byBjbGVhbiB1cCBhbGwgdGhlIGFwcGxpY2F0aW9ucyByZXNvdXJjZXNcXG5cXG4vLyBEZWxldGUgYWxsIHRyYW5zYWN0aW9ucyBhbmQgd29ya2Zsb3cgdGFza3NcXG5wNi5zcHJvYy5leGVjdXRlKCdwNl9kZW1vLkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9ucycpXFxubG9nLmRlYnVnICdEZW1vIGFwcCB0cmFuc2FjdGlvbnMgYW5kIHdvcmtmbG93IHRhc2tzIGRlbGV0ZWQnXFxuXFxuLy8gRGVzdHJveSByb3V0ZXNcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gV2ViM2ogLSBCbG9ja2NoYWluRXZlbnRIYW5kbGVyJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBSdWxlcyBEaXNwYXRjaGVyJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUXVvdGVzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnMnKVxcbnA2LmNhbWVsLmRlc3Ryb3lSb3V0ZSgncDZfZGVtbyBTY2hlZHVsZWQgY3JlYXRpb24gb2YgUkZRcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSRlFzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFF1b3RlcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRBY2NlcHRlZFBPcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSZWplY3RlZFBPcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzJylcXG5cXG4vLyBVbmRlcGxveSBidW5kbGVkIHJlc291cmNlc1xcbnA2LmJ1bmRsZWQudW5kZXBsb3koJ3A2X2RlbW8uUE9SZXZpZXcnKVxcbnA2LmJ1bmRsZWQudW5kZXBsb3koJ3A2X2RlbW8uVGFibGVJdGVtc0RhdGEnKVxcbmxvZy5kZWJ1ZyAnQnVuZGxlZCByZXNvdXJjZXMgZGVsZXRlZCBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbSdcXG5cXG4vLyBOb3RpZnkgUDYgdGhhdCB1bi1pbnN0YWxsYXRpb24gd2FzIHN1Y2Nlc3NmdWxcXG5wNi5waXBlbGluZS5wdXQoXFxcImluc3RhbGxTY3JpcHRSZXN1bHRcXFwiLCBcXFwidHJ1ZVxcXCIpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzQzOTkzNTYxMn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlNlbmRRdW90ZVRvQmxvY2tjaGFpbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNlbmRRdW90ZVRvQmxvY2tjaGFpblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJXcml0ZSBRdW90ZSBpbiBhbiBFdGhlcmV1bSBzbWFydCBjb250cmFjdFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTY0NzI0Nzg4OSxcInJldmlzaW9uSWRcIjpcImI2ZjZmMzYzOTJhNTNiZjUzNDg0OWY0NDYwY2Q5NWQwXCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5pbXBvcnQgamF2YS51dGlsLlVVSURcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIHF1b3RlSWRTdHJpbmcgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG4vLyBGZXRjaCB0aGUgcXVvdGUgdHJhbnNhY3Rpb24gaW5mb1xcbmRlZiBxdW90ZVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgcXVvdGVJZFN0cmluZylcXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmdldChxdW90ZVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCh0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpKVxcblN0cmluZyBxdW90ZUNvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZyhzcmNGaWxlKVxcblxcbi8vIFVwZGF0ZSB0cmFuc2FjdGlvbiBpbmZvIHN0YXR1c1xcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnU2VudCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlUGspXFxuXFxuLy8gV3JpdGUgcXVvdGUgaW4gdGhlIGJsb2NrY2hhaW5cXG5kZWYgcXVvdGVJZCA9IFVVSUQuZnJvbVN0cmluZyhxdW90ZUlkU3RyaW5nKVxcblxcbmRlZiBxdW90ZVhNTCA9IHNsdXJwZXIucGFyc2VUZXh0KHF1b3RlQ29udGVudClcXG5kZWYgcmZxSWQgPSBVVUlELmZyb21TdHJpbmcocXVvdGVYTUwuUmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlLlVVSUQudGV4dCgpKVxcblxcbmhlbHBlci5zdWJtaXRRdW90ZShxdW90ZUlkLCByZnFJZCwgbm93LCBxdW90ZUNvbnRlbnQpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NzI0Nzg4OX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IkNyZWF0ZVJGUVRyYW5zYWN0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ3JlYXRlUkZRVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQ3JlYXRlIGEgUmVxdWVzdEZvclF1b3RhdGlvbiBVQkwgRG9jdW1lbnQgYW5kIHdyaXRlIGl0IGluIGFuIEV0aGVyZXVtIHNtYXJ0IGNvbnRyYWN0XCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MzEwLFwicmV2aXNpb25JZFwiOlwiNjM2M2MyY2U0N2NkZGY2NDI1MzdkMTc0MzQ2MWFjOTBcIixcIm1haW5TY3JpcHRcIjpcIi8qKlxcbiAqIFlvdSBjYW4gY2FsbCBhbm90aGVyIHNjcmlwdCBieSB1c2luZyAnSW5jbHVkZScgdGFnc1xcbiAqIFxcbiAqIEBpbmNsdWRlIFJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcXG4gKi9cXG5cXG5pbXBvcnQgamF2YS50aW1lLmZvcm1hdC5EYXRlVGltZUZvcm1hdHRlclxcbmltcG9ydCBqYXZhLnV0aWwuVVVJRFxcbmltcG9ydCBqYXZhLnV0aWwuUmFuZG9tXFxuXFxuXFxuLy8gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGJ1eWVyIGluIHRoZSBzeXN0ZW0gdG8ga2VlcCB0aGUgRGVtbyBBcHAgc2ltcGxlXFxuZGVmIGJ1eWVySWQgPSAnMSdcXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG4vLyBDYWxjdWxhdGUgaXNzdWUgZGF0ZSBhbmQgdGltZSBmb3IgZ2VuZXJhdGVkIFJGUSB0cmFuc2FjdGlvblxcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgaXNzdWVEYXRlID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJ5eXl5LU1NLWRkXFxcIikuZm9ybWF0KG5vdylcXG5kZWYgaXNzdWVUaW1lID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxuUmFuZG9tIHJhbmQgPSBuZXcgUmFuZG9tKClcXG5cXG4vLyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBjYXRlZ29yaWVzIGZyb20gSXRlbXMgdGFibGVcXG5kZWYgaXRlbVJlY29yZHMgPSBwNi50YWJsZS5sb29rdXAoJ3A2X2RlbW8uSXRlbXMnLCBbOl0pXFxuXFxuU2V0PFN0cmluZz4gY2F0ZWdvcmllcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKVxcbk1hcDxTdHJpbmcsU3RyaW5nPiBjYXRfdG9fdW9tID0gbmV3IEhhc2hNYXA8U3RyaW5nLFN0cmluZz4oKVxcblxcbmZvciAobXlSZWNvcmQgaW4gaXRlbVJlY29yZHMpIHtcXG4gICAgZGVmIGNhdGVnb3J5ID0gbXlSZWNvcmQuQ2F0ZWdvcnlcXG4gICAgZGVmIHVvbSA9IG15UmVjb3JkLlVPTVxcblxcbiAgICBpZiAoIWNhdGVnb3JpZXMuY29udGFpbnMoY2F0ZWdvcnkpKSB7XFxuICAgICAgICBjYXRlZ29yaWVzLmFkZChjYXRlZ29yeSlcXG4gICAgICAgIGNhdF90b191b20ucHV0KGNhdGVnb3J5LCB1b20pXFxuICAgIH1cXG59XFxuXFxuLy8gR2VuZXJhdGUgcmFuZG9tIFJGUSBsaW5lcyBmcm9tIGF2YWlsYWJsZSBpdGVtc1xcbmludCBuYkxpbmVNYXggPSBjYXRlZ29yaWVzLnNpemUoKVxcbmludCBxdWFudGl0eU1heCA9IDEwXFxuaW50IG5iTGluZXMgPSByYW5kLm5leHRJbnQobmJMaW5lTWF4KSArIDFcXG5cXG5kZWYgcmZxTGluZXM9ICcnXFxuZm9yIChpbnQgaSA9MDsgaTwgbmJMaW5lczsgaSsrKSB7XFxuICAgIFxcbiAgICBpbnQgY2F0ZWdvcnlJbmRleCA9IHJhbmQubmV4dEludChjYXRlZ29yaWVzLnNpemUoKSlcXG4gICAgZGVmIGNhdGVnb3J5QXJyYXkgPSBjYXRlZ29yaWVzLnRvQXJyYXkoKVxcbiAgICBcXG4gICAgZGVmIGNhdGVnb3J5ID0gY2F0ZWdvcnlBcnJheVtjYXRlZ29yeUluZGV4XVxcbiAgICBjYXRlZ29yaWVzLnJlbW92ZShjYXRlZ29yeSlcXG5cXG4gICAgZGVmIHF1YW50aXR5ID0gcmFuZC5uZXh0SW50KHF1YW50aXR5TWF4ICsgMSkgKyAxXFxuICAgIGRlZiB1b20gPSBjYXRfdG9fdW9tLmdldChjYXRlZ29yeSlcXG4gICAgICAgIFxcbiAgICByZnFMaW5lcyArPSBcXFwiXFxcIlxcXCI8Y2FjOlJlcXVlc3RGb3JRdW90YXRpb25MaW5lPlxcbiAgICAgIDxjYmM6SUQ+JHtpKzF9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpOb3RlPnNhbXBsZTwvY2JjOk5vdGU+XFxuICAgICAgPGNhYzpMaW5lSXRlbT5cXG4gICAgICAgICA8Y2JjOklEPiR7aSsxfTwvY2JjOklEPlxcbiAgICAgICAgIDxjYmM6UXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7dW9tfVxcXCI+JHtxdWFudGl0eX08L2NiYzpRdWFudGl0eT5cXG4gICAgICAgICA8Y2FjOkl0ZW0+XFxuICAgICAgICAgICAgPGNiYzpEZXNjcmlwdGlvbj48L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8Y2JjOk5hbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoY2F0ZWdvcnkpfTwvY2JjOk5hbWU+XFxuICAgICAgICAgICAgPGNhYzpCdXllcnNJdGVtSWRlbnRpZmljYXRpb24+XFxuICAgICAgICAgICAgICAgPGNiYzpJRD4ke2J1eWVySWR9PC9jYmM6SUQ+XFxuICAgICAgICAgICAgPC9jYWM6QnV5ZXJzSXRlbUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgIDwvY2FjOkl0ZW0+XFxuICAgICAgPC9jYWM6TGluZUl0ZW0+XFxuICAgPC9jYWM6UmVxdWVzdEZvclF1b3RhdGlvbkxpbmU+XFxuICAgIFxcXCJcXFwiXFxcIlxcbn1cXG5cXG4vLyBHZW5lcmF0ZSB0aGUgdHJhbnNhY3Rpb24gSUQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIFVCTFxcbmRlZiB0cmFuc2FjdGlvbklkID0gVVVJRC5yYW5kb21VVUlEKClcXG5cXG5kZWYgcmVxdWVzdEZvclF1b3RhdGlvblVCTCA9IFxcXCJcXFwiXFxcIjxSZXF1ZXN0Rm9yUXVvdGF0aW9uIHhtbG5zPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpSZXF1ZXN0Rm9yUXVvdGF0aW9uLTJcXFwiIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIiB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gICA8Y2JjOlVCTFZlcnNpb25JRD4yLjA8L2NiYzpVQkxWZXJzaW9uSUQ+XFxuICAgPGNiYzpJRD4ke3RyYW5zYWN0aW9uSWR9PC9jYmM6SUQ+XFxuICAgPGNiYzpJc3N1ZURhdGU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVEYXRlKX08L2NiYzpJc3N1ZURhdGU+XFxuICAgPGNiYzpJc3N1ZVRpbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICAgPGNiYzpOb3RlPkF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFJGUTwvY2JjOk5vdGU+XFxuICAgPGNhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICAgICA8Y2FjOlBhcnR5PlxcbiAgICAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6TmFtZT5CdXllciBDb3JwLjwvY2JjOk5hbWU+XFxuICAgICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QXZvbiBXYXk8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOYW1lPlRoZXJlYWJvdXRzPC9jYmM6QnVpbGRpbmdOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+NTZBPC9jYmM6QnVpbGRpbmdOdW1iZXI+XFxuICAgICAgICAgICAgPGNiYzpDaXR5TmFtZT5CcmlkZ3RvdzwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6UG9zdGFsWm9uZT5aWjk5IDFaWjwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PkF2b248L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICAgIDxjYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgICAgPGNiYzpMaW5lPjNyZCBGbG9vciwgUm9vbSA1PC9jYmM6TGluZT5cXG4gICAgICAgICAgICA8L2NhYzpBZGRyZXNzTGluZT5cXG4gICAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+R0I8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5PlxcbiAgIDwvY2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcbiAgIDxjYWM6U2VsbGVyU3VwcGxpZXJQYXJ0eT5cXG4gICAgICA8Y2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+Q08wMDE8L2NiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPlxcbiAgICAgIDxjYWM6UGFydHk+XFxuICAgICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICAgICAgPGNiYzpOYW1lPlNlbGxlciBJbmMuPC9jYmM6TmFtZT5cXG4gICAgICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgICAgIDxjYmM6U3RyZWV0TmFtZT5CdXN5IFN0cmVldDwvY2JjOlN0cmVldE5hbWU+XFxuICAgICAgICAgICAgPGNiYzpCdWlsZGluZ05hbWU+VGhlcmVhYm91dHM8L2NiYzpCdWlsZGluZ05hbWU+XFxuICAgICAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj41NkE8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgICAgICA8Y2JjOkNpdHlOYW1lPkZhcnRoaW5nPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICAgICAgPGNiYzpQb3N0YWxab25lPkFBOTkgMUJCPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+SGVyZW1vdXRoc2hpcmU8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICAgIDxjYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgICAgPGNiYzpMaW5lPlRoZSBSb3VuZGFib3V0PC9jYmM6TGluZT5cXG4gICAgICAgICAgICA8L2NhYzpBZGRyZXNzTGluZT5cXG4gICAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+R0I8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5PlxcbiAgIDwvY2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgJHtyZnFMaW5lc31cXG48L1JlcXVlc3RGb3JRdW90YXRpb24+XFxuXFxcIlxcXCJcXFwiXFxuXFxuLy8gV3JpdGUgdGhlIHRyYW5zYWN0aW9uIGluIHRoZSBibG9ja2NoYWluXFxuaGVscGVyLnN1Ym1pdFJGUSh0cmFuc2FjdGlvbklkLCBub3csIHJlcXVlc3RGb3JRdW90YXRpb25VQkwpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODMxMH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIHRoZSBmb3JtIHN1cHBvcnRpbmcgdGhlIGNyZWF0aW9uIG9mIGEgcXVvdGVcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ2NjIsXCJyZXZpc2lvbklkXCI6XCJmNTI4NjA2ODQ1MjEyZDJjM2U5OGJjNDc1YjZiMTY4MlwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcbmRlZiB4bWwgXFx0XFx0PSBwNi5waXBlbGluZS5nZXRYbWwgJ3htbCdcXG5sb2cuZGVidWcgJ1hNTCA9PT09PT0+ICcrIHhtbFxcblxcbnA2LnBpcGVsaW5lLnZhcmlhYmxlcygpLmVhY2goKSB7IGxvZy5kZWJ1ZyBcXFwiUElQRUxJTkUgVkFSICR7aXR9XFxcIiB9XFxuXFxuZGVmIG1wayBcXHRcXHQ9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoeG1sLml0ZW1EYXRhVHlwZS50ZXh0KCksIHhtbC5pdGVtSWRzLnRleHQoKS5zcGxpdCgnXFxcXFxcXFwuJykpXFxuZGVmIG1lc3NhZ2UgXFx0PSBwNi50cmFuc2FjdGlvbi5nZXQobXBrKVxcblxcbmxvZy5kZWJ1ZyAnTUVTU0FHRSA9PT09PT0+ICcrIG1lc3NhZ2VcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcihmYWxzZSwgdHJ1ZSlcXG5kZWYgdHJhbnNhY3Rpb24gPSBzbHVycGVyLnBhcnNlVGV4dChtZXNzYWdlKVxcblxcbmRlZiBteVVSSSA9IHRyYW5zYWN0aW9uLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKVxcbiAgICAgICAgXFxuZGVmICBzcmNGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKG15VVJJKVxcbiAgICAgICAgXFxuU3RyaW5nIHJmcUNvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZyhzcmNGaWxlKVxcblxcbmRlZiByZnEgPSBzbHVycGVyLnBhcnNlVGV4dChyZnFDb250ZW50KVxcblxcbmRlZiByZnFMaW5lcyA9IFxcXCJcXFwiXFxucmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLmVhY2h7IHJmcUxpbmUgLT4gXFxuXFxuICAgIGRlZiBpdGVtQ2F0ZWdvcnkgPSByZnFMaW5lLkxpbmVJdGVtLkl0ZW0uTmFtZS50ZXh0KClcXG4gICAgXFxuICAgIGRlZiBpdGVtUmVjb3JkcyA9IHA2LnRhYmxlLmxvb2t1cCgncDZfZGVtby5JdGVtcycsIFsnQ2F0ZWdvcnknOml0ZW1DYXRlZ29yeV0pXFxuXFxuICAgIGRlZiBpdGVtcz0gJydcXG4gICAgZm9yKG15UmVjb3JkIGluIGl0ZW1SZWNvcmRzKSB7XFxuICAgICAgICBkZWYgZGVzY3JpcHRpb24gPSBteVJlY29yZC5EZXNjcmlwdGlvblxcbiAgICAgICAgZGVmIGlkID0gbXlSZWNvcmQuSWRcXG4gICAgICAgIGRlZiB1b20gPSBteVJlY29yZC5VT01cXG4gICAgICAgIGRlZiB1bml0UHJpY2UgPSBteVJlY29yZC5Vbml0UHJpY2VcXG4gICAgICAgIGRlZiBjdXJyZW5jeSA9IG15UmVjb3JkLkN1cnJlbmN5XFxuICAgIFxcbiAgICAgICAgaWYgKCEnJy5lcXVhbHMoaXRlbXMpKSB7XFxuICAgICAgICAgICAgaXRlbXMgKz0gJyxcXFxcclxcXFxuJ1xcbiAgICAgICAgfSAgICAgICAgXFxuICAgICAgICBpdGVtcyArPSAneyBcXFwiaWRcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGRlc2NyaXB0aW9uKSsnLCBcXFwicHJpY2VcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKHVuaXRQcmljZSkrJywgXFxcInVuaXRcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGN1cnJlbmN5KSsnLCBcXFwiY3VycmVuY3lcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGN1cnJlbmN5KSsnLCBcXFwidW9tXFxcIjogJytKc29uT3V0cHV0LnRvSnNvbih1b20pKycgfSdcXG4gICAgfSAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgXFxuICAgIGxvZy5kZWJ1ZyAnSVRFTVMgPT4gJytpdGVtcyAgXFxuXFxuXFxuICAgIGRlZiBvbmVMaW5lID0gXFxcIlxcXCJcXFwiIHtcXG4gICAgICAgICAgICAgXFxcImlkXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnFMaW5lLklELnRleHQoKSl9LFxcbiAgICAgICAgICAgICBcXFwibm90ZVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX0sXFxuICAgICAgICAgICAgIFxcXCJxdWFudGl0eVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5MaW5lSXRlbS5RdWFudGl0eS50ZXh0KCkpfSxcXG4gICAgICAgICAgICAgXFxcIml0ZW1zXFxcIjogW1xcbiAgICAgICAgICAgICAgICAgJHtpdGVtc31cXG4gICAgICAgICAgICBdXFxuICAgICAgICB9XFxcIlxcXCJcXFwiXFxuICAgICAgICBcXG5cXG4gICAgaWYgKCFcXFwiXFxcIi5lcXVhbHMocmZxTGluZXMpKSB7XFxuICAgICAgICByZnFMaW5lcyArPSBcXFwiLFxcXFxyXFxcXG5cXFwiXFxuICAgIH1cXG4gICAgIHJmcUxpbmVzICs9IG9uZUxpbmVcXG59XFxuXFxubG9nLmRlYnVnICdSRlEgTElORVMgPT4gJytyZnFMaW5lc1xcblxcbmRlZiBtb2RlbCA9IFxcXCJcXFwiXFxcIntcXG4gICAgXFxcInJmcVxcXCI6IHsgXFxuICAgICAgICBcXFwiaWRcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5JRC50ZXh0KCkpfSxcXG4gICAgICAgIFxcXCJpc3N1ZURhdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5Jc3N1ZURhdGUudGV4dCgpKX0sXFxuICAgICAgICBcXFwiaXNzdWVUaW1lXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnEuSXNzdWVUaW1lLnRleHQoKSl9LFxcbiAgICAgICAgXFxcIm5vdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5Ob3RlLnRleHQoKSl9XFxuICAgIH0sXFxuICAgIFxcXCJsaW5lc1xcXCI6IFtcXG4gICAgICAgICR7cmZxTGluZXN9XFxuICAgIF1cXG59XFxcIlxcXCJcXFwiXFxuXFxubG9nLmRlYnVnICdNT0RFTCA9PiAnK21vZGVsXFxuXFxuZGVmIGZvcm0gPSBwNi5yZXNvdXJjZS5nZXQoICdXRl9SRlFfRm9ybScgKVxcbmFzc2VydCBmb3JtICE9IG51bGwgOiBcXFwiVW5hYmxlIHRvIGZpbmQgdGhlIGNvbXBpbGVkIHJlc291cmNlIFdGX1JGUV9Gb3JtXFxcIlxcblxcbnA2LnBpcGVsaW5lLnB1dCAnbW9kZWwnLCBtb2RlbFxcbnA2LnBpcGVsaW5lLnB1dCAnZm9ybScsIGZvcm1cXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W3tcIm5hbWVcIjpcIldGX1JGUV9Gb3JtXCIsXCJ0eXBlXCI6XCJUWVBFU0NSSVBUXCIsXCJjb250ZW50XCI6XCIvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXFxuLyoqKioqKi8gXFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxcbi8qKioqKiovIFxcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxcbi8qKioqKiovIFxcdFxcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XFxuLyoqKioqKi8gXFx0XFx0XFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdFxcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXFxuLyoqKioqKi8gXFx0XFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xcbi8qKioqKiovIFxcdFxcdFxcdGk6IG1vZHVsZUlkLFxcbi8qKioqKiovIFxcdFxcdFxcdGw6IGZhbHNlLFxcbi8qKioqKiovIFxcdFxcdFxcdGV4cG9ydHM6IHt9XFxuLyoqKioqKi8gXFx0XFx0fTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdFxcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0XFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxcbi8qKioqKiovIFxcdFxcdG1vZHVsZS5sID0gdHJ1ZTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xcbi8qKioqKiovIFxcdH1cXG4vKioqKioqL1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XFxuLyoqKioqKi8gXFx0XFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xcbi8qKioqKiovIFxcdFxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XFxuLyoqKioqKi8gXFx0XFx0XFx0XFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcXG4vKioqKioqLyBcXHRcXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcbi8qKioqKiovIFxcdFxcdFxcdFxcdGdldDogZ2V0dGVyXFxuLyoqKioqKi8gXFx0XFx0XFx0fSk7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdH07XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xcbi8qKioqKiovIFxcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xcbi8qKioqKiovIFxcdFxcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xcbi8qKioqKiovIFxcdFxcdFxcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XFxuLyoqKioqKi8gXFx0XFx0XFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcXG4vKioqKioqLyBcXHRcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIGdldHRlcjtcXG4vKioqKioqLyBcXHR9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcXFwiXFxcIjtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xcbi8qKioqKiovIFxcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDkwKTtcXG4vKioqKioqLyB9KVxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKioqKi8gKFtcXG4vKiAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbm1vZHVsZS5leHBvcnRzID0gUmVhY3Q7XFxuXFxuLyoqKi8gfSksXFxuLyogMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XFxuXFxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXFxuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXFxuXFxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XFxudmFyIGNhY2hlZENsZWFyVGltZW91dDtcXG5cXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcXG59XFxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XFxufVxcbihmdW5jdGlvbiAoKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcXG4gICAgfVxcbn0gKCkpXFxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcXG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcXG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfVxcbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcXG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfSBjYXRjaChlKXtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xcbiAgICAgICAgfSBjYXRjaChlKXtcXG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcblxcbn1cXG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XFxuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXFxuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XFxuICAgIH1cXG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcXG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xcbiAgICB9IGNhdGNoIChlKXtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xcbiAgICAgICAgfSBjYXRjaCAoZSl7XFxuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXFxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuXFxuXFxufVxcbnZhciBxdWV1ZSA9IFtdO1xcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xcbnZhciBjdXJyZW50UXVldWU7XFxudmFyIHF1ZXVlSW5kZXggPSAtMTtcXG5cXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XFxuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIGRyYWluaW5nID0gZmFsc2U7XFxuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XFxuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xcbiAgICB9XFxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcXG4gICAgICAgIGRyYWluUXVldWUoKTtcXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xcbiAgICBpZiAoZHJhaW5pbmcpIHtcXG4gICAgICAgIHJldHVybjtcXG4gICAgfVxcbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcXG4gICAgZHJhaW5pbmcgPSB0cnVlO1xcblxcbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xcbiAgICB3aGlsZShsZW4pIHtcXG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xcbiAgICAgICAgcXVldWUgPSBbXTtcXG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcXG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XFxuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XFxuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XFxuICAgIH1cXG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcXG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcXG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xcbn1cXG5cXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XFxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcXG4gICAgfVxcbn07XFxuXFxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xcbiAgICB0aGlzLmZ1biA9IGZ1bjtcXG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xcbn1cXG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XFxuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xcbn07XFxucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcXG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xcbnByb2Nlc3MuZW52ID0ge307XFxucHJvY2Vzcy5hcmd2ID0gW107XFxucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXFxucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xcblxcbmZ1bmN0aW9uIG5vb3AoKSB7fVxcblxcbnByb2Nlc3Mub24gPSBub29wO1xcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xcbnByb2Nlc3Mub25jZSA9IG5vb3A7XFxucHJvY2Vzcy5vZmYgPSBub29wO1xcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcXG5wcm9jZXNzLmVtaXQgPSBub29wO1xcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcXG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xcblxcbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cXG5cXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XFxufTtcXG5cXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XFxufTtcXG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5KCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5KF8ubm9vcCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcXG5cXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cXG52YXIgcm9vdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHJvb3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzT2JqZWN0KHt9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdChfLm5vb3ApO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3QobnVsbCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc09iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcXFwib2JqZWN0XFxcIi5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc09iamVjdExpa2Uoe30pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc09iamVjdExpa2UobnVsbCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNPYmplY3RMaWtlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNOYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTAxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDQpO1xcblxcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXFxuICovXFxuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XFxuICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXkpO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc05hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldE5hdGl2ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRSYXdUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX29iamVjdFRvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1KTtcXG5cXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBzeW1Ub1N0cmluZ1RhZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10udG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XFxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XFxuICB9XFxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXFxuICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UmF3VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSlcXG4gICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19vYmplY3RUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlR2V0VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zcGxpY2VfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRJbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldEluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZGVlcEVxdWFsX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fZGVsZXRlSW5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19rZXlzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHN0cnVjdHVyZSA9IHtcXG4gIGVtcHR5OiB7fSxcXG4gIGVtcHR5TGlzdDogW10sXFxuICBnZXRJbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRJbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHNldEluOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldEluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgZGVlcEVxdWFsOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2RlZXBFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIGRlbGV0ZUluOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2RlbGV0ZUluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgZnJvbUpTOiBmdW5jdGlvbiBmcm9tSlModmFsdWUpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfSxcXG4gIGtleXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fa2V5c19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHNpemU6IGZ1bmN0aW9uIHNpemUoYXJyYXkpIHtcXG4gICAgcmV0dXJuIGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDtcXG4gIH0sXFxuICBzcGxpY2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3BsaWNlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgdG9KUzogZnVuY3Rpb24gdG9KUyh2YWx1ZSkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHJ1Y3R1cmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFBlcmZvcm1zIGFcXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XFxuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcXG4gKlxcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uZXEoJ2EnLCAnYScpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uZXEoTmFOLCBOYU4pO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcXG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG5cXG5cXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXFxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cXG4gKi9cXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XFxuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvS2V5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9uZW50c19Qcm92aWRlcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jb25uZWN0X2Nvbm5lY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAwKTtcXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBQcm92aWRlciAqL1xcbi8qIHVudXNlZCBoYXJtb255IHJlZXhwb3J0IGNyZWF0ZVByb3ZpZGVyICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29ubmVjdEFkdmFuY2VkICovXFxuLyogaGFybW9ueSByZWV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Nvbm5lY3RfY29ubmVjdF9fW1xcXCJhXFxcIl07IH0pO1xcblxcblxcblxcblxcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbi8qKlxcbiAqIFVzZSBpbnZhcmlhbnQoKSB0byBhc3NlcnQgc3RhdGUgd2hpY2ggeW91ciBwcm9ncmFtIGFzc3VtZXMgdG8gYmUgdHJ1ZS5cXG4gKlxcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXFxuICogdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGJyb2tlIGFuZCB3aGF0IHlvdSB3ZXJlXFxuICogZXhwZWN0aW5nLlxcbiAqXFxuICogVGhlIGludmFyaWFudCBtZXNzYWdlIHdpbGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBpbnZhcmlhbnRcXG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXFxuICovXFxuXFxudmFyIGludmFyaWFudCA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGlmICghY29uZGl0aW9uKSB7XFxuICAgIHZhciBlcnJvcjtcXG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXFxuICAgICAgICAnTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArXFxuICAgICAgICAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nXFxuICAgICAgKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcXG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxcbiAgICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsgfSlcXG4gICAgICApO1xcbiAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XFxuICAgIH1cXG5cXG4gICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGludmFyaWFudCdzIG93biBmcmFtZVxcbiAgICB0aHJvdyBlcnJvcjtcXG4gIH1cXG59O1xcblxcbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG52YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyohXFxuICBDb3B5cmlnaHQgKGMpIDIwMTYgSmVkIFdhdHNvbi5cXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXFxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXFxuKi9cXG4vKiBnbG9iYWwgZGVmaW5lICovXFxuXFxuKGZ1bmN0aW9uICgpIHtcXG5cXHQndXNlIHN0cmljdCc7XFxuXFxuXFx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xcblxcblxcdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xcblxcdFxcdHZhciBjbGFzc2VzID0gW107XFxuXFxuXFx0XFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcXG5cXHRcXHRcXHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xcblxcdFxcdFxcdGlmICghYXJnKSBjb250aW51ZTtcXG5cXG5cXHRcXHRcXHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XFxuXFxuXFx0XFx0XFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XFxuXFx0XFx0XFx0XFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XFxuXFx0XFx0XFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcXG5cXHRcXHRcXHRcXHRjbGFzc2VzLnB1c2goY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpKTtcXG5cXHRcXHRcXHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XFxuXFx0XFx0XFx0XFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xcblxcdFxcdFxcdFxcdFxcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcXG5cXHRcXHRcXHRcXHRcXHRcXHRjbGFzc2VzLnB1c2goa2V5KTtcXG5cXHRcXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xcblxcdH1cXG5cXG5cXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcXG5cXHRcXHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XFxuXFx0fSBlbHNlIGlmICh0cnVlKSB7XFxuXFx0XFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxcblxcdFxcdCEoX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyA9IFtdLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyA9IChmdW5jdGlvbiAoKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGNsYXNzTmFtZXM7XFxuXFx0XFx0fSkuYXBwbHkoZXhwb3J0cywgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyksXFxuXFx0XFx0XFx0XFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpO1xcblxcdH0gZWxzZSB7XFxuXFx0XFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xcblxcdH1cXG59KCkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheU1hcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29weUFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdHJpbmdUb1BhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgVXRpbFxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgcHJvcGVydHkgcGF0aCBhcnJheS5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy50b1BhdGgoJ2EuYi5jJyk7XFxuICogLy8gPT4gWydhJywgJ2InLCAnYyddXFxuICpcXG4gKiBfLnRvUGF0aCgnYVswXS5iLmMnKTtcXG4gKiAvLyA9PiBbJ2EnLCAnMCcsICdiJywgJ2MnXVxcbiAqL1xcbmZ1bmN0aW9uIHRvUGF0aCh2YWx1ZSkge1xcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gIH1cXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gW3ZhbHVlXSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvcHlBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RyaW5nVG9QYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XFxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XFxuICAgIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNTeW1ib2wpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBTeW1ib2wgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uU3ltYm9sO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFN5bWJvbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0LCAnY3JlYXRlJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobmF0aXZlQ3JlYXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGlzdENhY2hlQ2xlYXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19saXN0Q2FjaGVEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saXN0Q2FjaGVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19saXN0Q2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19saXN0Q2FjaGVTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEzKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAY29uc3RydWN0b3JcXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxcbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpc3RDYWNoZUNsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19saXN0Q2FjaGVEZWxldGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2xpc3RDYWNoZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbGlzdENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19saXN0Q2FjaGVTZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoTGlzdENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXFxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cXG4gKi9cXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcXG4gIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcXG4gICAgICByZXR1cm4gbGVuZ3RoO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gLTE7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFzc29jSW5kZXhPZik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzS2V5YWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTUpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXFxuICovXFxuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNLZXlhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShrZXkpXFxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXFxuICAgIDogZGF0YS5tYXA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldE1hcERhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nik7XFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcXG4gKiB2YWx1ZSBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIHtcXG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxcbiAgICB9KTtcXG4gIH0gZWxzZSB7XFxuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XFxuICB9XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VBc3NpZ25WYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcmlnaW5hbE1vZHVsZSkge1xcblxcdGlmKCFvcmlnaW5hbE1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcXG5cXHRcXHR2YXIgbW9kdWxlID0gT2JqZWN0LmNyZWF0ZShvcmlnaW5hbE1vZHVsZSk7XFxuXFx0XFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XFxuXFx0XFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImxvYWRlZFxcXCIsIHtcXG5cXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcblxcdFxcdFxcdGdldDogZnVuY3Rpb24oKSB7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIG1vZHVsZS5sO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9KTtcXG5cXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcXFwiaWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUuaTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImV4cG9ydHNcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHR9KTtcXG5cXHRcXHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcXG5cXHR9XFxuXFx0cmV0dXJuIG1vZHVsZTtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0xlbmd0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0xlbmd0aF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUubGVuZ3RoKSAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0FycmF5TGlrZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc09iamVjdExpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjguMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogZnVuY3Rpb24gRm9vKCkge1xcbiAqICAgdGhpcy5hID0gMTtcXG4gKiB9XFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICE9IG9iamVjdFRhZykge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgcHJvdG8gPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XFxuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1BsYWluT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gZm9ybWF0TmFtZTtcXG5mdW5jdGlvbiBmb3JtYXROYW1lKGNvbnRleHQsIG5hbWUpIHtcXG4gIHZhciBzZWN0aW9uUHJlZml4ID0gY29udGV4dC5fcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXg7XFxuXFxuICByZXR1cm4gIXNlY3Rpb25QcmVmaXggPyBuYW1lIDogc2VjdGlvblByZWZpeCArIFxcXCIuXFxcIiArIG5hbWU7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDI2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFjdGlvblR5cGVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhY3Rpb25UeXBlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlJbnNlcnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5SW5zZXJ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheU1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5TW92ZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlQb3BcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UG9wOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVB1c2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UHVzaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlSZW1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UmVtb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZUFsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmVBbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U2hpZnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U3BsaWNlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVNwbGljZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTd2FwXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVN3YXA7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5VW5zaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlVbnNoaWZ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhdXRvZmlsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXV0b2ZpbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJsdXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJsdXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNoYW5nZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hhbmdlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJkZXN0cm95XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZXN0cm95OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkZpZWxkc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGRzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZEFycmF5XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWVsZEFycmF5OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGb3JtXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGb3JtOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGb3JtU2VjdGlvblxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRm9ybVNlY3Rpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImZvY3VzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmb2N1czsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZm9ybVZhbHVlU2VsZWN0b3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvcm1WYWx1ZVNlbGVjdG9yOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtTmFtZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1OYW1lczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybVZhbHVlc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVZhbHVlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybUluaXRpYWxWYWx1ZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1Jbml0aWFsVmFsdWVzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVN5bmNFcnJvcnM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImdldEZvcm1Bc3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybUFzeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3luY1dhcm5pbmdzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtU3luY1dhcm5pbmdzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3VibWl0RXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtU3VibWl0RXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpbml0aWFsaXplXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbml0aWFsaXplOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpc0RpcnR5XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc0RpcnR5OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpc0ludmFsaWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzSW52YWxpZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNQcmlzdGluZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNQcmlzdGluZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNWYWxpZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNWYWxpZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNTdWJtaXR0aW5nXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc1N1Ym1pdHRpbmc7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImhhc1N1Ym1pdFN1Y2NlZWRlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaGFzU3VibWl0U3VjY2VlZGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJoYXNTdWJtaXRGYWlsZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGhhc1N1Ym1pdEZhaWxlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwicHJvcFR5cGVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwcm9wVHlwZXM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInJlZHVjZXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlZHVjZXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInJlZHV4Rm9ybVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVkdXhGb3JtOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZXNldFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzZXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdEZhaWxlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0RmFpbGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzZXRTdWJtaXRTdWNjZWVkZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNldFN1Ym1pdFN1Y2NlZWRlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRBc3luY1ZhbGlkYXRpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0QXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdGFydFN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhcnRTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0b3BBc3luY1ZhbGlkYXRpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0b3BBc3luY1ZhbGlkYXRpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0b3BTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0b3BTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTdWJtaXNzaW9uRXJyb3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1Ym1pc3Npb25FcnJvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidG91Y2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnJlZ2lzdGVyRmllbGRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVucmVnaXN0ZXJGaWVsZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidW50b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW50b3VjaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidmFsdWVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB2YWx1ZXM7IH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUFsbF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcblxcbnZhciBfY3JlYXRlQWxsID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlQWxsX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxudmFyIGFjdGlvblR5cGVzID0gX2NyZWF0ZUFsbC5hY3Rpb25UeXBlcyxcXG4gICAgYXJyYXlJbnNlcnQgPSBfY3JlYXRlQWxsLmFycmF5SW5zZXJ0LFxcbiAgICBhcnJheU1vdmUgPSBfY3JlYXRlQWxsLmFycmF5TW92ZSxcXG4gICAgYXJyYXlQb3AgPSBfY3JlYXRlQWxsLmFycmF5UG9wLFxcbiAgICBhcnJheVB1c2ggPSBfY3JlYXRlQWxsLmFycmF5UHVzaCxcXG4gICAgYXJyYXlSZW1vdmUgPSBfY3JlYXRlQWxsLmFycmF5UmVtb3ZlLFxcbiAgICBhcnJheVJlbW92ZUFsbCA9IF9jcmVhdGVBbGwuYXJyYXlSZW1vdmVBbGwsXFxuICAgIGFycmF5U2hpZnQgPSBfY3JlYXRlQWxsLmFycmF5U2hpZnQsXFxuICAgIGFycmF5U3BsaWNlID0gX2NyZWF0ZUFsbC5hcnJheVNwbGljZSxcXG4gICAgYXJyYXlTd2FwID0gX2NyZWF0ZUFsbC5hcnJheVN3YXAsXFxuICAgIGFycmF5VW5zaGlmdCA9IF9jcmVhdGVBbGwuYXJyYXlVbnNoaWZ0LFxcbiAgICBhdXRvZmlsbCA9IF9jcmVhdGVBbGwuYXV0b2ZpbGwsXFxuICAgIGJsdXIgPSBfY3JlYXRlQWxsLmJsdXIsXFxuICAgIGNoYW5nZSA9IF9jcmVhdGVBbGwuY2hhbmdlLFxcbiAgICBkZXN0cm95ID0gX2NyZWF0ZUFsbC5kZXN0cm95LFxcbiAgICBGaWVsZCA9IF9jcmVhdGVBbGwuRmllbGQsXFxuICAgIEZpZWxkcyA9IF9jcmVhdGVBbGwuRmllbGRzLFxcbiAgICBGaWVsZEFycmF5ID0gX2NyZWF0ZUFsbC5GaWVsZEFycmF5LFxcbiAgICBGb3JtID0gX2NyZWF0ZUFsbC5Gb3JtLFxcbiAgICBGb3JtU2VjdGlvbiA9IF9jcmVhdGVBbGwuRm9ybVNlY3Rpb24sXFxuICAgIGZvY3VzID0gX2NyZWF0ZUFsbC5mb2N1cyxcXG4gICAgZm9ybVZhbHVlU2VsZWN0b3IgPSBfY3JlYXRlQWxsLmZvcm1WYWx1ZVNlbGVjdG9yLFxcbiAgICBnZXRGb3JtTmFtZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1OYW1lcyxcXG4gICAgZ2V0Rm9ybVZhbHVlcyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVZhbHVlcyxcXG4gICAgZ2V0Rm9ybUluaXRpYWxWYWx1ZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1Jbml0aWFsVmFsdWVzLFxcbiAgICBnZXRGb3JtU3luY0Vycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVN5bmNFcnJvcnMsXFxuICAgIGdldEZvcm1Bc3luY0Vycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybUFzeW5jRXJyb3JzLFxcbiAgICBnZXRGb3JtU3luY1dhcm5pbmdzID0gX2NyZWF0ZUFsbC5nZXRGb3JtU3luY1dhcm5pbmdzLFxcbiAgICBnZXRGb3JtU3VibWl0RXJyb3JzID0gX2NyZWF0ZUFsbC5nZXRGb3JtU3VibWl0RXJyb3JzLFxcbiAgICBpbml0aWFsaXplID0gX2NyZWF0ZUFsbC5pbml0aWFsaXplLFxcbiAgICBpc0RpcnR5ID0gX2NyZWF0ZUFsbC5pc0RpcnR5LFxcbiAgICBpc0ludmFsaWQgPSBfY3JlYXRlQWxsLmlzSW52YWxpZCxcXG4gICAgaXNQcmlzdGluZSA9IF9jcmVhdGVBbGwuaXNQcmlzdGluZSxcXG4gICAgaXNWYWxpZCA9IF9jcmVhdGVBbGwuaXNWYWxpZCxcXG4gICAgaXNTdWJtaXR0aW5nID0gX2NyZWF0ZUFsbC5pc1N1Ym1pdHRpbmcsXFxuICAgIGhhc1N1Ym1pdFN1Y2NlZWRlZCA9IF9jcmVhdGVBbGwuaGFzU3VibWl0U3VjY2VlZGVkLFxcbiAgICBoYXNTdWJtaXRGYWlsZWQgPSBfY3JlYXRlQWxsLmhhc1N1Ym1pdEZhaWxlZCxcXG4gICAgcHJvcFR5cGVzID0gX2NyZWF0ZUFsbC5wcm9wVHlwZXMsXFxuICAgIHJlZHVjZXIgPSBfY3JlYXRlQWxsLnJlZHVjZXIsXFxuICAgIHJlZHV4Rm9ybSA9IF9jcmVhdGVBbGwucmVkdXhGb3JtLFxcbiAgICByZWdpc3RlckZpZWxkID0gX2NyZWF0ZUFsbC5yZWdpc3RlckZpZWxkLFxcbiAgICByZXNldCA9IF9jcmVhdGVBbGwucmVzZXQsXFxuICAgIHNldFN1Ym1pdEZhaWxlZCA9IF9jcmVhdGVBbGwuc2V0U3VibWl0RmFpbGVkLFxcbiAgICBzZXRTdWJtaXRTdWNjZWVkZWQgPSBfY3JlYXRlQWxsLnNldFN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBfY3JlYXRlQWxsLnN0YXJ0QXN5bmNWYWxpZGF0aW9uLFxcbiAgICBzdGFydFN1Ym1pdCA9IF9jcmVhdGVBbGwuc3RhcnRTdWJtaXQsXFxuICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfY3JlYXRlQWxsLnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgIHN0b3BTdWJtaXQgPSBfY3JlYXRlQWxsLnN0b3BTdWJtaXQsXFxuICAgIHN1Ym1pdCA9IF9jcmVhdGVBbGwuc3VibWl0LFxcbiAgICBTdWJtaXNzaW9uRXJyb3IgPSBfY3JlYXRlQWxsLlN1Ym1pc3Npb25FcnJvcixcXG4gICAgdG91Y2ggPSBfY3JlYXRlQWxsLnRvdWNoLFxcbiAgICB1bnJlZ2lzdGVyRmllbGQgPSBfY3JlYXRlQWxsLnVucmVnaXN0ZXJGaWVsZCxcXG4gICAgdW50b3VjaCA9IF9jcmVhdGVBbGwudW50b3VjaCxcXG4gICAgdmFsdWVzID0gX2NyZWF0ZUFsbC52YWx1ZXM7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfSU5TRVJUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9JTlNFUlQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX01PVkVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX01PVkU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX1BPUFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUE9QOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9QVVNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9QVVNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9SRU1PVkVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1JFTU9WRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfUkVNT1ZFX0FMTFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUkVNT1ZFX0FMTDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU0hJRlRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NISUZUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9TUExJQ0VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NQTElDRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfVU5TSElGVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfVU5TSElGVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU1dBUFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfU1dBUDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVVUT0ZJTExcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFVVE9GSUxMOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJCTFVSXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCTFVSOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJDSEFOR0VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENIQU5HRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQ0xFQVJfU1VCTUlUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9TVUJNSVQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENMRUFSX1NVQk1JVF9FUlJPUlM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX0FTWU5DX0VSUk9SXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9BU1lOQ19FUlJPUjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiREVTVFJPWVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gREVTVFJPWTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiRk9DVVNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZPQ1VTOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJJTklUSUFMSVpFXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJTklUSUFMSVpFOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJSRUdJU1RFUl9GSUVMRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUkVHSVNURVJfRklFTEQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlJFU0VUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSRVNFVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU0VUX1NVQk1JVF9GQUlMRURcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNFVF9TVUJNSVRfRkFJTEVEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTRVRfU1VCTUlUX1NVQ0NFRURFRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU0VUX1NVQk1JVF9TVUNDRUVERUQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUQVJUX0FTWU5DX1ZBTElEQVRJT05cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUQVJUX0FTWU5DX1ZBTElEQVRJT047IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUQVJUX1NVQk1JVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU1RBUlRfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVE9QX0FTWU5DX1ZBTElEQVRJT05cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUT1BfQVNZTkNfVkFMSURBVElPTjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU1RPUF9TVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUT1BfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNVQk1JVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVE9VQ0hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRPVUNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVTlJFR0lTVEVSX0ZJRUxEXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVTlJFR0lTVEVSX0ZJRUxEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVTlRPVUNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVTlRPVUNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVUERBVEVfU1lOQ19FUlJPUlNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVQREFURV9TWU5DX0VSUk9SUzsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVVBEQVRFX1NZTkNfV0FSTklOR1NcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVQREFURV9TWU5DX1dBUk5JTkdTOyB9KTtcXG52YXIgQVJSQVlfSU5TRVJUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9JTlNFUlQnO1xcbnZhciBBUlJBWV9NT1ZFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9NT1ZFJztcXG52YXIgQVJSQVlfUE9QID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9QT1AnO1xcbnZhciBBUlJBWV9QVVNIID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9QVVNIJztcXG52YXIgQVJSQVlfUkVNT1ZFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9SRU1PVkUnO1xcbnZhciBBUlJBWV9SRU1PVkVfQUxMID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9SRU1PVkVfQUxMJztcXG52YXIgQVJSQVlfU0hJRlQgPSAnQEByZWR1eC1mb3JtL0FSUkFZX1NISUZUJztcXG52YXIgQVJSQVlfU1BMSUNFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9TUExJQ0UnO1xcbnZhciBBUlJBWV9VTlNISUZUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9VTlNISUZUJztcXG52YXIgQVJSQVlfU1dBUCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfU1dBUCc7XFxudmFyIEFVVE9GSUxMID0gJ0BAcmVkdXgtZm9ybS9BVVRPRklMTCc7XFxudmFyIEJMVVIgPSAnQEByZWR1eC1mb3JtL0JMVVInO1xcbnZhciBDSEFOR0UgPSAnQEByZWR1eC1mb3JtL0NIQU5HRSc7XFxudmFyIENMRUFSX1NVQk1JVCA9ICdAQHJlZHV4LWZvcm0vQ0xFQVJfU1VCTUlUJztcXG52YXIgQ0xFQVJfU1VCTUlUX0VSUk9SUyA9ICdAQHJlZHV4LWZvcm0vQ0xFQVJfU1VCTUlUX0VSUk9SUyc7XFxudmFyIENMRUFSX0FTWU5DX0VSUk9SID0gJ0ByZWR1eC1mb3JtL0NMRUFSX0FTWU5DX0VSUk9SJztcXG52YXIgREVTVFJPWSA9ICdAQHJlZHV4LWZvcm0vREVTVFJPWSc7XFxudmFyIEZPQ1VTID0gJ0BAcmVkdXgtZm9ybS9GT0NVUyc7XFxudmFyIElOSVRJQUxJWkUgPSAnQEByZWR1eC1mb3JtL0lOSVRJQUxJWkUnO1xcbnZhciBSRUdJU1RFUl9GSUVMRCA9ICdAQHJlZHV4LWZvcm0vUkVHSVNURVJfRklFTEQnO1xcbnZhciBSRVNFVCA9ICdAQHJlZHV4LWZvcm0vUkVTRVQnO1xcbnZhciBTRVRfU1VCTUlUX0ZBSUxFRCA9ICdAQHJlZHV4LWZvcm0vU0VUX1NVQk1JVF9GQUlMRUQnO1xcbnZhciBTRVRfU1VCTUlUX1NVQ0NFRURFRCA9ICdAQHJlZHV4LWZvcm0vU0VUX1NVQk1JVF9TVUNDRUVERUQnO1xcbnZhciBTVEFSVF9BU1lOQ19WQUxJREFUSU9OID0gJ0BAcmVkdXgtZm9ybS9TVEFSVF9BU1lOQ19WQUxJREFUSU9OJztcXG52YXIgU1RBUlRfU1VCTUlUID0gJ0BAcmVkdXgtZm9ybS9TVEFSVF9TVUJNSVQnO1xcbnZhciBTVE9QX0FTWU5DX1ZBTElEQVRJT04gPSAnQEByZWR1eC1mb3JtL1NUT1BfQVNZTkNfVkFMSURBVElPTic7XFxudmFyIFNUT1BfU1VCTUlUID0gJ0BAcmVkdXgtZm9ybS9TVE9QX1NVQk1JVCc7XFxudmFyIFNVQk1JVCA9ICdAQHJlZHV4LWZvcm0vU1VCTUlUJztcXG52YXIgVE9VQ0ggPSAnQEByZWR1eC1mb3JtL1RPVUNIJztcXG52YXIgVU5SRUdJU1RFUl9GSUVMRCA9ICdAQHJlZHV4LWZvcm0vVU5SRUdJU1RFUl9GSUVMRCc7XFxudmFyIFVOVE9VQ0ggPSAnQEByZWR1eC1mb3JtL1VOVE9VQ0gnO1xcbnZhciBVUERBVEVfU1lOQ19FUlJPUlMgPSAnQEByZWR1eC1mb3JtL1VQREFURV9TWU5DX0VSUk9SUyc7XFxudmFyIFVQREFURV9TWU5DX1dBUk5JTkdTID0gJ0BAcmVkdXgtZm9ybS9VUERBVEVfU1lOQ19XQVJOSU5HUyc7XFxuXFxuLyoqKi8gfSksXFxuLyogMjggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxudmFyIGc7XFxuXFxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcXG5nID0gKGZ1bmN0aW9uKCkge1xcblxcdHJldHVybiB0aGlzO1xcbn0pKCk7XFxuXFxudHJ5IHtcXG5cXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcXG5cXHRnID0gZyB8fCBGdW5jdGlvbihcXFwicmV0dXJuIHRoaXNcXFwiKSgpIHx8ICgxLGV2YWwpKFxcXCJ0aGlzXFxcIik7XFxufSBjYXRjaChlKSB7XFxuXFx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcXG5cXHRpZih0eXBlb2Ygd2luZG93ID09PSBcXFwib2JqZWN0XFxcIilcXG5cXHRcXHRnID0gd2luZG93O1xcbn1cXG5cXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXFxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBnO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tYXBDYWNoZUNsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tYXBDYWNoZURlbGV0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcENhY2hlR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbWFwQ2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTE3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBDYWNoZVNldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTgpO1xcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXFxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tYXBDYWNoZUNsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX21hcENhY2hlRGVsZXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcENhY2hlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21hcENhY2hlU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKE1hcENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzRnVuY3Rpb24oXyk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxcbiAgdmFyIHRhZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzRnVuY3Rpb24pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDMxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIE1hcCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnTWFwJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoTWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdGFja0NsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc3RhY2tEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdGFja0dldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0YWNrSGFzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc3RhY2tTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI3KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKGVudHJpZXMpO1xcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbn1cXG5cXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxcblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RhY2tDbGVhcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdGFja0RlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdGFja0dldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdGFja0hhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zdGFja1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChTdGFjayk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcXG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XFxuXFxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1Byb3RvdHlwZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNBcmd1bWVudHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBmdW5jdGlvbih2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcmd1bWVudHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cXG4gKlxcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXFxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0xlbmd0aCgzKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0xlbmd0aCgnMycpO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcXG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0xlbmd0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihtb2R1bGUpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJGYWxzZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzcpO1xcblxcblxcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXFxudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xcblxcbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXFxudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uQnVmZmVyIDogdW5kZWZpbmVkO1xcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4zLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJGYWxzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0J1ZmZlcik7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjIpKG1vZHVsZSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNUeXBlZEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVVuYXJ5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbm9kZVV0aWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwKTtcXG5cXG5cXG5cXG5cXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xcbnZhciBub2RlSXNUeXBlZEFycmF5ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19ub2RlVXRpbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25vZGVVdGlsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmlzVHlwZWRBcnJheTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMy4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVVuYXJ5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShub2RlSXNUeXBlZEFycmF5KSA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1R5cGVkQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xcbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcXFxkKikkLztcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcXG5cXG4gIHJldHVybiAhIWxlbmd0aCAmJlxcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNJbmRleCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBtZW1iZXJPZiBfXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcXG4gKlxcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcXG4gKiAvLyA9PiB0cnVlXFxuICovXFxuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaWRlbnRpdHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheUxpa2VLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXFxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxcbiAqIGZvciBtb3JlIGRldGFpbHMuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQHNpbmNlIDAuMS4wXFxuICogQG1lbWJlck9mIF9cXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYSA9IDE7XFxuICogICB0aGlzLmIgPSAyO1xcbiAqIH1cXG4gKlxcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XFxuICpcXG4gKiBfLmtleXMobmV3IEZvbyk7XFxuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqXFxuICogXy5rZXlzKCdoaScpO1xcbiAqIC8vID0+IFsnMCcsICcxJ11cXG4gKi9cXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChrZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA0MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxEZWVwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxcbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cXG4gKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgaWYgKHZhbHVlID09PSBvdGhlcikge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlcikpKSB7XFxuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsRGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNFcXVhbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNTeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xcblxcblxcblxcbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcXFwufFxcXFxbKD86W15bXFxcXF1dKnwoW1xcXCInXSkoPzooPyFcXFxcMSlbXlxcXFxcXFxcXXxcXFxcXFxcXC4pKj9cXFxcMSlcXFxcXS8sXFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcXFx3KiQvO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcXG4gICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNLZXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xcblxcbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHdhcm5pbmc7XFxuLyoqXFxuICogUHJpbnRzIGEgd2FybmluZyBpbiB0aGUgY29uc29sZSBpZiBpdCBleGlzdHMuXFxuICpcXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBUaGUgd2FybmluZyBtZXNzYWdlLlxcbiAqIEByZXR1cm5zIHt2b2lkfVxcbiAqL1xcbmZ1bmN0aW9uIHdhcm5pbmcobWVzc2FnZSkge1xcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgfVxcbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXFxuICB0cnkge1xcbiAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IGlmIHlvdSBlbmFibGVcXG4gICAgLy8gXFxcImJyZWFrIG9uIGFsbCBleGNlcHRpb25zXFxcIiBpbiB5b3VyIGNvbnNvbGUsXFxuICAgIC8vIGl0IHdvdWxkIHBhdXNlIHRoZSBleGVjdXRpb24gYXQgdGhpcyBsaW5lLlxcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5ICovXFxuICB9IGNhdGNoIChlKSB7fVxcbiAgLyogZXNsaW50LWVuYWJsZSBuby1lbXB0eSAqL1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA0NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29tYmluZVJlZHVjZXJzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmluZEFjdGlvbkNyZWF0b3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYXBwbHlNaWRkbGV3YXJlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY29tcG9zZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbHNfd2FybmluZ19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NCk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3RvcmUgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBjb21iaW5lUmVkdWNlcnMgKi9cXG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmluZEFjdGlvbkNyZWF0b3JzX19bXFxcImFcXFwiXTsgfSk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgYXBwbHlNaWRkbGV3YXJlICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29tcG9zZSAqL1xcblxcblxcblxcblxcblxcblxcblxcbi8qXFxuKiBUaGlzIGlzIGEgZHVtbXkgZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGZ1bmN0aW9uIG5hbWUgaGFzIGJlZW4gYWx0ZXJlZCBieSBtaW5pZmljYXRpb24uXFxuKiBJZiB0aGUgZnVuY3Rpb24gaGFzIGJlZW4gbWluaWZpZWQgYW5kIE5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsIHdhcm4gdGhlIHVzZXIuXFxuKi9cXG5mdW5jdGlvbiBpc0NydXNoZWQoKSB7fVxcblxcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBpc0NydXNoZWQubmFtZSA9PT0gJ3N0cmluZycgJiYgaXNDcnVzaGVkLm5hbWUgIT09ICdpc0NydXNoZWQnKSB7XFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnWW91IGFyZSBjdXJyZW50bHkgdXNpbmcgbWluaWZpZWQgY29kZSBvdXRzaWRlIG9mIE5PREVfRU5WID09PSBcXFxcJ3Byb2R1Y3Rpb25cXFxcJy4gJyArICdUaGlzIG1lYW5zIHRoYXQgeW91IGFyZSBydW5uaW5nIGEgc2xvd2VyIGRldmVsb3BtZW50IGJ1aWxkIG9mIFJlZHV4LiAnICsgJ1lvdSBjYW4gdXNlIGxvb3NlLWVudmlmeSAoaHR0cHM6Ly9naXRodWIuY29tL3plcnRvc2gvbG9vc2UtZW52aWZ5KSBmb3IgYnJvd3NlcmlmeSAnICsgJ29yIERlZmluZVBsdWdpbiBmb3Igd2VicGFjayAoaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zMDAzMDAzMSkgJyArICd0byBlbnN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgY29kZSBmb3IgeW91ciBwcm9kdWN0aW9uIGJ1aWxkLicpO1xcbn1cXG5cXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNDYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb21pc2U7XFxuXFxuZnVuY3Rpb24gaXNQcm9taXNlKG9iaikge1xcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNFcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjYpO1xcblxcblxcbnZhciBjcmVhdGVJc1ZhbGlkID0gZnVuY3Rpb24gY3JlYXRlSXNWYWxpZChzdHJ1Y3R1cmUpIHtcXG4gIHZhciBnZXRJbiA9IHN0cnVjdHVyZS5nZXRJbixcXG4gICAgICBrZXlzID0gc3RydWN0dXJlLmtleXM7XFxuXFxuICB2YXIgaGFzRXJyb3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNFcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHZhciBpZ25vcmVTdWJtaXRFcnJvcnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgdmFyIHN5bmNFcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3luY0Vycm9yJyk7XFxuICAgICAgaWYgKHN5bmNFcnJvcikge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICBpZiAoIWlnbm9yZVN1Ym1pdEVycm9ycykge1xcbiAgICAgICAgdmFyIGVycm9yID0gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5lcnJvcicpO1xcbiAgICAgICAgaWYgKGVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnN5bmNFcnJvcnMnKTtcXG4gICAgICB2YXIgYXN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLmFzeW5jRXJyb3JzJyk7XFxuICAgICAgdmFyIHN1Ym1pdEVycm9ycyA9IGlnbm9yZVN1Ym1pdEVycm9ycyA/IHVuZGVmaW5lZCA6IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0RXJyb3JzJyk7XFxuICAgICAgaWYgKCFzeW5jRXJyb3JzICYmICFhc3luY0Vycm9ycyAmJiAhc3VibWl0RXJyb3JzKSB7XFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICB9XFxuXFxuICAgICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnJlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICBpZiAoIXJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gIWtleXMocmVnaXN0ZXJlZEZpZWxkcykuZmlsdGVyKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICByZXR1cm4gZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXS5jb3VudCcpID4gMDtcXG4gICAgICB9KS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICByZXR1cm4gaGFzRXJyb3IoZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXScpLCBzeW5jRXJyb3JzLCBhc3luY0Vycm9ycywgc3VibWl0RXJyb3JzKTtcXG4gICAgICB9KTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVJc1ZhbGlkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA0OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODIpO1xcblxcblxcblxcbnZhciBjdXN0b21pemVyID0gZnVuY3Rpb24gY3VzdG9taXplcihvYmplY3RWYWx1ZSwgb3RoZXJWYWx1ZSwgaW5kZXhPcmtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spIHtcXG4gIC8vIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNCNpc0VxdWFsV2l0aFxcbiAgaWYgKHN0YWNrKSB7XFxuICAgIC8vIFNoYWxsb3cgY29tcGFyZXNcXG4gICAgLy8gRm9yIDFzdCBsZXZlbCwgc3RhY2sgPT09IHVuZGVmaW5lZC5cXG4gICAgLy8gICAtPiBEbyBub3RoaW5nIChhbmQgaW1wbGljaXRseSByZXR1cm4gdW5kZWZpbmVkIHNvIHRoYXQgaXQgZ29lcyB0byBjb21wYXJlIDJuZCBsZXZlbClcXG4gICAgLy8gRm9yIDJuZCBsZXZlbCBhbmQgdXAsIHN0YWNrICE9PSB1bmRlZmluZWQuXFxuICAgIC8vICAgLT4gQ29tcGFyZSBieSA9PT0gb3BlcmF0b3JcXG4gICAgcmV0dXJuIG9iamVjdFZhbHVlID09PSBvdGhlclZhbHVlO1xcbiAgfVxcbn07XFxuXFxudmFyIHNoYWxsb3dDb21wYXJlID0gZnVuY3Rpb24gc2hhbGxvd0NvbXBhcmUoaW5zdGFuY2UsIG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICByZXR1cm4gIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzRXF1YWxXaXRoX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpbnN0YW5jZS5wcm9wcywgbmV4dFByb3BzLCBjdXN0b21pemVyKSB8fCAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGluc3RhbmNlLnN0YXRlLCBuZXh0U3RhdGUsIGN1c3RvbWl6ZXIpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2hhbGxvd0NvbXBhcmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDQ5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcXG4gKiBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5TWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxcbiAqL1xcbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xcblxcbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xcbiAgfVxcbiAgcmV0dXJuIGFycmF5O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb3B5QXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDUxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsKSB7LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZnJlZUdsb2JhbCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiA1MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZUNhcHBlZF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nik7XFxuXFxuXFxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xcbnZhciByZVByb3BOYW1lID0gL1teLltcXFxcXV0rfFxcXFxbKD86KC0/XFxcXGQrKD86XFxcXC5cXFxcZCspPyl8KFtcXFwiJ10pKCg/Oig/IVxcXFwyKVteXFxcXFxcXFxdfFxcXFxcXFxcLikqPylcXFxcMilcXFxcXXwoPz0oPzpcXFxcLnxcXFxcW1xcXFxdKSg/OlxcXFwufFxcXFxbXFxcXF18JCkpL2c7XFxuXFxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXFxudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcXFxcXChcXFxcXFxcXCk/L2c7XFxuXFxuLyoqXFxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICovXFxudmFyIHN0cmluZ1RvUGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX21lbW9pemVDYXBwZWRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKHN0cmluZykge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XFxuICAgIHJlc3VsdC5wdXNoKCcnKTtcXG4gIH1cXG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcXG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xcbiAgfSk7XFxuICByZXR1cm4gcmVzdWx0O1xcbn0pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0cmluZ1RvUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKlxcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXFxuICovXFxuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xcbiAgICB0cnkge1xcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcXG4gICAgfSBjYXRjaCAoZSkge31cXG4gICAgdHJ5IHtcXG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICB9XFxuICByZXR1cm4gJyc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvU291cmNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVRvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExOSk7XFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xcbiAqIC8vID0+ICcnXFxuICpcXG4gKiBfLnRvU3RyaW5nKC0wKTtcXG4gKiAvLyA9PiAnLTAnXFxuICpcXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gJzEsMiwzJ1xcbiAqL1xcbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVRvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19lcV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxcbiAqIGB1bmRlZmluZWRgIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXFxuICovXFxuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdFtrZXldLCB2YWx1ZSkpIHx8XFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgdmFsdWUpO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NpZ25NZXJnZVZhbHVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcblxcblxcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcXG4gIHRyeSB7XFxuICAgIHZhciBmdW5jID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xcbiAgICBmdW5jKHt9LCAnJywge30pO1xcbiAgICByZXR1cm4gZnVuYztcXG4gIH0gY2F0Y2ggKGUpIHt9XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChkZWZpbmVQcm9wZXJ0eSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUJhc2VGb3JfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI4KTtcXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxcbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cXG4gKi9cXG52YXIgYmFzZUZvciA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUJhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUZvcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIFVpbnQ4QXJyYXkgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uVWludDhBcnJheTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChVaW50OEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fb3ZlckFyZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MCk7XFxuXFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIGdldFByb3RvdHlwZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX292ZXJBcmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRQcm90b3R5cGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDYwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChvdmVyQXJnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAsIHVubGVzcyBga2V5YCBpcyBcXFwiX19wcm90b19fXFxcIi5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XFxuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG5cXG4gIHJldHVybiBvYmplY3Rba2V5XTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2FmZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5TGlrZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IE9iamVjdFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBGb28oKSB7XFxuICogICB0aGlzLmEgPSAxO1xcbiAqICAgdGhpcy5iID0gMjtcXG4gKiB9XFxuICpcXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xcbiAqXFxuICogXy5rZXlzSW4obmV3IEZvbyk7XFxuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXFxuICovXFxuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCB0cnVlKSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUaW1lc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XFxuICB2YXIgaXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSxcXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUaW1lc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcXG5cXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXFxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcXG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxcbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXFxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcXG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cXG4gICAgICAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzSW5kZXhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGtleSwgbGVuZ3RoKVxcbiAgICAgICAgKSkpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheUxpa2VLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlRm9yT3duX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUl0ZXJhdGVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1OSk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFzIGBvYmplY3RgIGFuZCB2YWx1ZXMgZ2VuZXJhdGVkXFxuICogYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1XFxuICogYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XFxuICogKHZhbHVlLCBrZXksIG9iamVjdCkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMi40LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIG9iamVjdC5cXG4gKiBAc2VlIF8ubWFwS2V5c1xcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgdXNlcnMgPSB7XFxuICogICAnZnJlZCc6ICAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxcbiAqICAgJ3BlYmJsZXMnOiB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSB9XFxuICogfTtcXG4gKlxcbiAqIF8ubWFwVmFsdWVzKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZTsgfSk7XFxuICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqXFxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXFxuICogXy5tYXBWYWx1ZXModXNlcnMsICdhZ2UnKTtcXG4gKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXFxuICovXFxuZnVuY3Rpb24gbWFwVmFsdWVzKG9iamVjdCwgaXRlcmF0ZWUpIHtcXG4gIHZhciByZXN1bHQgPSB7fTtcXG4gIGl0ZXJhdGVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUl0ZXJhdGVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpdGVyYXRlZSwgMyk7XFxuXFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlRm9yT3duX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQXNzaWduVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHJlc3VsdCwga2V5LCBpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmplY3QpKTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwVmFsdWVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU2V0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hcnJheVNvbWVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jYWNoZUhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjcpO1xcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XFxuXFxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cXG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcXG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcXG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICB9XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSB0cnVlLFxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU2V0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiB1bmRlZmluZWQ7XFxuXFxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcXG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xcblxcbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxcbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcXG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XFxuXFxuICAgIGlmIChjdXN0b21pemVyKSB7XFxuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcXG4gICAgfVxcbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIGlmIChjb21wYXJlZCkge1xcbiAgICAgICAgY29udGludWU7XFxuICAgICAgfVxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIGlmIChzZWVuKSB7XFxuICAgICAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hcnJheVNvbWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcXG4gICAgICAgICAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzZWVuLCBvdGhJbmRleCkgJiZcXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pKSB7XFxuICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIGlmICghKFxcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcXG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcXG4gICAgICAgICkpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgfVxcbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcXG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcXVhbEFycmF5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcXG4gKiAgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzU3RyaWN0Q29tcGFyYWJsZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxcbiAqIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdFtrZXldID09PSBzcmNWYWx1ZSAmJlxcbiAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY2FzdFBhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xcbiAgcGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwYXRoLCBvYmplY3QpO1xcblxcbiAgdmFyIGluZGV4ID0gMCxcXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcXG5cXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xcbiAgICBvYmplY3QgPSBvYmplY3RbT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdG9LZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGhbaW5kZXgrK10pXTtcXG4gIH1cXG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3N0cmluZ1RvUGF0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9TdHJpbmdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqL1xcbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdHJpbmdUb1BhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjYXN0UGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgdmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9ICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmXFxuICAgIFN5bWJvbC5mb3IgJiZcXG4gICAgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpKSB8fFxcbiAgICAweGVhYzc7XFxuXFxuICB2YXIgaXNWYWxpZEVsZW1lbnQgPSBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXFxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXFxuICAgICAgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XFxuICB9O1xcblxcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXFxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XFxuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk0KShpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XFxufSBlbHNlIHtcXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXFxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXFxuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk3KSgpO1xcbn1cXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1YnNjcmlwdGlvblNoYXBlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9yZVNoYXBlOyB9KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyk7XFxuXFxuXFxudmFyIHN1YnNjcmlwdGlvblNoYXBlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuc2hhcGUoe1xcbiAgdHJ5U3Vic2NyaWJlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWQsXFxuICB0cnlVbnN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgbm90aWZ5TmVzdGVkU3ViczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgaXNTdWJzY3JpYmVkOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWRcXG59KTtcXG5cXG52YXIgc3RvcmVTaGFwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLnNoYXBlKHtcXG4gIHN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgZGlzcGF0Y2g6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmZ1bmMuaXNSZXF1aXJlZCxcXG4gIGdldFN0YXRlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWRcXG59KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA3MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSBjb25uZWN0QWR2YW5jZWQ7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbHNfU3Vic2NyaXB0aW9uX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciBob3RSZWxvYWRpbmdWZXJzaW9uID0gMDtcXG52YXIgZHVtbXlTdGF0ZSA9IHt9O1xcbmZ1bmN0aW9uIG5vb3AoKSB7fVxcbmZ1bmN0aW9uIG1ha2VTZWxlY3RvclN0YXRlZnVsKHNvdXJjZVNlbGVjdG9yLCBzdG9yZSkge1xcbiAgLy8gd3JhcCB0aGUgc2VsZWN0b3IgaW4gYW4gb2JqZWN0IHRoYXQgdHJhY2tzIGl0cyByZXN1bHRzIGJldHdlZW4gcnVucy5cXG4gIHZhciBzZWxlY3RvciA9IHtcXG4gICAgcnVuOiBmdW5jdGlvbiBydW5Db21wb25lbnRTZWxlY3Rvcihwcm9wcykge1xcbiAgICAgIHRyeSB7XFxuICAgICAgICB2YXIgbmV4dFByb3BzID0gc291cmNlU2VsZWN0b3Ioc3RvcmUuZ2V0U3RhdGUoKSwgcHJvcHMpO1xcbiAgICAgICAgaWYgKG5leHRQcm9wcyAhPT0gc2VsZWN0b3IucHJvcHMgfHwgc2VsZWN0b3IuZXJyb3IpIHtcXG4gICAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcXG4gICAgICAgICAgc2VsZWN0b3IucHJvcHMgPSBuZXh0UHJvcHM7XFxuICAgICAgICAgIHNlbGVjdG9yLmVycm9yID0gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcXG4gICAgICAgIHNlbGVjdG9yLmVycm9yID0gZXJyb3I7XFxuICAgICAgfVxcbiAgICB9XFxuICB9O1xcblxcbiAgcmV0dXJuIHNlbGVjdG9yO1xcbn1cXG5cXG5mdW5jdGlvbiBjb25uZWN0QWR2YW5jZWQoXFxuLypcXG4gIHNlbGVjdG9yRmFjdG9yeSBpcyBhIGZ1bmMgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcmV0dXJuaW5nIHRoZSBzZWxlY3RvciBmdW5jdGlvbiB1c2VkIHRvXFxuICBjb21wdXRlIG5ldyBwcm9wcyBmcm9tIHN0YXRlLCBwcm9wcywgYW5kIGRpc3BhdGNoLiBGb3IgZXhhbXBsZTpcXG4gICAgIGV4cG9ydCBkZWZhdWx0IGNvbm5lY3RBZHZhbmNlZCgoZGlzcGF0Y2gsIG9wdGlvbnMpID0+IChzdGF0ZSwgcHJvcHMpID0+ICh7XFxuICAgICAgdGhpbmc6IHN0YXRlLnRoaW5nc1twcm9wcy50aGluZ0lkXSxcXG4gICAgICBzYXZlVGhpbmc6IGZpZWxkcyA9PiBkaXNwYXRjaChhY3Rpb25DcmVhdG9ycy5zYXZlVGhpbmcocHJvcHMudGhpbmdJZCwgZmllbGRzKSksXFxuICAgIH0pKShZb3VyQ29tcG9uZW50KVxcbiAgIEFjY2VzcyB0byBkaXNwYXRjaCBpcyBwcm92aWRlZCB0byB0aGUgZmFjdG9yeSBzbyBzZWxlY3RvckZhY3RvcmllcyBjYW4gYmluZCBhY3Rpb25DcmVhdG9yc1xcbiAgb3V0c2lkZSBvZiB0aGVpciBzZWxlY3RvciBhcyBhbiBvcHRpbWl6YXRpb24uIE9wdGlvbnMgcGFzc2VkIHRvIGNvbm5lY3RBZHZhbmNlZCBhcmUgcGFzc2VkIHRvXFxuICB0aGUgc2VsZWN0b3JGYWN0b3J5LCBhbG9uZyB3aXRoIGRpc3BsYXlOYW1lIGFuZCBXcmFwcGVkQ29tcG9uZW50LCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxcbiAgIE5vdGUgdGhhdCBzZWxlY3RvckZhY3RvcnkgaXMgcmVzcG9uc2libGUgZm9yIGFsbCBjYWNoaW5nL21lbW9pemF0aW9uIG9mIGluYm91bmQgYW5kIG91dGJvdW5kXFxuICBwcm9wcy4gRG8gbm90IHVzZSBjb25uZWN0QWR2YW5jZWQgZGlyZWN0bHkgd2l0aG91dCBtZW1vaXppbmcgcmVzdWx0cyBiZXR3ZWVuIGNhbGxzIHRvIHlvdXJcXG4gIHNlbGVjdG9yLCBvdGhlcndpc2UgdGhlIENvbm5lY3QgY29tcG9uZW50IHdpbGwgcmUtcmVuZGVyIG9uIGV2ZXJ5IHN0YXRlIG9yIHByb3BzIGNoYW5nZS5cXG4qL1xcbnNlbGVjdG9yRmFjdG9yeSkge1xcbiAgdmFyIF9jb250ZXh0VHlwZXMsIF9jaGlsZENvbnRleHRUeXBlcztcXG5cXG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcXG4gICAgICBfcmVmJGdldERpc3BsYXlOYW1lID0gX3JlZi5nZXREaXNwbGF5TmFtZSxcXG4gICAgICBnZXREaXNwbGF5TmFtZSA9IF9yZWYkZ2V0RGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgIHJldHVybiAnQ29ubmVjdEFkdmFuY2VkKCcgKyBuYW1lICsgJyknO1xcbiAgfSA6IF9yZWYkZ2V0RGlzcGxheU5hbWUsXFxuICAgICAgX3JlZiRtZXRob2ROYW1lID0gX3JlZi5tZXRob2ROYW1lLFxcbiAgICAgIG1ldGhvZE5hbWUgPSBfcmVmJG1ldGhvZE5hbWUgPT09IHVuZGVmaW5lZCA/ICdjb25uZWN0QWR2YW5jZWQnIDogX3JlZiRtZXRob2ROYW1lLFxcbiAgICAgIF9yZWYkcmVuZGVyQ291bnRQcm9wID0gX3JlZi5yZW5kZXJDb3VudFByb3AsXFxuICAgICAgcmVuZGVyQ291bnRQcm9wID0gX3JlZiRyZW5kZXJDb3VudFByb3AgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9yZWYkcmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9IF9yZWYuc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyA9IF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IF9yZWYkc2hvdWxkSGFuZGxlU3RhdCxcXG4gICAgICBfcmVmJHN0b3JlS2V5ID0gX3JlZi5zdG9yZUtleSxcXG4gICAgICBzdG9yZUtleSA9IF9yZWYkc3RvcmVLZXkgPT09IHVuZGVmaW5lZCA/ICdzdG9yZScgOiBfcmVmJHN0b3JlS2V5LFxcbiAgICAgIF9yZWYkd2l0aFJlZiA9IF9yZWYud2l0aFJlZixcXG4gICAgICB3aXRoUmVmID0gX3JlZiR3aXRoUmVmID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYkd2l0aFJlZixcXG4gICAgICBjb25uZWN0T3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2dldERpc3BsYXlOYW1lJywgJ21ldGhvZE5hbWUnLCAncmVuZGVyQ291bnRQcm9wJywgJ3Nob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcycsICdzdG9yZUtleScsICd3aXRoUmVmJ10pO1xcblxcbiAgdmFyIHN1YnNjcmlwdGlvbktleSA9IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XFxuICB2YXIgdmVyc2lvbiA9IGhvdFJlbG9hZGluZ1ZlcnNpb24rKztcXG5cXG4gIHZhciBjb250ZXh0VHlwZXMgPSAoX2NvbnRleHRUeXBlcyA9IHt9LCBfY29udGV4dFR5cGVzW3N0b3JlS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImFcXFwiIC8qIHN0b3JlU2hhcGUgKi9dLCBfY29udGV4dFR5cGVzW3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9jb250ZXh0VHlwZXMpO1xcbiAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gKF9jaGlsZENvbnRleHRUeXBlcyA9IHt9LCBfY2hpbGRDb250ZXh0VHlwZXNbc3Vic2NyaXB0aW9uS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImJcXFwiIC8qIHN1YnNjcmlwdGlvblNoYXBlICovXSwgX2NoaWxkQ29udGV4dFR5cGVzKTtcXG5cXG4gIHJldHVybiBmdW5jdGlvbiB3cmFwV2l0aENvbm5lY3QoV3JhcHBlZENvbXBvbmVudCkge1xcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHR5cGVvZiBXcmFwcGVkQ29tcG9uZW50ID09ICdmdW5jdGlvbicsICdZb3UgbXVzdCBwYXNzIGEgY29tcG9uZW50IHRvIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSAnICsgKCdjb25uZWN0LiBJbnN0ZWFkIHJlY2VpdmVkICcgKyBKU09OLnN0cmluZ2lmeShXcmFwcGVkQ29tcG9uZW50KSkpO1xcblxcbiAgICB2YXIgd3JhcHBlZENvbXBvbmVudE5hbWUgPSBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcXG5cXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gZ2V0RGlzcGxheU5hbWUod3JhcHBlZENvbXBvbmVudE5hbWUpO1xcblxcbiAgICB2YXIgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyA9IF9leHRlbmRzKHt9LCBjb25uZWN0T3B0aW9ucywge1xcbiAgICAgIGdldERpc3BsYXlOYW1lOiBnZXREaXNwbGF5TmFtZSxcXG4gICAgICBtZXRob2ROYW1lOiBtZXRob2ROYW1lLFxcbiAgICAgIHJlbmRlckNvdW50UHJvcDogcmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxcbiAgICAgIHN0b3JlS2V5OiBzdG9yZUtleSxcXG4gICAgICB3aXRoUmVmOiB3aXRoUmVmLFxcbiAgICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcXG4gICAgICB3cmFwcGVkQ29tcG9uZW50TmFtZTogd3JhcHBlZENvbXBvbmVudE5hbWUsXFxuICAgICAgV3JhcHBlZENvbXBvbmVudDogV3JhcHBlZENvbXBvbmVudFxcbiAgICB9KTtcXG5cXG4gICAgdmFyIENvbm5lY3QgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICAgIF9pbmhlcml0cyhDb25uZWN0LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgICBmdW5jdGlvbiBDb25uZWN0KHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdCk7XFxuXFxuICAgICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICAgIF90aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7fTtcXG4gICAgICAgIF90aGlzLnJlbmRlckNvdW50ID0gMDtcXG4gICAgICAgIF90aGlzLnN0b3JlID0gcHJvcHNbc3RvcmVLZXldIHx8IGNvbnRleHRbc3RvcmVLZXldO1xcbiAgICAgICAgX3RoaXMucHJvcHNNb2RlID0gQm9vbGVhbihwcm9wc1tzdG9yZUtleV0pO1xcbiAgICAgICAgX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlID0gX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlLmJpbmQoX3RoaXMpO1xcblxcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKShfdGhpcy5zdG9yZSwgJ0NvdWxkIG5vdCBmaW5kIFxcXCInICsgc3RvcmVLZXkgKyAnXFxcIiBpbiBlaXRoZXIgdGhlIGNvbnRleHQgb3IgcHJvcHMgb2YgJyArICgnXFxcIicgKyBkaXNwbGF5TmFtZSArICdcXFwiLiBFaXRoZXIgd3JhcCB0aGUgcm9vdCBjb21wb25lbnQgaW4gYSA8UHJvdmlkZXI+LCAnKSArICgnb3IgZXhwbGljaXRseSBwYXNzIFxcXCInICsgc3RvcmVLZXkgKyAnXFxcIiBhcyBhIHByb3AgdG8gXFxcIicgKyBkaXNwbGF5TmFtZSArICdcXFwiLicpKTtcXG5cXG4gICAgICAgIF90aGlzLmluaXRTZWxlY3RvcigpO1xcbiAgICAgICAgX3RoaXMuaW5pdFN1YnNjcmlwdGlvbigpO1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICAgIH1cXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5nZXRDaGlsZENvbnRleHQgPSBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgICB2YXIgX3JlZjI7XFxuXFxuICAgICAgICAvLyBJZiB0aGlzIGNvbXBvbmVudCByZWNlaXZlZCBzdG9yZSBmcm9tIHByb3BzLCBpdHMgc3Vic2NyaXB0aW9uIHNob3VsZCBiZSB0cmFuc3BhcmVudFxcbiAgICAgICAgLy8gdG8gYW55IGRlc2NlbmRhbnRzIHJlY2VpdmluZyBzdG9yZStzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0OyBpdCBwYXNzZXMgYWxvbmdcXG4gICAgICAgIC8vIHN1YnNjcmlwdGlvbiBwYXNzZWQgdG8gaXQuIE90aGVyd2lzZSwgaXQgc2hhZG93cyB0aGUgcGFyZW50IHN1YnNjcmlwdGlvbiwgd2hpY2ggYWxsb3dzXFxuICAgICAgICAvLyBDb25uZWN0IHRvIGNvbnRyb2wgb3JkZXJpbmcgb2Ygbm90aWZpY2F0aW9ucyB0byBmbG93IHRvcC1kb3duLlxcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMucHJvcHNNb2RlID8gbnVsbCA6IHRoaXMuc3Vic2NyaXB0aW9uO1xcbiAgICAgICAgcmV0dXJuIF9yZWYyID0ge30sIF9yZWYyW3N1YnNjcmlwdGlvbktleV0gPSBzdWJzY3JpcHRpb24gfHwgdGhpcy5jb250ZXh0W3N1YnNjcmlwdGlvbktleV0sIF9yZWYyO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcXG4gICAgICAgIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm47XFxuXFxuICAgICAgICAvLyBjb21wb25lbnRXaWxsTW91bnQgZmlyZXMgZHVyaW5nIHNlcnZlciBzaWRlIHJlbmRlcmluZywgYnV0IGNvbXBvbmVudERpZE1vdW50IGFuZFxcbiAgICAgICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQgZG8gbm90LiBCZWNhdXNlIG9mIHRoaXMsIHRyeVN1YnNjcmliZSBoYXBwZW5zIGR1cmluZyAuLi5kaWRNb3VudC5cXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdW5zdWJzY3JpcHRpb24gd291bGQgbmV2ZXIgdGFrZSBwbGFjZSBkdXJpbmcgU1NSLCBjYXVzaW5nIGEgbWVtb3J5IGxlYWsuXFxuICAgICAgICAvLyBUbyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBjaGlsZCBjb21wb25lbnQgbWF5IGhhdmUgdHJpZ2dlcmVkIGEgc3RhdGUgY2hhbmdlIGJ5XFxuICAgICAgICAvLyBkaXNwYXRjaGluZyBhbiBhY3Rpb24gaW4gaXRzIGNvbXBvbmVudFdpbGxNb3VudCwgd2UgaGF2ZSB0byByZS1ydW4gdGhlIHNlbGVjdCBhbmQgbWF5YmVcXG4gICAgICAgIC8vIHJlLXJlbmRlci5cXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyk7XFxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUpIHRoaXMuZm9yY2VVcGRhdGUoKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4obmV4dFByb3BzKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG51bGw7XFxuICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMgPSBub29wO1xcbiAgICAgICAgdGhpcy5zdG9yZSA9IG51bGw7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnJ1biA9IG5vb3A7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuZ2V0V3JhcHBlZEluc3RhbmNlID0gZnVuY3Rpb24gZ2V0V3JhcHBlZEluc3RhbmNlKCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh3aXRoUmVmLCAnVG8gYWNjZXNzIHRoZSB3cmFwcGVkIGluc3RhbmNlLCB5b3UgbmVlZCB0byBzcGVjaWZ5ICcgKyAoJ3sgd2l0aFJlZjogdHJ1ZSB9IGluIHRoZSBvcHRpb25zIGFyZ3VtZW50IG9mIHRoZSAnICsgbWV0aG9kTmFtZSArICcoKSBjYWxsLicpKTtcXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRJbnN0YW5jZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnNldFdyYXBwZWRJbnN0YW5jZSA9IGZ1bmN0aW9uIHNldFdyYXBwZWRJbnN0YW5jZShyZWYpIHtcXG4gICAgICAgIHRoaXMud3JhcHBlZEluc3RhbmNlID0gcmVmO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFNlbGVjdG9yID0gZnVuY3Rpb24gaW5pdFNlbGVjdG9yKCkge1xcbiAgICAgICAgdmFyIHNvdXJjZVNlbGVjdG9yID0gc2VsZWN0b3JGYWN0b3J5KHRoaXMuc3RvcmUuZGlzcGF0Y2gsIHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMpO1xcbiAgICAgICAgdGhpcy5zZWxlY3RvciA9IG1ha2VTZWxlY3RvclN0YXRlZnVsKHNvdXJjZVNlbGVjdG9yLCB0aGlzLnN0b3JlKTtcXG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIGluaXRTdWJzY3JpcHRpb24oKSB7XFxuICAgICAgICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuO1xcblxcbiAgICAgICAgLy8gcGFyZW50U3ViJ3Mgc291cmNlIHNob3VsZCBtYXRjaCB3aGVyZSBzdG9yZSBjYW1lIGZyb206IHByb3BzIHZzLiBjb250ZXh0LiBBIGNvbXBvbmVudFxcbiAgICAgICAgLy8gY29ubmVjdGVkIHRvIHRoZSBzdG9yZSB2aWEgcHJvcHMgc2hvdWxkbid0IHVzZSBzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0LCBvciB2aWNlIHZlcnNhLlxcbiAgICAgICAgdmFyIHBhcmVudFN1YiA9ICh0aGlzLnByb3BzTW9kZSA/IHRoaXMucHJvcHMgOiB0aGlzLmNvbnRleHQpW3N1YnNjcmlwdGlvbktleV07XFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX1N1YnNjcmlwdGlvbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSh0aGlzLnN0b3JlLCBwYXJlbnRTdWIsIHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpKTtcXG5cXG4gICAgICAgIC8vIGBub3RpZnlOZXN0ZWRTdWJzYCBpcyBkdXBsaWNhdGVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29tcG9uZW50IGlzICB1bm1vdW50ZWQgaW5cXG4gICAgICAgIC8vIHRoZSBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLCB3aGVyZSBgdGhpcy5zdWJzY3JpcHRpb25gIHdpbGwgdGhlbiBiZSBudWxsLiBBblxcbiAgICAgICAgLy8gZXh0cmEgbnVsbCBjaGVjayBldmVyeSBjaGFuZ2UgY2FuIGJlIGF2b2lkZWQgYnkgY29weWluZyB0aGUgbWV0aG9kIG9udG8gYHRoaXNgIGFuZCB0aGVuXFxuICAgICAgICAvLyByZXBsYWNpbmcgaXQgd2l0aCBhIG5vLW9wIG9uIHVubW91bnQuIFRoaXMgY2FuIHByb2JhYmx5IGJlIGF2b2lkZWQgaWYgU3Vic2NyaXB0aW9uJ3NcXG4gICAgICAgIC8vIGxpc3RlbmVycyBsb2dpYyBpcyBjaGFuZ2VkIHRvIG5vdCBjYWxsIGxpc3RlbmVycyB0aGF0IGhhdmUgYmVlbiB1bnN1YnNjcmliZWQgaW4gdGhlXFxuICAgICAgICAvLyBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLlxcbiAgICAgICAgdGhpcy5ub3RpZnlOZXN0ZWRTdWJzID0gdGhpcy5zdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3Vicy5iaW5kKHRoaXMuc3Vic2NyaXB0aW9uKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm9uU3RhdGVDaGFuZ2UgPSBmdW5jdGlvbiBvblN0YXRlQ2hhbmdlKCkge1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyk7XFxuXFxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlKSB7XFxuICAgICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicygpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgdGhpcy5jb21wb25lbnREaWRVcGRhdGUgPSB0aGlzLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZTtcXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShkdW1teVN0YXRlKTtcXG4gICAgICAgIH1cXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSgpIHtcXG4gICAgICAgIC8vIGBjb21wb25lbnREaWRVcGRhdGVgIGlzIGNvbmRpdGlvbmFsbHkgaW1wbGVtZW50ZWQgd2hlbiBgb25TdGF0ZUNoYW5nZWAgZGV0ZXJtaW5lcyBpdFxcbiAgICAgICAgLy8gbmVlZHMgdG8gbm90aWZ5IG5lc3RlZCBzdWJzLiBPbmNlIGNhbGxlZCwgaXQgdW5pbXBsZW1lbnRzIGl0c2VsZiB1bnRpbCBmdXJ0aGVyIHN0YXRlXFxuICAgICAgICAvLyBjaGFuZ2VzIG9jY3VyLiBEb2luZyBpdCB0aGlzIHdheSB2cyBoYXZpbmcgYSBwZXJtYW5lbnQgYGNvbXBvbmVudERpZFVwZGF0ZWAgdGhhdCBkb2VzXFxuICAgICAgICAvLyBhIGJvb2xlYW4gY2hlY2sgZXZlcnkgdGltZSBhdm9pZHMgYW4gZXh0cmEgbWV0aG9kIGNhbGwgbW9zdCBvZiB0aGUgdGltZSwgcmVzdWx0aW5nXFxuICAgICAgICAvLyBpbiBzb21lIHBlcmYgYm9vc3QuXFxuICAgICAgICB0aGlzLmNvbXBvbmVudERpZFVwZGF0ZSA9IHVuZGVmaW5lZDtcXG4gICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicygpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaXNTdWJzY3JpYmVkID0gZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5zdWJzY3JpcHRpb24pICYmIHRoaXMuc3Vic2NyaXB0aW9uLmlzU3Vic2NyaWJlZCgpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuYWRkRXh0cmFQcm9wcyA9IGZ1bmN0aW9uIGFkZEV4dHJhUHJvcHMocHJvcHMpIHtcXG4gICAgICAgIGlmICghd2l0aFJlZiAmJiAhcmVuZGVyQ291bnRQcm9wICYmICEodGhpcy5wcm9wc01vZGUgJiYgdGhpcy5zdWJzY3JpcHRpb24pKSByZXR1cm4gcHJvcHM7XFxuICAgICAgICAvLyBtYWtlIGEgc2hhbGxvdyBjb3B5IHNvIHRoYXQgZmllbGRzIGFkZGVkIGRvbid0IGxlYWsgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdG9yLlxcbiAgICAgICAgLy8gdGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgJ3JlZicgc2luY2UgdGhhdCdzIGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlIGNvbXBvbmVudFxcbiAgICAgICAgLy8gaW5zdGFuY2UuIGEgc2luZ2xldG9uIG1lbW9pemVkIHNlbGVjdG9yIHdvdWxkIHRoZW4gYmUgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGVcXG4gICAgICAgIC8vIGluc3RhbmNlLCBwcmV2ZW50aW5nIHRoZSBpbnN0YW5jZSBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWRcXG4gICAgICAgIHZhciB3aXRoRXh0cmFzID0gX2V4dGVuZHMoe30sIHByb3BzKTtcXG4gICAgICAgIGlmICh3aXRoUmVmKSB3aXRoRXh0cmFzLnJlZiA9IHRoaXMuc2V0V3JhcHBlZEluc3RhbmNlO1xcbiAgICAgICAgaWYgKHJlbmRlckNvdW50UHJvcCkgd2l0aEV4dHJhc1tyZW5kZXJDb3VudFByb3BdID0gdGhpcy5yZW5kZXJDb3VudCsrO1xcbiAgICAgICAgaWYgKHRoaXMucHJvcHNNb2RlICYmIHRoaXMuc3Vic2NyaXB0aW9uKSB3aXRoRXh0cmFzW3N1YnNjcmlwdGlvbktleV0gPSB0aGlzLnN1YnNjcmlwdGlvbjtcXG4gICAgICAgIHJldHVybiB3aXRoRXh0cmFzO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gdGhpcy5zZWxlY3RvcjtcXG4gICAgICAgIHNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xcblxcbiAgICAgICAgaWYgKHNlbGVjdG9yLmVycm9yKSB7XFxuICAgICAgICAgIHRocm93IHNlbGVjdG9yLmVycm9yO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShXcmFwcGVkQ29tcG9uZW50LCB0aGlzLmFkZEV4dHJhUHJvcHMoc2VsZWN0b3IucHJvcHMpKTtcXG4gICAgICAgIH1cXG4gICAgICB9O1xcblxcbiAgICAgIHJldHVybiBDb25uZWN0O1xcbiAgICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICAgIENvbm5lY3QuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XFxuICAgIENvbm5lY3QuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcXG4gICAgQ29ubmVjdC5jaGlsZENvbnRleHRUeXBlcyA9IGNoaWxkQ29udGV4dFR5cGVzO1xcbiAgICBDb25uZWN0LmNvbnRleHRUeXBlcyA9IGNvbnRleHRUeXBlcztcXG4gICAgQ29ubmVjdC5wcm9wVHlwZXMgPSBjb250ZXh0VHlwZXM7XFxuXFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVcGRhdGUoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIC8vIFdlIGFyZSBob3QgcmVsb2FkaW5nIVxcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiAhPT0gdmVyc2lvbikge1xcbiAgICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbiAgICAgICAgICB0aGlzLmluaXRTZWxlY3RvcigpO1xcblxcbiAgICAgICAgICAvLyBJZiBhbnkgY29ubmVjdGVkIGRlc2NlbmRhbnRzIGRvbid0IGhvdCByZWxvYWQgKGFuZCByZXN1YnNjcmliZSBpbiB0aGUgcHJvY2VzcyksIHRoZWlyXFxuICAgICAgICAgIC8vIGxpc3RlbmVycyB3aWxsIGJlIGxvc3Qgd2hlbiB3ZSB1bnN1YnNjcmliZS4gVW5mb3J0dW5hdGVseSwgYnkgY29weWluZyBvdmVyIGFsbFxcbiAgICAgICAgICAvLyBsaXN0ZW5lcnMsIHRoaXMgZG9lcyBtZWFuIHRoYXQgdGhlIG9sZCB2ZXJzaW9ucyBvZiBjb25uZWN0ZWQgZGVzY2VuZGFudHMgd2lsbCBzdGlsbCBiZVxcbiAgICAgICAgICAvLyBub3RpZmllZCBvZiBzdGF0ZSBjaGFuZ2VzOyBob3dldmVyLCB0aGVpciBvblN0YXRlQ2hhbmdlIGZ1bmN0aW9uIGlzIGEgbm8tb3Agc28gdGhpc1xcbiAgICAgICAgICAvLyBpc24ndCBhIGh1Z2UgZGVhbC5cXG4gICAgICAgICAgdmFyIG9sZExpc3RlbmVycyA9IFtdO1xcblxcbiAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcXG4gICAgICAgICAgICBvbGRMaXN0ZW5lcnMgPSB0aGlzLnN1YnNjcmlwdGlvbi5saXN0ZW5lcnMuZ2V0KCk7XFxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICB0aGlzLmluaXRTdWJzY3JpcHRpb24oKTtcXG4gICAgICAgICAgaWYgKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykge1xcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xcbiAgICAgICAgICAgIG9sZExpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5zdWJzY3JpcHRpb24ubGlzdGVuZXJzLnN1YnNjcmliZShsaXN0ZW5lcik7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9O1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0KCkoQ29ubmVjdCwgV3JhcHBlZENvbXBvbmVudCk7XFxuICB9O1xcbn1cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFjdGlvblR5cGVzOyB9KTtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAzKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGVzZSBhcmUgcHJpdmF0ZSBhY3Rpb24gdHlwZXMgcmVzZXJ2ZWQgYnkgUmVkdXguXFxuICogRm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHlvdSBtdXN0IHJldHVybiB0aGUgY3VycmVudCBzdGF0ZS5cXG4gKiBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyB1bmRlZmluZWQsIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS5cXG4gKiBEbyBub3QgcmVmZXJlbmNlIHRoZXNlIGFjdGlvbiB0eXBlcyBkaXJlY3RseSBpbiB5b3VyIGNvZGUuXFxuICovXFxudmFyIEFjdGlvblR5cGVzID0ge1xcbiAgSU5JVDogJ0BAcmVkdXgvSU5JVCdcXG5cXG4gIC8qKlxcbiAgICogQ3JlYXRlcyBhIFJlZHV4IHN0b3JlIHRoYXQgaG9sZHMgdGhlIHN0YXRlIHRyZWUuXFxuICAgKiBUaGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBkYXRhIGluIHRoZSBzdG9yZSBpcyB0byBjYWxsIGBkaXNwYXRjaCgpYCBvbiBpdC5cXG4gICAqXFxuICAgKiBUaGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBzdG9yZSBpbiB5b3VyIGFwcC4gVG8gc3BlY2lmeSBob3cgZGlmZmVyZW50XFxuICAgKiBwYXJ0cyBvZiB0aGUgc3RhdGUgdHJlZSByZXNwb25kIHRvIGFjdGlvbnMsIHlvdSBtYXkgY29tYmluZSBzZXZlcmFsIHJlZHVjZXJzXFxuICAgKiBpbnRvIGEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gYnkgdXNpbmcgYGNvbWJpbmVSZWR1Y2Vyc2AuXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSB0cmVlLCBnaXZlblxcbiAgICogdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGFjdGlvbiB0byBoYW5kbGUuXFxuICAgKlxcbiAgICogQHBhcmFtIHthbnl9IFtwcmVsb2FkZWRTdGF0ZV0gVGhlIGluaXRpYWwgc3RhdGUuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XFxuICAgKiB0byBoeWRyYXRlIHRoZSBzdGF0ZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYVxcbiAgICogcHJldmlvdXNseSBzZXJpYWxpemVkIHVzZXIgc2Vzc2lvbi5cXG4gICAqIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2Vyc2AgdG8gcHJvZHVjZSB0aGUgcm9vdCByZWR1Y2VyIGZ1bmN0aW9uLCB0aGlzIG11c3QgYmVcXG4gICAqIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIGBjb21iaW5lUmVkdWNlcnNgIGtleXMuXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2VuaGFuY2VyXSBUaGUgc3RvcmUgZW5oYW5jZXIuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XFxuICAgKiB0byBlbmhhbmNlIHRoZSBzdG9yZSB3aXRoIHRoaXJkLXBhcnR5IGNhcGFiaWxpdGllcyBzdWNoIGFzIG1pZGRsZXdhcmUsXFxuICAgKiB0aW1lIHRyYXZlbCwgcGVyc2lzdGVuY2UsIGV0Yy4gVGhlIG9ubHkgc3RvcmUgZW5oYW5jZXIgdGhhdCBzaGlwcyB3aXRoIFJlZHV4XFxuICAgKiBpcyBgYXBwbHlNaWRkbGV3YXJlKClgLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHtTdG9yZX0gQSBSZWR1eCBzdG9yZSB0aGF0IGxldHMgeW91IHJlYWQgdGhlIHN0YXRlLCBkaXNwYXRjaCBhY3Rpb25zXFxuICAgKiBhbmQgc3Vic2NyaWJlIHRvIGNoYW5nZXMuXFxuICAgKi9cXG59O2Z1bmN0aW9uIGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xcbiAgdmFyIF9yZWYyO1xcblxcbiAgaWYgKHR5cGVvZiBwcmVsb2FkZWRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZW5oYW5jZXIgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XFxuICAgIHByZWxvYWRlZFN0YXRlID0gdW5kZWZpbmVkO1xcbiAgfVxcblxcbiAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdGhlIGVuaGFuY2VyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XFxuICB9XFxuXFxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0aGUgcmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgfVxcblxcbiAgdmFyIGN1cnJlbnRSZWR1Y2VyID0gcmVkdWNlcjtcXG4gIHZhciBjdXJyZW50U3RhdGUgPSBwcmVsb2FkZWRTdGF0ZTtcXG4gIHZhciBjdXJyZW50TGlzdGVuZXJzID0gW107XFxuICB2YXIgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnM7XFxuICB2YXIgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xcblxcbiAgZnVuY3Rpb24gZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpIHtcXG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtcXG4gICAgICBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycy5zbGljZSgpO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKipcXG4gICAqIFJlYWRzIHRoZSBzdGF0ZSB0cmVlIG1hbmFnZWQgYnkgdGhlIHN0b3JlLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHthbnl9IFRoZSBjdXJyZW50IHN0YXRlIHRyZWUgb2YgeW91ciBhcHBsaWNhdGlvbi5cXG4gICAqL1xcbiAgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XFxuICAgIHJldHVybiBjdXJyZW50U3RhdGU7XFxuICB9XFxuXFxuICAvKipcXG4gICAqIEFkZHMgYSBjaGFuZ2UgbGlzdGVuZXIuIEl0IHdpbGwgYmUgY2FsbGVkIGFueSB0aW1lIGFuIGFjdGlvbiBpcyBkaXNwYXRjaGVkLFxcbiAgICogYW5kIHNvbWUgcGFydCBvZiB0aGUgc3RhdGUgdHJlZSBtYXkgcG90ZW50aWFsbHkgaGF2ZSBjaGFuZ2VkLiBZb3UgbWF5IHRoZW5cXG4gICAqIGNhbGwgYGdldFN0YXRlKClgIHRvIHJlYWQgdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBpbnNpZGUgdGhlIGNhbGxiYWNrLlxcbiAgICpcXG4gICAqIFlvdSBtYXkgY2FsbCBgZGlzcGF0Y2goKWAgZnJvbSBhIGNoYW5nZSBsaXN0ZW5lciwgd2l0aCB0aGUgZm9sbG93aW5nXFxuICAgKiBjYXZlYXRzOlxcbiAgICpcXG4gICAqIDEuIFRoZSBzdWJzY3JpcHRpb25zIGFyZSBzbmFwc2hvdHRlZCBqdXN0IGJlZm9yZSBldmVyeSBgZGlzcGF0Y2goKWAgY2FsbC5cXG4gICAqIElmIHlvdSBzdWJzY3JpYmUgb3IgdW5zdWJzY3JpYmUgd2hpbGUgdGhlIGxpc3RlbmVycyBhcmUgYmVpbmcgaW52b2tlZCwgdGhpc1xcbiAgICogd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBgZGlzcGF0Y2goKWAgdGhhdCBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXFxuICAgKiBIb3dldmVyLCB0aGUgbmV4dCBgZGlzcGF0Y2goKWAgY2FsbCwgd2hldGhlciBuZXN0ZWQgb3Igbm90LCB3aWxsIHVzZSBhIG1vcmVcXG4gICAqIHJlY2VudCBzbmFwc2hvdCBvZiB0aGUgc3Vic2NyaXB0aW9uIGxpc3QuXFxuICAgKlxcbiAgICogMi4gVGhlIGxpc3RlbmVyIHNob3VsZCBub3QgZXhwZWN0IHRvIHNlZSBhbGwgc3RhdGUgY2hhbmdlcywgYXMgdGhlIHN0YXRlXFxuICAgKiBtaWdodCBoYXZlIGJlZW4gdXBkYXRlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgYSBuZXN0ZWQgYGRpc3BhdGNoKClgIGJlZm9yZVxcbiAgICogdGhlIGxpc3RlbmVyIGlzIGNhbGxlZC4gSXQgaXMsIGhvd2V2ZXIsIGd1YXJhbnRlZWQgdGhhdCBhbGwgc3Vic2NyaWJlcnNcXG4gICAqIHJlZ2lzdGVyZWQgYmVmb3JlIHRoZSBgZGlzcGF0Y2goKWAgc3RhcnRlZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsYXRlc3RcXG4gICAqIHN0YXRlIGJ5IHRoZSB0aW1lIGl0IGV4aXRzLlxcbiAgICpcXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBldmVyeSBkaXNwYXRjaC5cXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0byByZW1vdmUgdGhpcyBjaGFuZ2UgbGlzdGVuZXIuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xcbiAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xcblxcbiAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XFxuICAgIG5leHRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XFxuXFxuICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcXG4gICAgICBpZiAoIWlzU3Vic2NyaWJlZCkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICAgIH1cXG5cXG4gICAgICBpc1N1YnNjcmliZWQgPSBmYWxzZTtcXG5cXG4gICAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XFxuICAgICAgdmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcXG4gICAgICBuZXh0TGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XFxuICAgIH07XFxuICB9XFxuXFxuICAvKipcXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uLiBJdCBpcyB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBhIHN0YXRlIGNoYW5nZS5cXG4gICAqXFxuICAgKiBUaGUgYHJlZHVjZXJgIGZ1bmN0aW9uLCB1c2VkIHRvIGNyZWF0ZSB0aGUgc3RvcmUsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlXFxuICAgKiBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBnaXZlbiBgYWN0aW9uYC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsXFxuICAgKiBiZSBjb25zaWRlcmVkIHRoZSAqKm5leHQqKiBzdGF0ZSBvZiB0aGUgdHJlZSwgYW5kIHRoZSBjaGFuZ2UgbGlzdGVuZXJzXFxuICAgKiB3aWxsIGJlIG5vdGlmaWVkLlxcbiAgICpcXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9ubHkgc3VwcG9ydHMgcGxhaW4gb2JqZWN0IGFjdGlvbnMuIElmIHlvdSB3YW50IHRvXFxuICAgKiBkaXNwYXRjaCBhIFByb21pc2UsIGFuIE9ic2VydmFibGUsIGEgdGh1bmssIG9yIHNvbWV0aGluZyBlbHNlLCB5b3UgbmVlZCB0b1xcbiAgICogd3JhcCB5b3VyIHN0b3JlIGNyZWF0aW5nIGZ1bmN0aW9uIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbWlkZGxld2FyZS4gRm9yXFxuICAgKiBleGFtcGxlLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgcmVkdXgtdGh1bmtgIHBhY2thZ2UuIEV2ZW4gdGhlXFxuICAgKiBtaWRkbGV3YXJlIHdpbGwgZXZlbnR1YWxseSBkaXNwYXRjaCBwbGFpbiBvYmplY3QgYWN0aW9ucyB1c2luZyB0aGlzIG1ldGhvZC5cXG4gICAqXFxuICAgKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIEEgcGxhaW4gb2JqZWN0IHJlcHJlc2VudGluZyDigJx3aGF0IGNoYW5nZWTigJ0uIEl0IGlzXFxuICAgKiBhIGdvb2QgaWRlYSB0byBrZWVwIGFjdGlvbnMgc2VyaWFsaXphYmxlIHNvIHlvdSBjYW4gcmVjb3JkIGFuZCByZXBsYXkgdXNlclxcbiAgICogc2Vzc2lvbnMsIG9yIHVzZSB0aGUgdGltZSB0cmF2ZWxsaW5nIGByZWR1eC1kZXZ0b29sc2AuIEFuIGFjdGlvbiBtdXN0IGhhdmVcXG4gICAqIGEgYHR5cGVgIHByb3BlcnR5IHdoaWNoIG1heSBub3QgYmUgYHVuZGVmaW5lZGAuIEl0IGlzIGEgZ29vZCBpZGVhIHRvIHVzZVxcbiAgICogc3RyaW5nIGNvbnN0YW50cyBmb3IgYWN0aW9uIHR5cGVzLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IEZvciBjb252ZW5pZW5jZSwgdGhlIHNhbWUgYWN0aW9uIG9iamVjdCB5b3UgZGlzcGF0Y2hlZC5cXG4gICAqXFxuICAgKiBOb3RlIHRoYXQsIGlmIHlvdSB1c2UgYSBjdXN0b20gbWlkZGxld2FyZSwgaXQgbWF5IHdyYXAgYGRpc3BhdGNoKClgIHRvXFxuICAgKiByZXR1cm4gc29tZXRoaW5nIGVsc2UgKGZvciBleGFtcGxlLCBhIFByb21pc2UgeW91IGNhbiBhd2FpdCkuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xcbiAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFjdGlvbikpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbnMgbXVzdCBiZSBwbGFpbiBvYmplY3RzLiAnICsgJ1VzZSBjdXN0b20gbWlkZGxld2FyZSBmb3IgYXN5bmMgYWN0aW9ucy4nKTtcXG4gICAgfVxcblxcbiAgICBpZiAodHlwZW9mIGFjdGlvbi50eXBlID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWN0aW9ucyBtYXkgbm90IGhhdmUgYW4gdW5kZWZpbmVkIFxcXCJ0eXBlXFxcIiBwcm9wZXJ0eS4gJyArICdIYXZlIHlvdSBtaXNzcGVsbGVkIGEgY29uc3RhbnQ/Jyk7XFxuICAgIH1cXG5cXG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXJzIG1heSBub3QgZGlzcGF0Y2ggYWN0aW9ucy4nKTtcXG4gICAgfVxcblxcbiAgICB0cnkge1xcbiAgICAgIGlzRGlzcGF0Y2hpbmcgPSB0cnVlO1xcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcXG4gICAgfSBmaW5hbGx5IHtcXG4gICAgICBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XFxuICAgIH1cXG5cXG4gICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnMgPSBuZXh0TGlzdGVuZXJzO1xcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTtcXG4gICAgICBsaXN0ZW5lcigpO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBhY3Rpb247XFxuICB9XFxuXFxuICAvKipcXG4gICAqIFJlcGxhY2VzIHRoZSByZWR1Y2VyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdG9yZSB0byBjYWxjdWxhdGUgdGhlIHN0YXRlLlxcbiAgICpcXG4gICAqIFlvdSBtaWdodCBuZWVkIHRoaXMgaWYgeW91ciBhcHAgaW1wbGVtZW50cyBjb2RlIHNwbGl0dGluZyBhbmQgeW91IHdhbnQgdG9cXG4gICAqIGxvYWQgc29tZSBvZiB0aGUgcmVkdWNlcnMgZHluYW1pY2FsbHkuIFlvdSBtaWdodCBhbHNvIG5lZWQgdGhpcyBpZiB5b3VcXG4gICAqIGltcGxlbWVudCBhIGhvdCByZWxvYWRpbmcgbWVjaGFuaXNtIGZvciBSZWR1eC5cXG4gICAqXFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0UmVkdWNlciBUaGUgcmVkdWNlciBmb3IgdGhlIHN0b3JlIHRvIHVzZSBpbnN0ZWFkLlxcbiAgICogQHJldHVybnMge3ZvaWR9XFxuICAgKi9cXG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWR1Y2VyKG5leHRSZWR1Y2VyKSB7XFxuICAgIGlmICh0eXBlb2YgbmV4dFJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRoZSBuZXh0UmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIGN1cnJlbnRSZWR1Y2VyID0gbmV4dFJlZHVjZXI7XFxuICAgIGRpc3BhdGNoKHsgdHlwZTogQWN0aW9uVHlwZXMuSU5JVCB9KTtcXG4gIH1cXG5cXG4gIC8qKlxcbiAgICogSW50ZXJvcGVyYWJpbGl0eSBwb2ludCBmb3Igb2JzZXJ2YWJsZS9yZWFjdGl2ZSBsaWJyYXJpZXMuXFxuICAgKiBAcmV0dXJucyB7b2JzZXJ2YWJsZX0gQSBtaW5pbWFsIG9ic2VydmFibGUgb2Ygc3RhdGUgY2hhbmdlcy5cXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIG9ic2VydmFibGUgcHJvcG9zYWw6XFxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXFxuICAgKi9cXG4gIGZ1bmN0aW9uIG9ic2VydmFibGUoKSB7XFxuICAgIHZhciBfcmVmO1xcblxcbiAgICB2YXIgb3V0ZXJTdWJzY3JpYmUgPSBzdWJzY3JpYmU7XFxuICAgIHJldHVybiBfcmVmID0ge1xcbiAgICAgIC8qKlxcbiAgICAgICAqIFRoZSBtaW5pbWFsIG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIG1ldGhvZC5cXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JzZXJ2ZXIgQW55IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIG9ic2VydmVyLlxcbiAgICAgICAqIFRoZSBvYnNlcnZlciBvYmplY3Qgc2hvdWxkIGhhdmUgYSBgbmV4dGAgbWV0aG9kLlxcbiAgICAgICAqIEByZXR1cm5zIHtzdWJzY3JpcHRpb259IEFuIG9iamVjdCB3aXRoIGFuIGB1bnN1YnNjcmliZWAgbWV0aG9kIHRoYXQgY2FuXFxuICAgICAgICogYmUgdXNlZCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSBmcm9tIHRoZSBzdG9yZSwgYW5kIHByZXZlbnQgZnVydGhlclxcbiAgICAgICAqIGVtaXNzaW9uIG9mIHZhbHVlcyBmcm9tIHRoZSBvYnNlcnZhYmxlLlxcbiAgICAgICAqL1xcbiAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XFxuICAgICAgICBpZiAodHlwZW9mIG9ic2VydmVyICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LicpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZnVuY3Rpb24gb2JzZXJ2ZVN0YXRlKCkge1xcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIubmV4dCkge1xcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZ2V0U3RhdGUoKSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIG9ic2VydmVTdGF0ZSgpO1xcbiAgICAgICAgdmFyIHVuc3Vic2NyaWJlID0gb3V0ZXJTdWJzY3JpYmUob2JzZXJ2ZVN0YXRlKTtcXG4gICAgICAgIHJldHVybiB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZSB9O1xcbiAgICAgIH1cXG4gICAgfSwgX3JlZltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11dID0gZnVuY3Rpb24gKCkge1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LCBfcmVmO1xcbiAgfVxcblxcbiAgLy8gV2hlbiBhIHN0b3JlIGlzIGNyZWF0ZWQsIGFuIFxcXCJJTklUXFxcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCBzbyB0aGF0IGV2ZXJ5XFxuICAvLyByZWR1Y2VyIHJldHVybnMgdGhlaXIgaW5pdGlhbCBzdGF0ZS4gVGhpcyBlZmZlY3RpdmVseSBwb3B1bGF0ZXNcXG4gIC8vIHRoZSBpbml0aWFsIHN0YXRlIHRyZWUuXFxuICBkaXNwYXRjaCh7IHR5cGU6IEFjdGlvblR5cGVzLklOSVQgfSk7XFxuXFxuICByZXR1cm4gX3JlZjIgPSB7XFxuICAgIGRpc3BhdGNoOiBkaXNwYXRjaCxcXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmUsXFxuICAgIGdldFN0YXRlOiBnZXRTdGF0ZSxcXG4gICAgcmVwbGFjZVJlZHVjZXI6IHJlcGxhY2VSZWR1Y2VyXFxuICB9LCBfcmVmMltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11dID0gb2JzZXJ2YWJsZSwgX3JlZjI7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDc0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3YXJuaW5nO1xcbi8qKlxcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxcbiAqXFxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZS5cXG4gKiBAcmV0dXJucyB7dm9pZH1cXG4gKi9cXG5mdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHtcXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cXG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcXG4gIH1cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xcbiAgdHJ5IHtcXG4gICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBpZiB5b3UgZW5hYmxlXFxuICAgIC8vIFxcXCJicmVhayBvbiBhbGwgZXhjZXB0aW9uc1xcXCIgaW4geW91ciBjb25zb2xlLFxcbiAgICAvLyBpdCB3b3VsZCBwYXVzZSB0aGUgZXhlY3V0aW9uIGF0IHRoaXMgbGluZS5cXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eSAqL1xcbiAgfSBjYXRjaCAoZSkge31cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tZW1wdHkgKi9cXG59XFxuXFxuLyoqKi8gfSksXFxuLyogNzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IGNvbXBvc2U7XFxuLyoqXFxuICogQ29tcG9zZXMgc2luZ2xlLWFyZ3VtZW50IGZ1bmN0aW9ucyBmcm9tIHJpZ2h0IHRvIGxlZnQuIFRoZSByaWdodG1vc3RcXG4gKiBmdW5jdGlvbiBjYW4gdGFrZSBtdWx0aXBsZSBhcmd1bWVudHMgYXMgaXQgcHJvdmlkZXMgdGhlIHNpZ25hdHVyZSBmb3JcXG4gKiB0aGUgcmVzdWx0aW5nIGNvbXBvc2l0ZSBmdW5jdGlvbi5cXG4gKlxcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IGZ1bmNzIFRoZSBmdW5jdGlvbnMgdG8gY29tcG9zZS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gb2J0YWluZWQgYnkgY29tcG9zaW5nIHRoZSBhcmd1bWVudCBmdW5jdGlvbnNcXG4gKiBmcm9tIHJpZ2h0IHRvIGxlZnQuIEZvciBleGFtcGxlLCBjb21wb3NlKGYsIGcsIGgpIGlzIGlkZW50aWNhbCB0byBkb2luZ1xcbiAqICguLi5hcmdzKSA9PiBmKGcoaCguLi5hcmdzKSkpLlxcbiAqL1xcblxcbmZ1bmN0aW9uIGNvbXBvc2UoKSB7XFxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgZnVuY3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XFxuICB9XFxuXFxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAwKSB7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XFxuICAgICAgcmV0dXJuIGFyZztcXG4gICAgfTtcXG4gIH1cXG5cXG4gIGlmIChmdW5jcy5sZW5ndGggPT09IDEpIHtcXG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICAgIHJldHVybiBhKGIuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpKTtcXG4gICAgfTtcXG4gIH0pO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50O1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBnZXREZXBlbmRzT25Pd25Qcm9wcyAqL1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImJcXFwiXSA9IHdyYXBNYXBUb1Byb3BzRnVuYztcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc192ZXJpZnlQbGFpbk9iamVjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nyk7XFxuXFxuXFxuZnVuY3Rpb24gd3JhcE1hcFRvUHJvcHNDb25zdGFudChnZXRDb25zdGFudCkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRDb25zdGFudFNlbGVjdG9yKGRpc3BhdGNoLCBvcHRpb25zKSB7XFxuICAgIHZhciBjb25zdGFudCA9IGdldENvbnN0YW50KGRpc3BhdGNoLCBvcHRpb25zKTtcXG5cXG4gICAgZnVuY3Rpb24gY29uc3RhbnRTZWxlY3RvcigpIHtcXG4gICAgICByZXR1cm4gY29uc3RhbnQ7XFxuICAgIH1cXG4gICAgY29uc3RhbnRTZWxlY3Rvci5kZXBlbmRzT25Pd25Qcm9wcyA9IGZhbHNlO1xcbiAgICByZXR1cm4gY29uc3RhbnRTZWxlY3RvcjtcXG4gIH07XFxufVxcblxcbi8vIGRlcGVuZHNPbk93blByb3BzIGlzIHVzZWQgYnkgY3JlYXRlTWFwVG9Qcm9wc1Byb3h5IHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHBhc3MgcHJvcHMgYXMgYXJnc1xcbi8vIHRvIHRoZSBtYXBUb1Byb3BzIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZWQuIEl0IGlzIGFsc28gdXNlZCBieSBtYWtlUHVyZVByb3BzU2VsZWN0b3IgdG8gZGV0ZXJtaW5lXFxuLy8gd2hldGhlciBtYXBUb1Byb3BzIG5lZWRzIHRvIGJlIGludm9rZWQgd2hlbiBwcm9wcyBoYXZlIGNoYW5nZWQuXFxuLy8gXFxuLy8gQSBsZW5ndGggb2Ygb25lIHNpZ25hbHMgdGhhdCBtYXBUb1Byb3BzIGRvZXMgbm90IGRlcGVuZCBvbiBwcm9wcyBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50Llxcbi8vIEEgbGVuZ3RoIG9mIHplcm8gaXMgYXNzdW1lZCB0byBtZWFuIG1hcFRvUHJvcHMgaXMgZ2V0dGluZyBhcmdzIHZpYSBhcmd1bWVudHMgb3IgLi4uYXJncyBhbmRcXG4vLyB0aGVyZWZvcmUgbm90IHJlcG9ydGluZyBpdHMgbGVuZ3RoIGFjY3VyYXRlbHkuLlxcbmZ1bmN0aW9uIGdldERlcGVuZHNPbk93blByb3BzKG1hcFRvUHJvcHMpIHtcXG4gIHJldHVybiBtYXBUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzICE9PSBudWxsICYmIG1hcFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMgIT09IHVuZGVmaW5lZCA/IEJvb2xlYW4obWFwVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgOiBtYXBUb1Byb3BzLmxlbmd0aCAhPT0gMTtcXG59XFxuXFxuLy8gVXNlZCBieSB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiBhbmQgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzRnVuY3Rpb24sXFxuLy8gdGhpcyBmdW5jdGlvbiB3cmFwcyBtYXBUb1Byb3BzIGluIGEgcHJveHkgZnVuY3Rpb24gd2hpY2ggZG9lcyBzZXZlcmFsIHRoaW5nczpcXG4vLyBcXG4vLyAgKiBEZXRlY3RzIHdoZXRoZXIgdGhlIG1hcFRvUHJvcHMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGRlcGVuZHMgb24gcHJvcHMsIHdoaWNoXFxuLy8gICAgaXMgdXNlZCBieSBzZWxlY3RvckZhY3RvcnkgdG8gZGVjaWRlIGlmIGl0IHNob3VsZCByZWludm9rZSBvbiBwcm9wcyBjaGFuZ2VzLlxcbi8vICAgIFxcbi8vICAqIE9uIGZpcnN0IGNhbGwsIGhhbmRsZXMgbWFwVG9Qcm9wcyBpZiByZXR1cm5zIGFub3RoZXIgZnVuY3Rpb24sIGFuZCB0cmVhdHMgdGhhdFxcbi8vICAgIG5ldyBmdW5jdGlvbiBhcyB0aGUgdHJ1ZSBtYXBUb1Byb3BzIGZvciBzdWJzZXF1ZW50IGNhbGxzLlxcbi8vICAgIFxcbi8vICAqIE9uIGZpcnN0IGNhbGwsIHZlcmlmaWVzIHRoZSBmaXJzdCByZXN1bHQgaXMgYSBwbGFpbiBvYmplY3QsIGluIG9yZGVyIHRvIHdhcm5cXG4vLyAgICB0aGUgZGV2ZWxvcGVyIHRoYXQgdGhlaXIgbWFwVG9Qcm9wcyBmdW5jdGlvbiBpcyBub3QgcmV0dXJuaW5nIGEgdmFsaWQgcmVzdWx0Llxcbi8vICAgIFxcbmZ1bmN0aW9uIHdyYXBNYXBUb1Byb3BzRnVuYyhtYXBUb1Byb3BzLCBtZXRob2ROYW1lKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gaW5pdFByb3h5U2VsZWN0b3IoZGlzcGF0Y2gsIF9yZWYpIHtcXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gX3JlZi5kaXNwbGF5TmFtZTtcXG5cXG4gICAgdmFyIHByb3h5ID0gZnVuY3Rpb24gbWFwVG9Qcm9wc1Byb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcXG4gICAgICByZXR1cm4gcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPyBwcm94eS5tYXBUb1Byb3BzKHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIDogcHJveHkubWFwVG9Qcm9wcyhzdGF0ZU9yRGlzcGF0Y2gpO1xcbiAgICB9O1xcblxcbiAgICAvLyBhbGxvdyBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5IHRvIGdldCBvd25Qcm9wc1xcbiAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IHRydWU7XFxuXFxuICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBmdW5jdGlvbiBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcXG4gICAgICBwcm94eS5tYXBUb1Byb3BzID0gbWFwVG9Qcm9wcztcXG4gICAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IGdldERlcGVuZHNPbk93blByb3BzKG1hcFRvUHJvcHMpO1xcbiAgICAgIHZhciBwcm9wcyA9IHByb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpO1xcblxcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBwcm9wcztcXG4gICAgICAgIHByb3h5LmRlcGVuZHNPbk93blByb3BzID0gZ2V0RGVwZW5kc09uT3duUHJvcHMocHJvcHMpO1xcbiAgICAgICAgcHJvcHMgPSBwcm94eShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKTtcXG4gICAgICB9XFxuXFxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwcm9wcywgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpO1xcblxcbiAgICAgIHJldHVybiBwcm9wcztcXG4gICAgfTtcXG5cXG4gICAgcmV0dXJuIHByb3h5O1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDc3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB2ZXJpZnlQbGFpbk9iamVjdDtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5cXG5cXG5cXG5mdW5jdGlvbiB2ZXJpZnlQbGFpbk9iamVjdCh2YWx1ZSwgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1ldGhvZE5hbWUgKyAnKCkgaW4gJyArIGRpc3BsYXlOYW1lICsgJyBtdXN0IHJldHVybiBhIHBsYWluIG9iamVjdC4gSW5zdGVhZCByZWNlaXZlZCAnICsgdmFsdWUgKyAnLicpO1xcbiAgfVxcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheUluc2VydFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlJbnNlcnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5TW92ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlNb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVBvcFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlQb3A7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UHVzaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlQdXNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UmVtb3ZlQWxsXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVJlbW92ZUFsbDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlTaGlmdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTcGxpY2VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U3BsaWNlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVN3YXBcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U3dhcDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlVbnNoaWZ0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVVuc2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImF1dG9maWxsXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhdXRvZmlsbDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYmx1clxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYmx1cjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2hhbmdlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjaGFuZ2U7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNsZWFyU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbGVhclN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2xlYXJTdWJtaXRFcnJvcnNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsZWFyU3VibWl0RXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJjbGVhckFzeW5jRXJyb3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsZWFyQXN5bmNFcnJvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZGVzdHJveVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGVzdHJveTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZm9jdXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvY3VzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpbml0aWFsaXplXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbml0aWFsaXplOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZXNldFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzZXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0YXJ0QXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGFydEFzeW5jVmFsaWRhdGlvbjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0U3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wQXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wQXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wU3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic2V0U3VibWl0RmFpbGVkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzZXRTdWJtaXRGYWlsZWQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdFN1Y2NlZWRlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0U3VjY2VlZGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ0b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdG91Y2g7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInVucmVnaXN0ZXJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW5yZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnRvdWNoXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1bnRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1cGRhdGVTeW5jRXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1cGRhdGVTeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1cGRhdGVTeW5jV2FybmluZ3NcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVwZGF0ZVN5bmNXYXJuaW5nczsgfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuXFxuXFxudmFyIGFycmF5SW5zZXJ0ID0gZnVuY3Rpb24gYXJyYXlJbnNlcnQoZm9ybSwgZmllbGQsIGluZGV4LCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9JTlNFUlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQsIGluZGV4OiBpbmRleCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGFycmF5TW92ZSA9IGZ1bmN0aW9uIGFycmF5TW92ZShmb3JtLCBmaWVsZCwgZnJvbSwgdG8pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfTU9WRVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgZnJvbTogZnJvbSwgdG86IHRvIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVBvcCA9IGZ1bmN0aW9uIGFycmF5UG9wKGZvcm0sIGZpZWxkKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1BPUFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlQdXNoID0gZnVuY3Rpb24gYXJyYXlQdXNoKGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QVVNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgYXJyYXlSZW1vdmUgPSBmdW5jdGlvbiBhcnJheVJlbW92ZShmb3JtLCBmaWVsZCwgaW5kZXgpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUkVNT1ZFXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCBpbmRleDogaW5kZXggfSB9O1xcbn07XFxuXFxudmFyIGFycmF5UmVtb3ZlQWxsID0gZnVuY3Rpb24gYXJyYXlSZW1vdmVBbGwoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUkVNT1ZFX0FMTFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlTaGlmdCA9IGZ1bmN0aW9uIGFycmF5U2hpZnQoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU0hJRlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGFycmF5U3BsaWNlID0gZnVuY3Rpb24gYXJyYXlTcGxpY2UoZm9ybSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NQTElDRVxcXCJdLFxcbiAgICBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXg6IGluZGV4LCByZW1vdmVOdW06IHJlbW92ZU51bSB9XFxuICB9O1xcbiAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcXG4gICAgYWN0aW9uLnBheWxvYWQgPSB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgYXJyYXlTd2FwID0gZnVuY3Rpb24gYXJyYXlTd2FwKGZvcm0sIGZpZWxkLCBpbmRleEEsIGluZGV4Qikge1xcbiAgaWYgKGluZGV4QSA9PT0gaW5kZXhCKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignU3dhcCBpbmRpY2VzIGNhbm5vdCBiZSBlcXVhbCcpO1xcbiAgfVxcbiAgaWYgKGluZGV4QSA8IDAgfHwgaW5kZXhCIDwgMCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N3YXAgaW5kaWNlcyBjYW5ub3QgYmUgbmVnYXRpdmUnKTtcXG4gIH1cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU1dBUFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXhBOiBpbmRleEEsIGluZGV4QjogaW5kZXhCIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVVuc2hpZnQgPSBmdW5jdGlvbiBhcnJheVVuc2hpZnQoZm9ybSwgZmllbGQsIHZhbHVlKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1VOU0hJRlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBhdXRvZmlsbCA9IGZ1bmN0aW9uIGF1dG9maWxsKGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBVVRPRklMTFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGJsdXIgPSBmdW5jdGlvbiBibHVyKGZvcm0sIGZpZWxkLCB2YWx1ZSwgdG91Y2gpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQkxVUlxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgdG91Y2g6IHRvdWNoIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgY2hhbmdlID0gZnVuY3Rpb24gY2hhbmdlKGZvcm0sIGZpZWxkLCB2YWx1ZSwgdG91Y2gsIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0hBTkdFXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCB0b3VjaDogdG91Y2gsIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBjbGVhclN1Ym1pdCA9IGZ1bmN0aW9uIGNsZWFyU3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgY2xlYXJTdWJtaXRFcnJvcnMgPSBmdW5jdGlvbiBjbGVhclN1Ym1pdEVycm9ycyhmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0gfTtcXG59O1xcblxcbnZhciBjbGVhckFzeW5jRXJyb3IgPSBmdW5jdGlvbiBjbGVhckFzeW5jRXJyb3IoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfQVNZTkNfRVJST1JcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZvcm0gPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgZm9ybVtfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiREVTVFJPWVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSB9O1xcbn07XFxuXFxudmFyIGZvY3VzID0gZnVuY3Rpb24gZm9jdXMoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiRk9DVVNcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGluaXRpYWxpemUgPSBmdW5jdGlvbiBpbml0aWFsaXplKGZvcm0sIHZhbHVlcywga2VlcERpcnR5KSB7XFxuICB2YXIgb3RoZXJNZXRhID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7fTtcXG5cXG4gIGlmIChrZWVwRGlydHkgaW5zdGFuY2VvZiBPYmplY3QpIHtcXG4gICAgb3RoZXJNZXRhID0ga2VlcERpcnR5O1xcbiAgICBrZWVwRGlydHkgPSBmYWxzZTtcXG4gIH1cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiSU5JVElBTElaRVxcXCJdLCBtZXRhOiBfZXh0ZW5kcyh7IGZvcm06IGZvcm0sIGtlZXBEaXJ0eToga2VlcERpcnR5IH0sIG90aGVyTWV0YSksIHBheWxvYWQ6IHZhbHVlcyB9O1xcbn07XFxuXFxudmFyIHJlZ2lzdGVyRmllbGQgPSBmdW5jdGlvbiByZWdpc3RlckZpZWxkKGZvcm0sIG5hbWUsIHR5cGUpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVHSVNURVJfRklFTERcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0sIHBheWxvYWQ6IHsgbmFtZTogbmFtZSwgdHlwZTogdHlwZSB9IH07XFxufTtcXG5cXG52YXIgcmVzZXQgPSBmdW5jdGlvbiByZXNldChmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlJFU0VUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBmdW5jdGlvbiBzdGFydEFzeW5jVmFsaWRhdGlvbihmb3JtLCBmaWVsZCkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVEFSVF9BU1lOQ19WQUxJREFUSU9OXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0gfTtcXG59O1xcblxcbnZhciBzdGFydFN1Ym1pdCA9IGZ1bmN0aW9uIHN0YXJ0U3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RBUlRfU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc3RvcEFzeW5jVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIHN0b3BBc3luY1ZhbGlkYXRpb24oZm9ybSwgZXJyb3JzKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfQVNZTkNfVkFMSURBVElPTlxcXCJdLFxcbiAgICBtZXRhOiB7IGZvcm06IGZvcm0gfSxcXG4gICAgcGF5bG9hZDogZXJyb3JzXFxuICB9O1xcbiAgaWYgKGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCkge1xcbiAgICBhY3Rpb24uZXJyb3IgPSB0cnVlO1xcbiAgfVxcbiAgcmV0dXJuIGFjdGlvbjtcXG59O1xcblxcbnZhciBzdG9wU3VibWl0ID0gZnVuY3Rpb24gc3RvcFN1Ym1pdChmb3JtLCBlcnJvcnMpIHtcXG4gIHZhciBhY3Rpb24gPSB7XFxuICAgIHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RPUF9TVUJNSVRcXFwiXSxcXG4gICAgbWV0YTogeyBmb3JtOiBmb3JtIH0sXFxuICAgIHBheWxvYWQ6IGVycm9yc1xcbiAgfTtcXG4gIGlmIChlcnJvcnMgJiYgT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgYWN0aW9uLmVycm9yID0gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgc3VibWl0ID0gZnVuY3Rpb24gc3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc2V0U3VibWl0RmFpbGVkID0gZnVuY3Rpb24gc2V0U3VibWl0RmFpbGVkKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xcbiAgICBmaWVsZHNbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNFVF9TVUJNSVRfRkFJTEVEXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSwgZXJyb3I6IHRydWUgfTtcXG59O1xcblxcbnZhciBzZXRTdWJtaXRTdWNjZWVkZWQgPSBmdW5jdGlvbiBzZXRTdWJtaXRTdWNjZWVkZWQoZm9ybSkge1xcbiAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBmaWVsZHMgPSBBcnJheShfbGVuMyA+IDEgPyBfbGVuMyAtIDEgOiAwKSwgX2tleTMgPSAxOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XFxuICAgIGZpZWxkc1tfa2V5MyAtIDFdID0gYXJndW1lbnRzW19rZXkzXTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZHM6IGZpZWxkcyB9LCBlcnJvcjogZmFsc2UgfTtcXG59O1xcblxcbnZhciB0b3VjaCA9IGZ1bmN0aW9uIHRvdWNoKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjQgPiAxID8gX2xlbjQgLSAxIDogMCksIF9rZXk0ID0gMTsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xcbiAgICBmaWVsZHNbX2tleTQgLSAxXSA9IGFyZ3VtZW50c1tfa2V5NF07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlRPVUNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSB9O1xcbn07XFxuXFxudmFyIHVucmVnaXN0ZXJGaWVsZCA9IGZ1bmN0aW9uIHVucmVnaXN0ZXJGaWVsZChmb3JtLCBuYW1lKSB7XFxuICB2YXIgZGVzdHJveU9uVW5tb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVU5SRUdJU1RFUl9GSUVMRFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSwgcGF5bG9hZDogeyBuYW1lOiBuYW1lLCBkZXN0cm95T25Vbm1vdW50OiBkZXN0cm95T25Vbm1vdW50IH0gfTtcXG59O1xcblxcbnZhciB1bnRvdWNoID0gZnVuY3Rpb24gdW50b3VjaChmb3JtKSB7XFxuICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGZpZWxkcyA9IEFycmF5KF9sZW41ID4gMSA/IF9sZW41IC0gMSA6IDApLCBfa2V5NSA9IDE7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcXG4gICAgZmllbGRzW19rZXk1IC0gMV0gPSBhcmd1bWVudHNbX2tleTVdO1xcbiAgfVxcblxcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlRPVUNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSB9O1xcbn07XFxuXFxudmFyIHVwZGF0ZVN5bmNFcnJvcnMgPSBmdW5jdGlvbiB1cGRhdGVTeW5jRXJyb3JzKGZvcm0pIHtcXG4gIHZhciBzeW5jRXJyb3JzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcXG4gIHZhciBlcnJvciA9IGFyZ3VtZW50c1syXTtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVVBEQVRFX1NZTkNfRVJST1JTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IHN5bmNFcnJvcnM6IHN5bmNFcnJvcnMsIGVycm9yOiBlcnJvciB9IH07XFxufTtcXG5cXG52YXIgdXBkYXRlU3luY1dhcm5pbmdzID0gZnVuY3Rpb24gdXBkYXRlU3luY1dhcm5pbmdzKGZvcm0pIHtcXG4gIHZhciBzeW5jV2FybmluZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcbiAgdmFyIHdhcm5pbmcgPSBhcmd1bWVudHNbMl07XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX1dBUk5JTkdTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IHN5bmNXYXJuaW5nczogc3luY1dhcm5pbmdzLCB3YXJuaW5nOiB3YXJuaW5nIH0gfTtcXG59O1xcblxcbi8qKiovIH0pLFxcbi8qIDc5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2VzNl9lcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTQpO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxudmFyIFN1Ym1pc3Npb25FcnJvciA9IGZ1bmN0aW9uIChfRXh0ZW5kYWJsZUVycm9yKSB7XFxuICBfaW5oZXJpdHMoU3VibWlzc2lvbkVycm9yLCBfRXh0ZW5kYWJsZUVycm9yKTtcXG5cXG4gIGZ1bmN0aW9uIFN1Ym1pc3Npb25FcnJvcihlcnJvcnMpIHtcXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN1Ym1pc3Npb25FcnJvcik7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChTdWJtaXNzaW9uRXJyb3IuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihTdWJtaXNzaW9uRXJyb3IpKS5jYWxsKHRoaXMsICdTdWJtaXQgVmFsaWRhdGlvbiBGYWlsZWQnKSk7XFxuXFxuICAgIF90aGlzLmVycm9ycyA9IGVycm9ycztcXG4gICAgcmV0dXJuIF90aGlzO1xcbiAgfVxcblxcbiAgcmV0dXJuIFN1Ym1pc3Npb25FcnJvcjtcXG59KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9lczZfZXJyb3JfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFN1Ym1pc3Npb25FcnJvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogODAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODEpO1xcblxcblxcbnZhciBzaWxlbmNlRXZlbnQgPSBmdW5jdGlvbiBzaWxlbmNlRXZlbnQoZXZlbnQpIHtcXG4gIHZhciBpcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50KTtcXG4gIGlmIChpcykge1xcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xcbiAgfVxcbiAgcmV0dXJuIGlzO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2lsZW5jZUV2ZW50KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGlzRXZlbnQgPSBmdW5jdGlvbiBpc0V2ZW50KGNhbmRpZGF0ZSkge1xcbiAgcmV0dXJuICEhKGNhbmRpZGF0ZSAmJiBjYW5kaWRhdGUuc3RvcFByb3BhZ2F0aW9uICYmIGNhbmRpZGF0ZS5wcmV2ZW50RGVmYXVsdCk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0V2ZW50KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcblxcblxcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNFcXVhbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcXG4gKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgY29tcGFyaXNvbnNcXG4gKiBhcmUgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoIHVwIHRvXFxuICogc2l4IGFyZ3VtZW50czogKG9ialZhbHVlLCBvdGhWYWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrXSkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XFxuICogICByZXR1cm4gL15oKD86aXxlbGxvKSQvLnRlc3QodmFsdWUpO1xcbiAqIH1cXG4gKlxcbiAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlKSB7XFxuICogICBpZiAoaXNHcmVldGluZyhvYmpWYWx1ZSkgJiYgaXNHcmVldGluZyhvdGhWYWx1ZSkpIHtcXG4gKiAgICAgcmV0dXJuIHRydWU7XFxuICogICB9XFxuICogfVxcbiAqXFxuICogdmFyIGFycmF5ID0gWydoZWxsbycsICdnb29kYnllJ107XFxuICogdmFyIG90aGVyID0gWydoaScsICdnb29kYnllJ107XFxuICpcXG4gKiBfLmlzRXF1YWxXaXRoKGFycmF5LCBvdGhlciwgY3VzdG9taXplcik7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlzRXF1YWxXaXRoKHZhbHVlLCBvdGhlciwgY3VzdG9taXplcikge1xcbiAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xcbiAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBvdGhlcikgOiB1bmRlZmluZWQ7XFxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG90aGVyLCB1bmRlZmluZWQsIGN1c3RvbWl6ZXIpIDogISFyZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzRXF1YWxXaXRoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxudmFyIHByb2Nlc3NQcm9wcyA9IGZ1bmN0aW9uIHByb2Nlc3NQcm9wcyh0eXBlLCBwcm9wcywgX3ZhbHVlKSB7XFxuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcXG5cXG4gIGlmICh0eXBlID09PSAnY2hlY2tib3gnKSB7XFxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcXG4gICAgICBjaGVja2VkOiAhIXZhbHVlXFxuICAgIH0pO1xcbiAgfVxcbiAgaWYgKHR5cGUgPT09ICdyYWRpbycpIHtcXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBwcm9wcywge1xcbiAgICAgIGNoZWNrZWQ6IHZhbHVlID09PSBfdmFsdWUsXFxuICAgICAgdmFsdWU6IF92YWx1ZVxcbiAgICB9KTtcXG4gIH1cXG4gIGlmICh0eXBlID09PSAnc2VsZWN0LW11bHRpcGxlJykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgdmFsdWU6IHZhbHVlIHx8IFtdXFxuICAgIH0pO1xcbiAgfVxcbiAgaWYgKHR5cGUgPT09ICdmaWxlJykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgdmFsdWU6IHZhbHVlIHx8IHVuZGVmaW5lZFxcbiAgICB9KTtcXG4gIH1cXG4gIHJldHVybiBwcm9wcztcXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZFByb3BzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRQcm9wcyhfcmVmMiwgbmFtZSwgX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZjIuZ2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYyLnRvSlM7XFxuXFxuICB2YXIgYXN5bmNFcnJvciA9IF9yZWYuYXN5bmNFcnJvcixcXG4gICAgICBhc3luY1ZhbGlkYXRpbmcgPSBfcmVmLmFzeW5jVmFsaWRhdGluZyxcXG4gICAgICBvbkJsdXIgPSBfcmVmLm9uQmx1cixcXG4gICAgICBvbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXFxuICAgICAgb25Ecm9wID0gX3JlZi5vbkRyb3AsXFxuICAgICAgb25EcmFnU3RhcnQgPSBfcmVmLm9uRHJhZ1N0YXJ0LFxcbiAgICAgIGRpcnR5ID0gX3JlZi5kaXJ0eSxcXG4gICAgICBkaXNwYXRjaCA9IF9yZWYuZGlzcGF0Y2gsXFxuICAgICAgb25Gb2N1cyA9IF9yZWYub25Gb2N1cyxcXG4gICAgICBmb3JtID0gX3JlZi5mb3JtLFxcbiAgICAgIGZvcm1hdCA9IF9yZWYuZm9ybWF0LFxcbiAgICAgIHBhcnNlID0gX3JlZi5wYXJzZSxcXG4gICAgICBwcmlzdGluZSA9IF9yZWYucHJpc3RpbmUsXFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcXG4gICAgICBzdWJtaXRFcnJvciA9IF9yZWYuc3VibWl0RXJyb3IsXFxuICAgICAgc3VibWl0RmFpbGVkID0gX3JlZi5zdWJtaXRGYWlsZWQsXFxuICAgICAgc3VibWl0dGluZyA9IF9yZWYuc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3IgPSBfcmVmLnN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZyA9IF9yZWYuc3luY1dhcm5pbmcsXFxuICAgICAgdmFsaWRhdGUgPSBfcmVmLnZhbGlkYXRlLFxcbiAgICAgIHZhbHVlID0gX3JlZi52YWx1ZSxcXG4gICAgICBfdmFsdWUgPSBfcmVmLl92YWx1ZSxcXG4gICAgICB3YXJuID0gX3JlZi53YXJuLFxcbiAgICAgIGN1c3RvbSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2FzeW5jRXJyb3InLCAnYXN5bmNWYWxpZGF0aW5nJywgJ29uQmx1cicsICdvbkNoYW5nZScsICdvbkRyb3AnLCAnb25EcmFnU3RhcnQnLCAnZGlydHknLCAnZGlzcGF0Y2gnLCAnb25Gb2N1cycsICdmb3JtJywgJ2Zvcm1hdCcsICdwYXJzZScsICdwcmlzdGluZScsICdwcm9wcycsICdzdGF0ZScsICdzdWJtaXRFcnJvcicsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0dGluZycsICdzeW5jRXJyb3InLCAnc3luY1dhcm5pbmcnLCAndmFsaWRhdGUnLCAndmFsdWUnLCAnX3ZhbHVlJywgJ3dhcm4nXSk7XFxuXFxuICB2YXIgZXJyb3IgPSBzeW5jRXJyb3IgfHwgYXN5bmNFcnJvciB8fCBzdWJtaXRFcnJvcjtcXG4gIHZhciB3YXJuaW5nID0gc3luY1dhcm5pbmc7XFxuXFxuICB2YXIgZm9ybWF0RmllbGRWYWx1ZSA9IGZ1bmN0aW9uIGZvcm1hdEZpZWxkVmFsdWUodmFsdWUsIGZvcm1hdCkge1xcbiAgICBpZiAoZm9ybWF0ID09PSBudWxsKSB7XFxuICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICB9XFxuICAgIHZhciBkZWZhdWx0Rm9ybWF0dGVkVmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcXG4gICAgcmV0dXJuIGZvcm1hdCA/IGZvcm1hdCh2YWx1ZSwgbmFtZSkgOiBkZWZhdWx0Rm9ybWF0dGVkVmFsdWU7XFxuICB9O1xcblxcbiAgdmFyIGZvcm1hdHRlZEZpZWxkVmFsdWUgPSBmb3JtYXRGaWVsZFZhbHVlKHZhbHVlLCBmb3JtYXQpO1xcblxcbiAgcmV0dXJuIHtcXG4gICAgaW5wdXQ6IHByb2Nlc3NQcm9wcyhjdXN0b20udHlwZSwge1xcbiAgICAgIG5hbWU6IG5hbWUsXFxuICAgICAgb25CbHVyOiBvbkJsdXIsXFxuICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxcbiAgICAgIG9uRHJhZ1N0YXJ0OiBvbkRyYWdTdGFydCxcXG4gICAgICBvbkRyb3A6IG9uRHJvcCxcXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzLFxcbiAgICAgIHZhbHVlOiBmb3JtYXR0ZWRGaWVsZFZhbHVlXFxuICAgIH0sIF92YWx1ZSksXFxuICAgIG1ldGE6IF9leHRlbmRzKHt9LCB0b0pTKHN0YXRlKSwge1xcbiAgICAgIGFjdGl2ZTogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICdhY3RpdmUnKSksXFxuICAgICAgYXN5bmNWYWxpZGF0aW5nOiBhc3luY1ZhbGlkYXRpbmcsXFxuICAgICAgYXV0b2ZpbGxlZDogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICdhdXRvZmlsbGVkJykpLFxcbiAgICAgIGRpcnR5OiBkaXJ0eSxcXG4gICAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXFxuICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgIGZvcm06IGZvcm0sXFxuICAgICAgd2FybmluZzogd2FybmluZyxcXG4gICAgICBpbnZhbGlkOiAhIWVycm9yLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdWJtaXR0aW5nOiAhIXN1Ym1pdHRpbmcsXFxuICAgICAgc3VibWl0RmFpbGVkOiAhIXN1Ym1pdEZhaWxlZCxcXG4gICAgICB0b3VjaGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3RvdWNoZWQnKSksXFxuICAgICAgdmFsaWQ6ICFlcnJvcixcXG4gICAgICB2aXNpdGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3Zpc2l0ZWQnKSlcXG4gICAgfSksXFxuICAgIGN1c3RvbTogX2V4dGVuZHMoe30sIGN1c3RvbSwgcHJvcHMpXFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRQcm9wcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogODQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldFZhbHVlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNSZWFjdE5hdGl2ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzApO1xcblxcblxcblxcbnZhciBvbkNoYW5nZVZhbHVlID0gZnVuY3Rpb24gb25DaGFuZ2VWYWx1ZShldmVudCwgX3JlZikge1xcbiAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxcbiAgICAgIG5vcm1hbGl6ZSA9IF9yZWYubm9ybWFsaXplO1xcblxcbiAgLy8gcmVhZCB2YWx1ZSBmcm9tIGlucHV0XFxuICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNSZWFjdE5hdGl2ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuICAvLyBwYXJzZSB2YWx1ZSBpZiB3ZSBoYXZlIGEgcGFyc2VyXFxuICBpZiAocGFyc2UpIHtcXG4gICAgdmFsdWUgPSBwYXJzZSh2YWx1ZSwgbmFtZSk7XFxuICB9XFxuXFxuICAvLyBub3JtYWxpemUgdmFsdWVcXG4gIGlmIChub3JtYWxpemUpIHtcXG4gICAgdmFsdWUgPSBub3JtYWxpemUobmFtZSwgdmFsdWUpO1xcbiAgfVxcblxcbiAgcmV0dXJuIHZhbHVlO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob25DaGFuZ2VWYWx1ZSk7XFxuXFxuLyoqKi8gfSksXFxuLyogODUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVJc1ByaXN0aW5lID0gZnVuY3Rpb24gY3JlYXRlSXNQcmlzdGluZShfcmVmKSB7XFxuICB2YXIgZGVlcEVxdWFsID0gX3JlZi5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBfcmVmLmVtcHR5LFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgICB2YXIgaW5pdGlhbCA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuaW5pdGlhbCcpIHx8IGVtcHR5O1xcbiAgICAgIHZhciB2YWx1ZXMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnZhbHVlcycpIHx8IGluaXRpYWw7XFxuICAgICAgcmV0dXJuIGRlZXBFcXVhbChpbml0aWFsLCB2YWx1ZXMpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzUHJpc3RpbmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDg2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuICBJbiB0aGVcXG4vLyBicm93c2VyIHRoaXMgaXMgYSBsaXR0bGUgY29tcGxpY2F0ZWQgZHVlIHRvIHVua25vd24gcXVhbGl0eSBvZiBNYXRoLnJhbmRvbSgpXFxuLy8gYW5kIGluY29uc2lzdGVudCBzdXBwb3J0IGZvciB0aGUgYGNyeXB0b2AgQVBJLiAgV2UgZG8gdGhlIGJlc3Qgd2UgY2FuIHZpYVxcbi8vIGZlYXR1cmUtZGV0ZWN0aW9uXFxuXFxuLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFxcXCJ0aGlzXFxcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cXG52YXIgZ2V0UmFuZG9tVmFsdWVzID0gKHR5cGVvZihjcnlwdG8pICE9ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pKSB8fFxcbiAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mKG1zQ3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0bykpO1xcbmlmIChnZXRSYW5kb21WYWx1ZXMpIHtcXG4gIC8vIFdIQVRXRyBjcnlwdG8gUk5HIC0gaHR0cDovL3dpa2kud2hhdHdnLm9yZy93aWtpL0NyeXB0b1xcbiAgdmFyIHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXFxuXFxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdoYXR3Z1JORygpIHtcXG4gICAgZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcXG4gICAgcmV0dXJuIHJuZHM4O1xcbiAgfTtcXG59IGVsc2Uge1xcbiAgLy8gTWF0aC5yYW5kb20oKS1iYXNlZCAoUk5HKVxcbiAgLy9cXG4gIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB1c2UgTWF0aC5yYW5kb20oKS4gIEl0J3MgZmFzdCwgYnV0IGlzIG9mIHVuc3BlY2lmaWVkXFxuICAvLyBxdWFsaXR5LlxcbiAgdmFyIHJuZHMgPSBuZXcgQXJyYXkoMTYpO1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRoUk5HKCkge1xcbiAgICBmb3IgKHZhciBpID0gMCwgcjsgaSA8IDE2OyBpKyspIHtcXG4gICAgICBpZiAoKGkgJiAweDAzKSA9PT0gMCkgciA9IE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAwMDtcXG4gICAgICBybmRzW2ldID0gciA+Pj4gKChpICYgMHgwMykgPDwgMykgJiAweGZmO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBybmRzO1xcbiAgfTtcXG59XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogODcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuLyoqXFxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XFxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXFxuICovXFxudmFyIGJ5dGVUb0hleCA9IFtdO1xcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcXG4gIGJ5dGVUb0hleFtpXSA9IChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSk7XFxufVxcblxcbmZ1bmN0aW9uIGJ5dGVzVG9VdWlkKGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IG9mZnNldCB8fCAwO1xcbiAgdmFyIGJ0aCA9IGJ5dGVUb0hleDtcXG4gIHJldHVybiBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gKyAnLScgK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArICctJyArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGJ5dGVzVG9VdWlkO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDg4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbnZhciBSZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgSGVscCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhIZWxwLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBIZWxwKCkge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5faGVscFBvcHVwID0gSFRNTFNwYW5FbGVtZW50ID0gbnVsbDtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBIZWxwLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2ZhcyBmYS1mdyBmYS1xdWVzdGlvbi1jaXJjbGUgZGVmYXVsdC1jb2xvcicsIHRoaXMucHJvcHMuY29udGFpbmVyQ2xhc3MpLCBcXFwiZGF0YS1jb250ZW50XFxcIjogdGhpcy5wcm9wcy50ZXh0LCByZWY6IGZ1bmN0aW9uIChkb20pIHsgcmV0dXJuIF90aGlzLl9oZWxwUG9wdXAgPSBkb207IH0sIHN0eWxlOiB0aGlzLnByb3BzLnN0eWxlIH0pKTtcXG4gICAgfTtcXG4gICAgSGVscC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAkKHRoaXMuX2hlbHBQb3B1cCkucG9wb3Zlcih7XFxuICAgICAgICAgICAgY29udGFpbmVyOiAnYm9keScsXFxuICAgICAgICAgICAgdHJpZ2dlcjogJ2hvdmVyJyxcXG4gICAgICAgICAgICBodG1sOiB0cnVlXFxuICAgICAgICB9KTtcXG4gICAgfTtcXG4gICAgSGVscC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAkKHRoaXMuX2hlbHBQb3B1cCkucG9wb3ZlcignZGVzdHJveScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gSGVscDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IEhlbHA7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogODkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxudmFyIGNoYXJlbmMgPSB7XFxuICAvLyBVVEYtOCBlbmNvZGluZ1xcbiAgdXRmODoge1xcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBzdHJpbmdUb0J5dGVzOiBmdW5jdGlvbihzdHIpIHtcXG4gICAgICByZXR1cm4gY2hhcmVuYy5iaW4uc3RyaW5nVG9CeXRlcyh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSkpO1xcbiAgICB9LFxcblxcbiAgICAvLyBDb252ZXJ0IGEgYnl0ZSBhcnJheSB0byBhIHN0cmluZ1xcbiAgICBieXRlc1RvU3RyaW5nOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGNoYXJlbmMuYmluLmJ5dGVzVG9TdHJpbmcoYnl0ZXMpKSk7XFxuICAgIH1cXG4gIH0sXFxuXFxuICAvLyBCaW5hcnkgZW5jb2RpbmdcXG4gIGJpbjoge1xcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBzdHJpbmdUb0J5dGVzOiBmdW5jdGlvbihzdHIpIHtcXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcXG4gICAgICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKTtcXG4gICAgICByZXR1cm4gYnl0ZXM7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBieXRlIGFycmF5IHRvIGEgc3RyaW5nXFxuICAgIGJ5dGVzVG9TdHJpbmc6IGZ1bmN0aW9uKGJ5dGVzKSB7XFxuICAgICAgZm9yICh2YXIgc3RyID0gW10sIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspXFxuICAgICAgICBzdHIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKSk7XFxuICAgICAgcmV0dXJuIHN0ci5qb2luKCcnKTtcXG4gICAgfVxcbiAgfVxcbn07XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBjaGFyZW5jO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDkwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG52YXIgX19leHRlbmRzID0gdGhpcyAmJiB0aGlzLl9fZXh0ZW5kcyB8fCBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGQuX19wcm90b19fID0gYjtcXG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkge1xcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xcbiAgICAgICAgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0oKTtcXG52YXIgX19hc3NpZ24gPSB0aGlzICYmIHRoaXMuX19hc3NpZ24gfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcXG4gICAgICAgIHMgPSBhcmd1bWVudHNbaV07XFxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xcbiAgICB9XFxuICAgIHJldHVybiB0O1xcbn07XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciByZWR1eF9mb3JtXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcXG52YXIgcGxhdGZvcm02ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTQpO1xcbnZhciB3ZWJTdG9yYWdlID0gcGxhdGZvcm02LndlYlN0b3JhZ2U7XFxudmFyIGZvcm1zID0gcGxhdGZvcm02LmZvcm1zO1xcbnZhciB0ZXh0X2lucHV0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1NSk7XFxudmFyIHNlbGVjdF9pbnB1dF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTkpO1xcbnZhciB0b2dnbGVfcGFuZWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYwKTtcXG52YXIgaGVscGVyc18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjMpO1xcbnZhciBVdGlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcyKTtcXG52YXIgd29yZGluZ3NfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjczKTtcXG52YXIgV09SRElOR1MgPSBoZWxwZXJzXzEuZ2V0V29yZGluZ3Mod29yZGluZ3NfMS5kZWZhdWx0LCB3ZWJTdG9yYWdlLmxvY2FsZSk7XFxudmFyIEN1c3RvbUZvcm0gPSBmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhDdXN0b21Gb3JtLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBDdXN0b21Gb3JtKHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnJlbmRlclJGUURldGFpbHMgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgdmFyIHJmcSA9IF90aGlzLnByb3BzLmRhdGEucmZxO1xcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInRpbGUgY29sLXhzLTEyIGJvdHRvbS1tYXJnaW4tbGdcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRhYmxlXFxcIiwgeyBzdHlsZTogeyB3aWR0aDogJzEwMCUnLCBtaW5IZWlnaHQ6IDQwIH0gfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhlYWRcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0clxcXCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pZCksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pc3N1ZV9kYXRlKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tbGFiZWxcXFwiIH0sIFdPUkRJTkdTLmlzc3VlX3RpbWUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0aFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby1sYWJlbFxcXCIgfSwgV09SRElOR1Mubm90ZSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGJvZHlcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0clxcXCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEuaWQpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0ZFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby12YWx1ZVxcXCIsIHN0eWxlOiB7IHZlcnRpY2FsQWxpZ246ICdib3R0b20nIH0gfSwgcmZxLmlzc3VlRGF0ZSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEuaXNzdWVUaW1lKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGRcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tdmFsdWVcXFwiLCBzdHlsZTogeyB2ZXJ0aWNhbEFsaWduOiAnYm90dG9tJyB9IH0sIHJmcS5ub3RlKSkpKSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMucmVuZGVySXRlbXMgPSBmdW5jdGlvbiAoX2EpIHtcXG4gICAgICAgICAgICB2YXIgZmllbGRzID0gX2EuZmllbGRzO1xcbiAgICAgICAgICAgIHZhciB0b3RhbCA9IFV0aWxzLmRpc3BsYXlUb3RhbEFtb3VudChmaWVsZHMuZ2V0QWxsKCkpO1xcbiAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHsgdG90YWw6IHRvdGFsIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImJvdHRvbS1tYXJnaW5cXFwiLCBzdHlsZTogeyB0ZXh0QWxpZ246ICdyaWdodCcgfSB9LCBXT1JESU5HUy50b3RhbF9hbW91bnQsIFxcXCI6IFxcXCIsIHRvdGFsKSwgX3RoaXMucmVuZGVySXRlbSh7IGZpZWxkczogZmllbGRzIH0pKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5yZW5kZXJJdGVtID0gZnVuY3Rpb24gKF9hKSB7XFxuICAgICAgICAgICAgdmFyIGZpZWxkcyA9IF9hLmZpZWxkcztcXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgbnVsbCwgZmllbGRzLm1hcChmdW5jdGlvbiAobWVtYmVyLCBpbmRleCwgZmllbGRzKSB7XFxuICAgICAgICAgICAgICAgIHZhciBsaW5lID0gX3RoaXMucHJvcHMuZGF0YS5saW5lc1tpbmRleF07XFxuICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IGZpZWxkcy5nZXQoaW5kZXgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBrZXk6IGluZGV4LCBjbGFzc05hbWU6IFxcXCJib3R0b20tbWFyZ2luXFxcIiwgc3R5bGU6IHsgcGFkZGluZzogMTUsIGJvcmRlckNvbG9yOiBcXFwiI2VlZVxcXCIsIGJvcmRlcldpZHRoOiAxLCBib3JkZXJTdHlsZTogXFxcInNvbGlkXFxcIiB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicm93IGJvdHRvbS1tYXJnaW5cXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJcXFwiLCBudWxsLCBXT1JESU5HUy5saW5lLCBcXFwiICNcXFwiLCBsaW5lLmlkKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFdPUkRJTkdTLmFtb3VudCwgXFxcIjogXFxcIiwgVXRpbHMuZGlzcGxheUl0ZW1BbW91bnQoZmllbGQpKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicm93IHRleHQtbWVkaXVtIGJvdHRvbS1tYXJnaW5cXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFdPUkRJTkdTLmRlc2NyaXB0aW9uLCBcXFwiOiBcXFwiLCBsaW5lLm5vdGUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImNvbC14cy02XFxcIiB9LCBXT1JESU5HUy5xdWFudGl0eSwgXFxcIjogXFxcIiwgbGluZS5xdWFudGl0eSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvd1xcXCIgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChzZWxlY3RfaW5wdXRfMS5kZWZhdWx0LCB7IG5hbWU6IG1lbWJlciArIFxcXCIuaXRlbVxcXCIsIGxhYmVsOiBXT1JESU5HUy5zZWxlY3RfaXRlbSwgY29udGFpbmVyQ2xhc3M6IFxcXCJjb2wteHMtMTJcXFwiLCBvcHRpb25zOiBVdGlscy5mb3JtYXRJdGVtc09wdGlvbnMobGluZS5pdGVtcykgfSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvd1xcXCIgfSwgUmVhY3QuY3JlYXRlRWxlbWVudCh0ZXh0X2lucHV0XzEuZGVmYXVsdCwgeyBuYW1lOiBtZW1iZXIgKyBcXFwiLmRpc2NvdW50XFxcIiwgbGFiZWw6IFdPUkRJTkdTLmRpc2NvdW50LCBjb250YWluZXJDbGFzczogXFxcImNvbC14cy0xMlxcXCIsIHR5cGU6IFxcXCJudW1iZXJcXFwiIH0pKSk7XFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN1Ym1pdEZvcm0gPSBmdW5jdGlvbiAodmFsdWVzKSB7XFxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gX19hc3NpZ24oe30sIHZhbHVlcywgeyB0b3RhbDogX3RoaXMuc3RhdGUudG90YWwgfSk7XFxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xcbiAgICAgICAgICAgIF90aGlzLnByb3BzLnN1Ym1pdEZvcm0oe1xcbiAgICAgICAgICAgICAgICByZnE6IEpTT04uc3RyaW5naWZ5KHZhbHVlcy5yZnEpLFxcbiAgICAgICAgICAgICAgICBsaW5lczogSlNPTi5zdHJpbmdpZnkodmFsdWVzLmxpbmVzKVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0geyB0b3RhbDogJycgfTtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBDdXN0b21Gb3JtLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodG9nZ2xlX3BhbmVsXzEuZGVmYXVsdCwgeyBwYW5lbFRpdGxlOiBcXFwiUHJvdmlkZSBRdW90ZVxcXCIsIGhpZGVUaXRsZTogZmFsc2UsIGRlZmF1bHRPcGVuZWQ6IHRydWUsIHRvZ2dsYWJsZTogZmFsc2UsIGNhbmNlbEJ0bjogeyBsYWJlbDogV09SRElOR1MuY2FuY2VsLCBhY3Rpb246IHByb3BzLmNsb3NlRm9ybSB9LCBzdWJtaXRCdG46IHsgbGFiZWw6IFdPUkRJTkdTLnN1Ym1pdCwgYWN0aW9uOiBwcm9wcy5oYW5kbGVTdWJtaXQodGhpcy5zdWJtaXRGb3JtKSB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImg0XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJ1cHBlciBib3R0b20tbWFyZ2luXFxcIiB9LCBXT1JESU5HUy5yZnFfaW5mbyksIHRoaXMucmVuZGVyUkZRRGV0YWlscygpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJoNFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidXBwZXIgYm90dG9tLW1hcmdpblxcXCIgfSwgV09SRElOR1MubGlzdF9pdGVtcyksIFJlYWN0LmNyZWF0ZUVsZW1lbnQocmVkdXhfZm9ybV8xLkZpZWxkQXJyYXksIHsgbmFtZTogXFxcImxpbmVzXFxcIiwgY29tcG9uZW50OiB0aGlzLnJlbmRlckl0ZW1zIH0pKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIEN1c3RvbUZvcm07XFxufShSZWFjdC5Db21wb25lbnQpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IGZvcm1zLnJlZHV4Rm9ybSh7IGZvcm06ICdjdXN0b21fZm9ybScgfSkoQ3VzdG9tRm9ybSk7XFxuXFxuLyoqKi8gfSksXFxuLyogOTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3JlZHVjZXJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3JlZHV4Rm9ybV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0ZpZWxkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fRmllbGRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fRmllbGRBcnJheV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Zvcm1WYWx1ZVNlbGVjdG9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fc2VsZWN0b3JzX2dldEZvcm1OYW1lc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX3NlbGVjdG9yc19nZXRGb3JtVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fc2VsZWN0b3JzX2dldEZvcm1Jbml0aWFsVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX3NlbGVjdG9yc19nZXRGb3JtU3luY0Vycm9yc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19zZWxlY3RvcnNfZ2V0Rm9ybUFzeW5jRXJyb3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX3NlbGVjdG9yc19nZXRGb3JtU3luY1dhcm5pbmdzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NlbGVjdG9yc19nZXRGb3JtU3VibWl0RXJyb3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX3NlbGVjdG9yc19pc0RpcnR5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3NlbGVjdG9yc19pc0ludmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fc2VsZWN0b3JzX2lzUHJpc3RpbmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX3NlbGVjdG9yc19pc1N1Ym1pdHRpbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fc2VsZWN0b3JzX2hhc1N1Ym1pdFN1Y2NlZWRlZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19zZWxlY3RvcnNfaGFzU3VibWl0RmFpbGVkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX0Zvcm1fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fRm9ybVNlY3Rpb25fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fU3VibWlzc2lvbkVycm9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fcHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX2FjdGlvbnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X19hY3Rpb25UeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgY3JlYXRlQWxsID0gZnVuY3Rpb24gY3JlYXRlQWxsKHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIF9leHRlbmRzKHtcXG4gICAgLy8gc2VwYXJhdGUgb3V0IGZpZWxkIGFjdGlvbnNcXG4gICAgYWN0aW9uVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjZfX2FjdGlvblR5cGVzX19cXG4gIH0sIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX2FjdGlvbnNfXywge1xcbiAgICBGaWVsZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fRmllbGRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIEZpZWxkczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fRmllbGRzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGaWVsZEFycmF5OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19GaWVsZEFycmF5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19Gb3JtX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICBGb3JtU2VjdGlvbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fRm9ybVNlY3Rpb25fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgIGZvcm1WYWx1ZVNlbGVjdG9yOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19mb3JtVmFsdWVTZWxlY3Rvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybU5hbWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19zZWxlY3RvcnNfZ2V0Rm9ybU5hbWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBnZXRGb3JtVmFsdWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19zZWxlY3RvcnNfZ2V0Rm9ybVZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybUluaXRpYWxWYWx1ZXM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX3NlbGVjdG9yc19nZXRGb3JtSW5pdGlhbFZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVN5bmNFcnJvcnM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNFcnJvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1Bc3luY0Vycm9yczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX3NlbGVjdG9yc19nZXRGb3JtQXN5bmNFcnJvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1TeW5jV2FybmluZ3M6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNXYXJuaW5nc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVN1Ym1pdEVycm9yczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NlbGVjdG9yc19nZXRGb3JtU3VibWl0RXJyb3JzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc0RpcnR5OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fc2VsZWN0b3JzX2lzRGlydHlfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzSW52YWxpZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3NlbGVjdG9yc19pc0ludmFsaWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzUHJpc3RpbmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19zZWxlY3RvcnNfaXNQcmlzdGluZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgaXNWYWxpZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX3NlbGVjdG9yc19pc1ZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc1N1Ym1pdHRpbmc6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19zZWxlY3RvcnNfaXNTdWJtaXR0aW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBoYXNTdWJtaXRTdWNjZWVkZWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19zZWxlY3RvcnNfaGFzU3VibWl0U3VjY2VlZGVkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBoYXNTdWJtaXRGYWlsZWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19zZWxlY3RvcnNfaGFzU3VibWl0RmFpbGVkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBwcm9wVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX3Byb3BUeXBlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgcmVkdXhGb3JtOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yZWR1eEZvcm1fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIHJlZHVjZXI6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3JlZHVjZXJfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIFN1Ym1pc3Npb25FcnJvcjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fU3VibWlzc2lvbkVycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICB2YWx1ZXM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3ZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKVxcbiAgfSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVBbGwpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVsZXRlSW5XaXRoQ2xlYW5VcF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Myk7XFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZVJlZHVjZXIgPSBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyKHN0cnVjdHVyZSkge1xcbiAgdmFyIF9iZWhhdmlvcnM7XFxuXFxuICB2YXIgZGVlcEVxdWFsID0gc3RydWN0dXJlLmRlZXBFcXVhbCxcXG4gICAgICBlbXB0eSA9IHN0cnVjdHVyZS5lbXB0eSxcXG4gICAgICBnZXRJbiA9IHN0cnVjdHVyZS5nZXRJbixcXG4gICAgICBzZXRJbiA9IHN0cnVjdHVyZS5zZXRJbixcXG4gICAgICBkZWxldGVJbiA9IHN0cnVjdHVyZS5kZWxldGVJbixcXG4gICAgICBmcm9tSlMgPSBzdHJ1Y3R1cmUuZnJvbUpTLFxcbiAgICAgIGtleXMgPSBzdHJ1Y3R1cmUua2V5cyxcXG4gICAgICBzaXplID0gc3RydWN0dXJlLnNpemUsXFxuICAgICAgc3BsaWNlID0gc3RydWN0dXJlLnNwbGljZTtcXG5cXG4gIHZhciBkZWxldGVJbldpdGhDbGVhblVwID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVsZXRlSW5XaXRoQ2xlYW5VcF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHZhciBkb1NwbGljZSA9IGZ1bmN0aW9uIGRvU3BsaWNlKHN0YXRlLCBrZXksIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB2YWx1ZSwgZm9yY2UpIHtcXG4gICAgdmFyIGV4aXN0aW5nID0gZ2V0SW4oc3RhdGUsIGtleSArICcuJyArIGZpZWxkKTtcXG4gICAgcmV0dXJuIGV4aXN0aW5nIHx8IGZvcmNlID8gc2V0SW4oc3RhdGUsIGtleSArICcuJyArIGZpZWxkLCBzcGxpY2UoZXhpc3RpbmcsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSkgOiBzdGF0ZTtcXG4gIH07XFxuICB2YXIgcm9vdEtleXMgPSBbJ3ZhbHVlcycsICdmaWVsZHMnLCAnc3VibWl0RXJyb3JzJywgJ2FzeW5jRXJyb3JzJ107XFxuICB2YXIgYXJyYXlTcGxpY2UgPSBmdW5jdGlvbiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIG5vblZhbHVlc1ZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IGVtcHR5IDogdW5kZWZpbmVkO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICd2YWx1ZXMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUsIHRydWUpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdmaWVsZHMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgbm9uVmFsdWVzVmFsdWUpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdzeW5jRXJyb3JzJywgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHVuZGVmaW5lZCk7XFxuICAgIHJlc3VsdCA9IGRvU3BsaWNlKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdhc3luY0Vycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG5cXG4gIHZhciBiZWhhdmlvcnMgPSAoX2JlaGF2aW9ycyA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9JTlNFUlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmKSB7XFxuICAgIHZhciBfcmVmJG1ldGEgPSBfcmVmLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZiRtZXRhLmluZGV4LFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYucGF5bG9hZDtcXG5cXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgaW5kZXgsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX01PVkVcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMikge1xcbiAgICB2YXIgX3JlZjIkbWV0YSA9IF9yZWYyLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYyJG1ldGEuZmllbGQsXFxuICAgICAgICBmcm9tID0gX3JlZjIkbWV0YS5mcm9tLFxcbiAgICAgICAgdG8gPSBfcmVmMiRtZXRhLnRvO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgaWYgKGxlbmd0aCkge1xcbiAgICAgIHJvb3RLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgdmFyIHBhdGggPSBrZXkgKyAnLicgKyBmaWVsZDtcXG4gICAgICAgIGlmIChnZXRJbihyZXN1bHQsIHBhdGgpKSB7XFxuICAgICAgICAgIHZhciB2YWx1ZSA9IGdldEluKHJlc3VsdCwgcGF0aCArICdbJyArIGZyb20gKyAnXScpO1xcbiAgICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIHBhdGgsIHNwbGljZShnZXRJbihyZXN1bHQsIHBhdGgpLCBmcm9tLCAxKSk7IC8vIHJlbW92ZVxcbiAgICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIHBhdGgsIHNwbGljZShnZXRJbihyZXN1bHQsIHBhdGgpLCB0bywgMCwgdmFsdWUpKTsgLy8gaW5zZXJ0XFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QT1BcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMykge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmMy5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHJldHVybiBsZW5ndGggPyBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGxlbmd0aCAtIDEsIDEpIDogc3RhdGU7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUFVTSFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY0KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWY0Lm1ldGEuZmllbGQsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjQucGF5bG9hZDtcXG5cXG4gICAgdmFyIGFycmF5ID0gZ2V0SW4oc3RhdGUsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gc2l6ZShhcnJheSkgOiAwO1xcbiAgICByZXR1cm4gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCBsZW5ndGgsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY1KSB7XFxuICAgIHZhciBfcmVmNSRtZXRhID0gX3JlZjUubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjUkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZjUkbWV0YS5pbmRleDtcXG5cXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgaW5kZXgsIDEpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRV9BTExcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmNikge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmNi5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHJldHVybiBsZW5ndGggPyBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIGxlbmd0aCkgOiBzdGF0ZTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9TSElGVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY3KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWY3Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIDEpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NQTElDRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY4KSB7XFxuICAgIHZhciBfcmVmOCRtZXRhID0gX3JlZjgubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjgkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZjgkbWV0YS5pbmRleCxcXG4gICAgICAgIHJlbW92ZU51bSA9IF9yZWY4JG1ldGEucmVtb3ZlTnVtLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWY4LnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NXQVBcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmOSkge1xcbiAgICB2YXIgX3JlZjkkbWV0YSA9IF9yZWY5Lm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWY5JG1ldGEuZmllbGQsXFxuICAgICAgICBpbmRleEEgPSBfcmVmOSRtZXRhLmluZGV4QSxcXG4gICAgICAgIGluZGV4QiA9IF9yZWY5JG1ldGEuaW5kZXhCO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJvb3RLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHZhciB2YWx1ZUEgPSBnZXRJbihyZXN1bHQsIGtleSArICcuJyArIGZpZWxkICsgJ1snICsgaW5kZXhBICsgJ10nKTtcXG4gICAgICB2YXIgdmFsdWVCID0gZ2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QiArICddJyk7XFxuICAgICAgaWYgKHZhbHVlQSAhPT0gdW5kZWZpbmVkIHx8IHZhbHVlQiAhPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIGtleSArICcuJyArIGZpZWxkICsgJ1snICsgaW5kZXhBICsgJ10nLCB2YWx1ZUIpO1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QiArICddJywgdmFsdWVBKTtcXG4gICAgICB9XFxuICAgIH0pO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1VOU0hJRlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTApIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjEwLm1ldGEuZmllbGQsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEwLnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFVVE9GSUxMXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjExKSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWYxMS5tZXRhLmZpZWxkLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYxMS5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnYXN5bmNFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdzdWJtaXRFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcuYXV0b2ZpbGxlZCcsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICd2YWx1ZXMuJyArIGZpZWxkLCBwYXlsb2FkKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJCTFVSXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjEyKSB7XFxuICAgIHZhciBfcmVmMTIkbWV0YSA9IF9yZWYxMi5tZXRhLFxcbiAgICAgICAgZmllbGQgPSBfcmVmMTIkbWV0YS5maWVsZCxcXG4gICAgICAgIHRvdWNoID0gX3JlZjEyJG1ldGEudG91Y2gsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEyLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGluaXRpYWwgPSBnZXRJbihyZXN1bHQsICdpbml0aWFsLicgKyBmaWVsZCk7XFxuICAgIGlmIChpbml0aWFsID09PSB1bmRlZmluZWQgJiYgcGF5bG9hZCA9PT0gJycpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB9IGVsc2UgaWYgKHBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQsIHBheWxvYWQpO1xcbiAgICB9XFxuICAgIGlmIChmaWVsZCA9PT0gZ2V0SW4ocmVzdWx0LCAnYWN0aXZlJykpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdhY3RpdmUnKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy5hY3RpdmUnKTtcXG4gICAgaWYgKHRvdWNoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcsIHRydWUpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNIQU5HRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxMykge1xcbiAgICB2YXIgX3JlZjEzJG1ldGEgPSBfcmVmMTMubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjEzJG1ldGEuZmllbGQsXFxuICAgICAgICB0b3VjaCA9IF9yZWYxMyRtZXRhLnRvdWNoLFxcbiAgICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9ycyA9IF9yZWYxMyRtZXRhLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEzLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGluaXRpYWwgPSBnZXRJbihyZXN1bHQsICdpbml0aWFsLicgKyBmaWVsZCk7XFxuICAgIGlmIChpbml0aWFsID09PSB1bmRlZmluZWQgJiYgcGF5bG9hZCA9PT0gJycpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB9IGVsc2UgaWYgKHBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQsIHBheWxvYWQpO1xcbiAgICB9XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnYXN5bmNFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgaWYgKCFwZXJzaXN0ZW50U3VibWl0RXJyb3JzKSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdzdWJtaXRFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmF1dG9maWxsZWQnKTtcXG4gICAgaWYgKHRvdWNoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcsIHRydWUpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIGRlbGV0ZUluKHN0YXRlLCAndHJpZ2dlclN1Ym1pdCcpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHN0YXRlLCAnc3VibWl0RXJyb3JzJyk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfQVNZTkNfRVJST1JcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTQpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE0Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBkZWxldGVJbihzdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBmaWVsZCk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiRk9DVVNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTUpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE1Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIHByZXZpb3VzbHlBY3RpdmUgPSBnZXRJbihzdGF0ZSwgJ2FjdGl2ZScpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdmaWVsZHMuJyArIHByZXZpb3VzbHlBY3RpdmUgKyAnLmFjdGl2ZScpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy52aXNpdGVkJywgdHJ1ZSk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmFjdGl2ZScsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdhY3RpdmUnLCBmaWVsZCk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiSU5JVElBTElaRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxNikge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYxNi5wYXlsb2FkLFxcbiAgICAgICAgX3JlZjE2JG1ldGEgPSBfcmVmMTYubWV0YSxcXG4gICAgICAgIGtlZXBEaXJ0eSA9IF9yZWYxNiRtZXRhLmtlZXBEaXJ0eSxcXG4gICAgICAgIGtlZXBTdWJtaXRTdWNjZWVkZWQgPSBfcmVmMTYkbWV0YS5rZWVwU3VibWl0U3VjY2VlZGVkO1xcblxcbiAgICB2YXIgbWFwRGF0YSA9IGZyb21KUyhwYXlsb2FkKTtcXG4gICAgdmFyIHJlc3VsdCA9IGVtcHR5OyAvLyBjbGVhbiBhbGwgZmllbGQgc3RhdGVcXG5cXG4gICAgLy8gcGVyc2lzdCBvbGQgd2FybmluZ3MsIHRoZXkgd2lsbCBnZXQgcmVjYWxjdWxhdGVkIGlmIHRoZSBuZXcgZm9ybSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgdmFsdWVzXFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3RhdGUsICd3YXJuaW5nJyk7XFxuICAgIGlmICh3YXJuaW5nKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnd2FybmluZycsIHdhcm5pbmcpO1xcbiAgICB9XFxuICAgIHZhciBzeW5jV2FybmluZ3MgPSBnZXRJbihzdGF0ZSwgJ3N5bmNXYXJuaW5ncycpO1xcbiAgICBpZiAoc3luY1dhcm5pbmdzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJywgc3luY1dhcm5pbmdzKTtcXG4gICAgfVxcblxcbiAgICAvLyBwZXJzaXN0IG9sZCBlcnJvcnMsIHRoZXkgd2lsbCBnZXQgcmVjYWxjdWxhdGVkIGlmIHRoZSBuZXcgZm9ybSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgdmFsdWVzXFxuICAgIHZhciBlcnJvciA9IGdldEluKHN0YXRlLCAnZXJyb3InKTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBlcnJvcik7XFxuICAgIH1cXG4gICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihzdGF0ZSwgJ3N5bmNFcnJvcnMnKTtcXG4gICAgaWYgKHN5bmNFcnJvcnMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3JzJywgc3luY0Vycm9ycyk7XFxuICAgIH1cXG5cXG4gICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihzdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgaWYgKHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJywgcmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgIH1cXG4gICAgdmFyIG5ld1ZhbHVlcyA9IG1hcERhdGE7XFxuICAgIGlmIChrZWVwRGlydHkgJiYgcmVnaXN0ZXJlZEZpZWxkcykge1xcbiAgICAgIC8vXFxuICAgICAgLy8gS2VlcCB0aGUgdmFsdWUgb2YgZGlydHkgZmllbGRzIHdoaWxlIHVwZGF0aW5nIHRoZSB2YWx1ZSBvZlxcbiAgICAgIC8vIHByaXN0aW5lIGZpZWxkcy4gVGhpcyB3YXksIGFwcHMgY2FuIHJlaW5pdGlhbGl6ZSBmb3JtcyB3aGlsZVxcbiAgICAgIC8vIGF2b2lkaW5nIHN0b21waW5nIG9uIHVzZXIgZWRpdHMuXFxuICAgICAgLy9cXG4gICAgICAvLyBOb3RlIDE6IFRoZSBpbml0aWFsaXplIGFjdGlvbiByZXBsYWNlcyBhbGwgaW5pdGlhbCB2YWx1ZXNcXG4gICAgICAvLyByZWdhcmRsZXNzIG9mIGtlZXBEaXJ0eS5cXG4gICAgICAvL1xcbiAgICAgIC8vIE5vdGUgMjogV2hlbiBhIGZpZWxkIGlzIGRpcnR5LCBrZWVwRGlydHkgaXMgZW5hYmxlZCwgYW5kIHRoZSBmaWVsZFxcbiAgICAgIC8vIHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBuZXcgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZpZWxkLCB0aGVcXG4gICAgICAvLyBpbml0aWFsaXplIGFjdGlvbiBjYXVzZXMgdGhlIGZpZWxkIHRvIGJlY29tZSBwcmlzdGluZS4gVGhhdCBlZmZlY3RcXG4gICAgICAvLyBpcyB3aGF0IHdlIHdhbnQuXFxuICAgICAgLy9cXG4gICAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcycpO1xcbiAgICAgIHZhciBwcmV2aW91c0luaXRpYWxWYWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ2luaXRpYWwnKTtcXG4gICAgICBrZXlzKHJlZ2lzdGVyZWRGaWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgIHZhciBwcmV2aW91c0luaXRpYWxWYWx1ZSA9IGdldEluKHByZXZpb3VzSW5pdGlhbFZhbHVlcywgbmFtZSk7XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGdldEluKHByZXZpb3VzVmFsdWVzLCBuYW1lKTtcXG4gICAgICAgIGlmICghZGVlcEVxdWFsKHByZXZpb3VzVmFsdWUsIHByZXZpb3VzSW5pdGlhbFZhbHVlKSkge1xcbiAgICAgICAgICAvLyBUaGlzIGZpZWxkIHdhcyBkaXJ0eS4gUmVzdG9yZSB0aGUgZGlydHkgdmFsdWUuXFxuICAgICAgICAgIG5ld1ZhbHVlcyA9IHNldEluKG5ld1ZhbHVlcywgbmFtZSwgcHJldmlvdXNWYWx1ZSk7XFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgIH1cXG4gICAgaWYgKGtlZXBTdWJtaXRTdWNjZWVkZWQgJiYgZ2V0SW4oc3RhdGUsICdzdWJtaXRTdWNjZWVkZWQnKSkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcsIHRydWUpO1xcbiAgICB9XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcycsIG5ld1ZhbHVlcyk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2luaXRpYWwnLCBtYXBEYXRhKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJSRUdJU1RFUl9GSUVMRFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxNykge1xcbiAgICB2YXIgX3JlZjE3JHBheWxvYWQgPSBfcmVmMTcucGF5bG9hZCxcXG4gICAgICAgIG5hbWUgPSBfcmVmMTckcGF5bG9hZC5uYW1lLFxcbiAgICAgICAgdHlwZSA9IF9yZWYxNyRwYXlsb2FkLnR5cGU7XFxuXFxuICAgIHZhciBrZXkgPSAncmVnaXN0ZXJlZEZpZWxkc1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXSc7XFxuICAgIHZhciBmaWVsZCA9IGdldEluKHN0YXRlLCBrZXkpO1xcbiAgICBpZiAoZmllbGQpIHtcXG4gICAgICB2YXIgY291bnQgPSBnZXRJbihmaWVsZCwgJ2NvdW50JykgKyAxO1xcbiAgICAgIGZpZWxkID0gc2V0SW4oZmllbGQsICdjb3VudCcsIGNvdW50KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICBmaWVsZCA9IGZyb21KUyh7IG5hbWU6IG5hbWUsIHR5cGU6IHR5cGUsIGNvdW50OiAxIH0pO1xcbiAgICB9XFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwga2V5LCBmaWVsZCk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVTRVRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHZhciByZXN1bHQgPSBlbXB0eTtcXG4gICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihzdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgaWYgKHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJywgcmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgIH1cXG4gICAgdmFyIHZhbHVlcyA9IGdldEluKHN0YXRlLCAnaW5pdGlhbCcpO1xcbiAgICBpZiAodmFsdWVzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAndmFsdWVzJywgdmFsdWVzKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdpbml0aWFsJywgdmFsdWVzKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIHNldEluKHN0YXRlLCAndHJpZ2dlclN1Ym1pdCcsIHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX0FTWU5DX1ZBTElEQVRJT05cXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTgpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE4Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycsIGZpZWxkIHx8IHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIHNldEluKHN0YXRlLCAnc3VibWl0dGluZycsIHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfQVNZTkNfVkFMSURBVElPTlxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxOSkge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYxOS5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jVmFsaWRhdGluZycpO1xcbiAgICBpZiAocGF5bG9hZCAmJiBPYmplY3Qua2V5cyhwYXlsb2FkKS5sZW5ndGgpIHtcXG4gICAgICB2YXIgX2Vycm9yID0gcGF5bG9hZC5fZXJyb3IsXFxuICAgICAgICAgIGZpZWxkRXJyb3JzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHBheWxvYWQsIFsnX2Vycm9yJ10pO1xcblxcbiAgICAgIGlmIChfZXJyb3IpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2Vycm9yJywgX2Vycm9yKTtcXG4gICAgICB9XFxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpZWxkRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJywgZnJvbUpTKGZpZWxkRXJyb3JzKSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJyk7XFxuICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2Vycm9yJyk7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnYXN5bmNFcnJvcnMnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfU1VCTUlUXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIwKSB7XFxuICAgIHZhciBwYXlsb2FkID0gX3JlZjIwLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0dGluZycpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgIGlmIChwYXlsb2FkICYmIE9iamVjdC5rZXlzKHBheWxvYWQpLmxlbmd0aCkge1xcbiAgICAgIHZhciBfZXJyb3IgPSBwYXlsb2FkLl9lcnJvcixcXG4gICAgICAgICAgZmllbGRFcnJvcnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocGF5bG9hZCwgWydfZXJyb3InXSk7XFxuXFxuICAgICAgaWYgKF9lcnJvcikge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBfZXJyb3IpO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIH1cXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmllbGRFcnJvcnMpLmxlbmd0aCkge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3VibWl0RXJyb3JzJywgZnJvbUpTKGZpZWxkRXJyb3JzKSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgICAgIH1cXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnLCB0cnVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRTdWNjZWVkZWQnLCB0cnVlKTtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9GQUlMRURcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjEpIHtcXG4gICAgdmFyIGZpZWxkcyA9IF9yZWYyMS5tZXRhLmZpZWxkcztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnLCB0cnVlKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfSk7XFxuICAgIGlmIChmaWVsZHMubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnYW55VG91Y2hlZCcsIHRydWUpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0RmFpbGVkJyk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcsIHRydWUpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlRPVUNIXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIyKSB7XFxuICAgIHZhciBmaWVsZHMgPSBfcmVmMjIubWV0YS5maWVsZHM7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfSk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlJFR0lTVEVSX0ZJRUxEXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIzKSB7XFxuICAgIHZhciBfcmVmMjMkcGF5bG9hZCA9IF9yZWYyMy5wYXlsb2FkLFxcbiAgICAgICAgbmFtZSA9IF9yZWYyMyRwYXlsb2FkLm5hbWUsXFxuICAgICAgICBkZXN0cm95T25Vbm1vdW50ID0gX3JlZjIzJHBheWxvYWQuZGVzdHJveU9uVW5tb3VudDtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICB2YXIga2V5ID0gJ3JlZ2lzdGVyZWRGaWVsZHNbXFxcXCcnICsgbmFtZSArICdcXFxcJ10nO1xcbiAgICB2YXIgZmllbGQgPSBnZXRJbihyZXN1bHQsIGtleSk7XFxuICAgIGlmICghZmllbGQpIHtcXG4gICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9XFxuXFxuICAgIHZhciBjb3VudCA9IGdldEluKGZpZWxkLCAnY291bnQnKSAtIDE7XFxuICAgIGlmIChjb3VudCA8PSAwICYmIGRlc3Ryb3lPblVubW91bnQpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsIGtleSk7XFxuICAgICAgaWYgKGRlZXBFcXVhbChnZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJyksIGVtcHR5KSkge1xcbiAgICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAncmVnaXN0ZXJlZEZpZWxkcycpO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICBmaWVsZCA9IHNldEluKGZpZWxkLCAnY291bnQnLCBjb3VudCk7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXksIGZpZWxkKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVOVE9VQ0hcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjQpIHtcXG4gICAgdmFyIGZpZWxkcyA9IF9yZWYyNC5tZXRhLmZpZWxkcztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICByZXR1cm4gcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcpO1xcbiAgICB9KTtcXG4gICAgdmFyIGFueVRvdWNoZWQgPSBrZXlzKGdldEluKHJlc3VsdCwgJ3JlZ2lzdGVyZWRGaWVsZHMnKSkuc29tZShmdW5jdGlvbiAoa2V5KSB7XFxuICAgICAgcmV0dXJuIGdldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsga2V5ICsgJy50b3VjaGVkJyk7XFxuICAgIH0pO1xcbiAgICByZXN1bHQgPSBhbnlUb3VjaGVkID8gc2V0SW4ocmVzdWx0LCAnYW55VG91Y2hlZCcsIHRydWUpIDogZGVsZXRlSW4ocmVzdWx0LCAnYW55VG91Y2hlZCcpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX0VSUk9SU1xcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYyNSkge1xcbiAgICB2YXIgX3JlZjI1JHBheWxvYWQgPSBfcmVmMjUucGF5bG9hZCxcXG4gICAgICAgIHN5bmNFcnJvcnMgPSBfcmVmMjUkcGF5bG9hZC5zeW5jRXJyb3JzLFxcbiAgICAgICAgZXJyb3IgPSBfcmVmMjUkcGF5bG9hZC5lcnJvcjtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBpZiAoZXJyb3IpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdlcnJvcicsIGVycm9yKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3InLCB0cnVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N5bmNFcnJvcicpO1xcbiAgICB9XFxuICAgIGlmIChPYmplY3Qua2V5cyhzeW5jRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3JzJywgc3luY0Vycm9ycyk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3luY0Vycm9ycycpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVVBEQVRFX1NZTkNfV0FSTklOR1NcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjYpIHtcXG4gICAgdmFyIF9yZWYyNiRwYXlsb2FkID0gX3JlZjI2LnBheWxvYWQsXFxuICAgICAgICBzeW5jV2FybmluZ3MgPSBfcmVmMjYkcGF5bG9hZC5zeW5jV2FybmluZ3MsXFxuICAgICAgICB3YXJuaW5nID0gX3JlZjI2JHBheWxvYWQud2FybmluZztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBpZiAod2FybmluZykge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3dhcm5pbmcnLCB3YXJuaW5nKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICd3YXJuaW5nJyk7XFxuICAgIH1cXG4gICAgaWYgKE9iamVjdC5rZXlzKHN5bmNXYXJuaW5ncykubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJywgc3luY1dhcm5pbmdzKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzeW5jV2FybmluZ3MnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9iZWhhdmlvcnMpO1xcblxcbiAgdmFyIHJlZHVjZXIgPSBmdW5jdGlvbiByZWR1Y2VyKCkge1xcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVtcHR5O1xcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xcblxcbiAgICB2YXIgYmVoYXZpb3IgPSBiZWhhdmlvcnNbYWN0aW9uLnR5cGVdO1xcbiAgICByZXR1cm4gYmVoYXZpb3IgPyBiZWhhdmlvcihzdGF0ZSwgYWN0aW9uKSA6IHN0YXRlO1xcbiAgfTtcXG5cXG4gIHZhciBieUZvcm0gPSBmdW5jdGlvbiBieUZvcm0ocmVkdWNlcikge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICAgIHZhciBzdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZW1wdHk7XFxuICAgICAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XFxuXFxuICAgICAgdmFyIGZvcm0gPSBhY3Rpb24gJiYgYWN0aW9uLm1ldGEgJiYgYWN0aW9uLm1ldGEuZm9ybTtcXG4gICAgICBpZiAoIWZvcm0pIHtcXG4gICAgICAgIHJldHVybiBzdGF0ZTtcXG4gICAgICB9XFxuICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkRFU1RST1lcXFwiXSkge1xcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5tZXRhLmZvcm0ucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGZvcm0pIHtcXG4gICAgICAgICAgcmV0dXJuIGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCBmb3JtKTtcXG4gICAgICAgIH0sIHN0YXRlKTtcXG4gICAgICB9XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEluKHN0YXRlLCBmb3JtKTtcXG4gICAgICB2YXIgcmVzdWx0ID0gcmVkdWNlcihmb3JtU3RhdGUsIGFjdGlvbik7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gZm9ybVN0YXRlID8gc3RhdGUgOiBzZXRJbihzdGF0ZSwgZm9ybSwgcmVzdWx0KTtcXG4gICAgfTtcXG4gIH07XFxuXFxuICAvKipcXG4gICAqIEFkZHMgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IHRvIHRoZSByZWR1Y2VyXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGRlY29yYXRlKHRhcmdldCkge1xcbiAgICB0YXJnZXQucGx1Z2luID0gZnVuY3Rpb24gcGx1Z2luKHJlZHVjZXJzKSB7XFxuICAgICAgdmFyIF90aGlzID0gdGhpcztcXG5cXG4gICAgICAvLyB1c2UgJ2Z1bmN0aW9uJyBrZXl3b3JkIHRvIGVuYWJsZSAndGhpcydcXG4gICAgICByZXR1cm4gZGVjb3JhdGUoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIHN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBlbXB0eTtcXG4gICAgICAgIHZhciBhY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlZHVjZXJzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBrZXkpIHtcXG4gICAgICAgICAgdmFyIHByZXZpb3VzU3RhdGUgPSBnZXRJbihhY2N1bXVsYXRvciwga2V5KTtcXG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHJlZHVjZXJzW2tleV0ocHJldmlvdXNTdGF0ZSwgYWN0aW9uLCBnZXRJbihzdGF0ZSwga2V5KSk7XFxuICAgICAgICAgIHJldHVybiBuZXh0U3RhdGUgPT09IHByZXZpb3VzU3RhdGUgPyBhY2N1bXVsYXRvciA6IHNldEluKGFjY3VtdWxhdG9yLCBrZXksIG5leHRTdGF0ZSk7XFxuICAgICAgICB9LCBfdGhpcyhzdGF0ZSwgYWN0aW9uKSk7XFxuICAgICAgfSk7XFxuICAgIH07XFxuXFxuICAgIHJldHVybiB0YXJnZXQ7XFxuICB9XFxuXFxuICByZXR1cm4gZGVjb3JhdGUoYnlGb3JtKHJlZHVjZXIpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZVJlZHVjZXIpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xcblxcblxcblxcbnZhciBjcmVhdGVEZWxldGVJbldpdGhDbGVhblVwID0gZnVuY3Rpb24gY3JlYXRlRGVsZXRlSW5XaXRoQ2xlYW5VcChfcmVmKSB7XFxuICB2YXIgZGVlcEVxdWFsID0gX3JlZi5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBfcmVmLmVtcHR5LFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBkZWxldGVJbiA9IF9yZWYuZGVsZXRlSW4sXFxuICAgICAgc2V0SW4gPSBfcmVmLnNldEluO1xcblxcblxcbiAgdmFyIGRlbGV0ZUluV2l0aENsZWFuVXAgPSBmdW5jdGlvbiBkZWxldGVJbldpdGhDbGVhblVwKHN0YXRlLCBwYXRoKSB7XFxuICAgIGlmIChwYXRoW3BhdGgubGVuZ3RoIC0gMV0gPT09ICddJykge1xcbiAgICAgIC8vIGFycmF5IHBhdGhcXG4gICAgICB2YXIgcGF0aFRva2VucyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCk7XFxuICAgICAgcGF0aFRva2Vucy5wb3AoKTtcXG4gICAgICB2YXIgcGFyZW50ID0gZ2V0SW4oc3RhdGUsIHBhdGhUb2tlbnMuam9pbignLicpKTtcXG4gICAgICByZXR1cm4gcGFyZW50ID8gc2V0SW4oc3RhdGUsIHBhdGgsIHVuZGVmaW5lZCkgOiBzdGF0ZTtcXG4gICAgfVxcbiAgICB2YXIgcmVzdWx0ID0gZGVsZXRlSW4oc3RhdGUsIHBhdGgpO1xcbiAgICB2YXIgZG90SW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKCcuJyk7XFxuICAgIGlmIChkb3RJbmRleCA+IDApIHtcXG4gICAgICB2YXIgcGFyZW50UGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIGRvdEluZGV4KTtcXG4gICAgICBpZiAocGFyZW50UGF0aFtwYXJlbnRQYXRoLmxlbmd0aCAtIDFdICE9PSAnXScpIHtcXG4gICAgICAgIHZhciBfcGFyZW50ID0gZ2V0SW4ocmVzdWx0LCBwYXJlbnRQYXRoKTtcXG4gICAgICAgIGlmIChkZWVwRXF1YWwoX3BhcmVudCwgZW1wdHkpKSB7XFxuICAgICAgICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgcGFyZW50UGF0aCk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9O1xcblxcbiAgcmV0dXJuIGRlbGV0ZUluV2l0aENsZWFuVXA7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVEZWxldGVJbldpdGhDbGVhblVwKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA5NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXFxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXFxuICogb2YgdmFsdWVzLlxcbiAqL1xcbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBzeW1Ub1N0cmluZ1RhZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10udG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXFxuICovXFxuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XFxuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xcblxcbiAgdHJ5IHtcXG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xcbiAgfSBjYXRjaCAoZSkge31cXG5cXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcXG4gIGlmICh1bm1hc2tlZCkge1xcbiAgICBpZiAoaXNPd24pIHtcXG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0UmF3VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqXFxuICogVXNlZCB0byByZXNvbHZlIHRoZVxcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxcbiAqIG9mIHZhbHVlcy5cXG4gKi9cXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxcbiAqL1xcbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XFxuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG9iamVjdFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nyk7XFxuXFxuXFxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xcbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XFxuICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuYywgZnVuY3Rpb24oa2V5KSB7XFxuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XFxuICAgICAgY2FjaGUuY2xlYXIoKTtcXG4gICAgfVxcbiAgICByZXR1cm4ga2V5O1xcbiAgfSk7XFxuXFxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZW1vaXplQ2FwcGVkKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xcblxcblxcbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXFxuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICpcXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcXG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XFxuICpcXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcXG4gKiB2YWx1ZXMob2JqZWN0KTtcXG4gKiAvLyA9PiBbMSwgMl1cXG4gKlxcbiAqIHZhbHVlcyhvdGhlcik7XFxuICogLy8gPT4gWzMsIDRdXFxuICpcXG4gKiBvYmplY3QuYSA9IDI7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWzEsIDJdXFxuICpcXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWydhJywgJ2InXVxcbiAqXFxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xcbiAqL1xcbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XFxuICB9XFxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XFxuXFxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcXG4gICAgfVxcbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcXG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgcmV0dXJuIG1lbW9pemVkO1xcbn1cXG5cXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cXG5tZW1vaXplLkNhY2hlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19NYXBDYWNoZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZW1vaXplKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKi9cXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xcbiAgdGhpcy5zaXplID0gMDtcXG4gIHRoaXMuX19kYXRhX18gPSB7XFxuICAgICdoYXNoJzogbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgJ21hcCc6IG5ldyAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gfHwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19MaXN0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICAnc3RyaW5nJzogbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXVxcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwQ2FjaGVDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hhc2hDbGVhcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc2hEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19oYXNoR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faGFzaEhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2hhc2hTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA4KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBjb25zdHJ1Y3RvclxcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxcbiAqL1xcbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGFzaENsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faGFzaERlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5IYXNoLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc2hHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuSGFzaC5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19oYXNoSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlLnNldCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faGFzaFNldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChIYXNoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMDAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XFxuXFxuXFxuLyoqXFxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqL1xcbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcXG4gIHRoaXMuX19kYXRhX18gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkobnVsbCkgOiB7fTtcXG4gIHRoaXMuc2l6ZSA9IDA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc01hc2tlZF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU291cmNlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUzKTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXFxuICovXFxudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXFxcXFxeJC4qKz8oKVtcXFxcXXt9fF0vZztcXG5cXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXFxudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxcXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXFxcXSQvO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xcbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXFxcXFwkJicpXFxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXFxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcXG4pO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc01hc2tlZF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciBwYXR0ZXJuID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcXG4gIHJldHVybiBwYXR0ZXJuLnRlc3QoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJc05hdGl2ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3JlSnNEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMyk7XFxuXFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcXG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29yZUpzRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ua2V5cyAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ua2V5cy5JRV9QUk9UTyB8fCAnJyk7XFxuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XFxufSgpKTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XFxuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc01hc2tlZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cXG52YXIgY29yZUpzRGF0YSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXVsnX19jb3JlLWpzX3NoYXJlZF9fJ107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY29yZUpzRGF0YSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTA0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XFxuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0VmFsdWUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBIYXNoXFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcXG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hEZWxldGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xcbiAgaWYgKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSB7XFxuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XFxuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xcbiAgfVxcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzaEdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTA3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKlxcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgc2V0XFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XFxuICBkYXRhW2tleV0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gW107XFxuICB0aGlzLnNpemUgPSAwO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NvY0luZGV4T2ZfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XFxuXFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgaWYgKGluZGV4IDwgMCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xcbiAgICBkYXRhLnBvcCgpO1xcbiAgfSBlbHNlIHtcXG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xcbiAgfVxcbiAgLS10aGlzLnNpemU7XFxuICByZXR1cm4gdHJ1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobGlzdENhY2hlRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGdldFxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKipcXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgaWYgKGluZGV4IDwgMCkge1xcbiAgICArK3RoaXMuc2l6ZTtcXG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XFxuICB9IGVsc2Uge1xcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xcbiAgfVxcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGxpc3RDYWNoZVNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcXG5cXG5cXG4vKipcXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBkZWxldGVcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XFxuICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcXG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXFxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0tleWFibGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgZ2V0XFxuICogQG1lbWJlck9mIE1hcENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIGtleSkuZ2V0KGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlR2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBoYXNcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KS5oYXMoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwQ2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xcbiAgdmFyIGRhdGEgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBrZXkpLFxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XFxuXFxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcXG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlU2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlNYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xcblxcblxcblxcblxcblxcbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xcbnZhciBJTkZJTklUWSA9IDEgLyAwO1xcblxcbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xcbnZhciBzeW1ib2xQcm90byA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ucHJvdG90eXBlIDogdW5kZWZpbmVkLFxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XFxuICB9XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xcbiAgfVxcbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcXG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21lcmdlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X191dGlsX2dldERpc3BsYXlOYW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2V2ZW50c19zaWxlbmNlRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19ldmVudHNfc2lsZW5jZUV2ZW50c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19hc3luY1ZhbGlkYXRpb25fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fZGVmYXVsdFNob3VsZFZhbGlkYXRlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fZ2VuZXJhdGVWYWxpZGF0b3JfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjI1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fc2VsZWN0b3JzX2lzVmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpO1xcblxcblxcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcXFwiZnVuY3Rpb25cXFwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFxcXCJzeW1ib2xcXFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcXFwiZnVuY3Rpb25cXFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFxcXCJzeW1ib2xcXFwiIDogdHlwZW9mIG9iajsgfTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciBpc0NsYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24gaXNDbGFzc0NvbXBvbmVudChDb21wb25lbnQpIHtcXG4gIHJldHVybiBCb29sZWFuKENvbXBvbmVudCAmJiBDb21wb25lbnQucHJvdG90eXBlICYmIF90eXBlb2YoQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KSA9PT0gJ29iamVjdCcpO1xcbn07XFxuXFxuLy8gZXh0cmFjdCBmaWVsZC1zcGVjaWZpYyBhY3Rpb25zXFxuXFxudmFyIGFycmF5SW5zZXJ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5SW5zZXJ0XFxcIl0sXFxuICAgIGFycmF5TW92ZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheU1vdmVcXFwiXSxcXG4gICAgYXJyYXlQb3AgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlQb3BcXFwiXSxcXG4gICAgYXJyYXlQdXNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5UHVzaFxcXCJdLFxcbiAgICBhcnJheVJlbW92ZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVJlbW92ZVxcXCJdLFxcbiAgICBhcnJheVJlbW92ZUFsbCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVJlbW92ZUFsbFxcXCJdLFxcbiAgICBhcnJheVNoaWZ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U2hpZnRcXFwiXSxcXG4gICAgYXJyYXlTcGxpY2UgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlTcGxpY2VcXFwiXSxcXG4gICAgYXJyYXlTd2FwID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U3dhcFxcXCJdLFxcbiAgICBhcnJheVVuc2hpZnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlVbnNoaWZ0XFxcIl0sXFxuICAgIGJsdXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYmx1clxcXCJdLFxcbiAgICBjaGFuZ2UgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiY2hhbmdlXFxcIl0sXFxuICAgIGZvY3VzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImZvY3VzXFxcIl0sXFxuICAgIGZvcm1BY3Rpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fLCBbJ2FycmF5SW5zZXJ0JywgJ2FycmF5TW92ZScsICdhcnJheVBvcCcsICdhcnJheVB1c2gnLCAnYXJyYXlSZW1vdmUnLCAnYXJyYXlSZW1vdmVBbGwnLCAnYXJyYXlTaGlmdCcsICdhcnJheVNwbGljZScsICdhcnJheVN3YXAnLCAnYXJyYXlVbnNoaWZ0JywgJ2JsdXInLCAnY2hhbmdlJywgJ2ZvY3VzJ10pO1xcblxcbnZhciBhcnJheUFjdGlvbnMgPSB7XFxuICBhcnJheUluc2VydDogYXJyYXlJbnNlcnQsXFxuICBhcnJheU1vdmU6IGFycmF5TW92ZSxcXG4gIGFycmF5UG9wOiBhcnJheVBvcCxcXG4gIGFycmF5UHVzaDogYXJyYXlQdXNoLFxcbiAgYXJyYXlSZW1vdmU6IGFycmF5UmVtb3ZlLFxcbiAgYXJyYXlSZW1vdmVBbGw6IGFycmF5UmVtb3ZlQWxsLFxcbiAgYXJyYXlTaGlmdDogYXJyYXlTaGlmdCxcXG4gIGFycmF5U3BsaWNlOiBhcnJheVNwbGljZSxcXG4gIGFycmF5U3dhcDogYXJyYXlTd2FwLFxcbiAgYXJyYXlVbnNoaWZ0OiBhcnJheVVuc2hpZnRcXG59O1xcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShPYmplY3Qua2V5cyhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfXykpLCBbJ2FycmF5JywgJ2FzeW5jRXJyb3JzJywgJ2luaXRpYWxpemVkJywgJ2luaXRpYWxWYWx1ZXMnLCAnc3luY0Vycm9ycycsICdzeW5jV2FybmluZ3MnLCAndmFsdWVzJywgJ3JlZ2lzdGVyZWRGaWVsZHMnXSk7XFxuXFxudmFyIGNoZWNrU3VibWl0ID0gZnVuY3Rpb24gY2hlY2tTdWJtaXQoc3VibWl0KSB7XFxuICBpZiAoIXN1Ym1pdCB8fCB0eXBlb2Ygc3VibWl0ICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgZWl0aGVyIHBhc3MgaGFuZGxlU3VibWl0KCkgYW4gb25TdWJtaXQgZnVuY3Rpb24gb3IgcGFzcyBvblN1Ym1pdCBhcyBhIHByb3AnKTtcXG4gIH1cXG4gIHJldHVybiBzdWJtaXQ7XFxufTtcXG5cXG4vKipcXG4gKiBUaGUgZGVjb3JhdG9yIHRoYXQgaXMgdGhlIG1haW4gQVBJIHRvIHJlZHV4LWZvcm1cXG4gKi9cXG52YXIgY3JlYXRlUmVkdXhGb3JtID0gZnVuY3Rpb24gY3JlYXRlUmVkdXhGb3JtKHN0cnVjdHVyZSkge1xcbiAgdmFyIGRlZXBFcXVhbCA9IHN0cnVjdHVyZS5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBzdHJ1Y3R1cmUuZW1wdHksXFxuICAgICAgZ2V0SW4gPSBzdHJ1Y3R1cmUuZ2V0SW4sXFxuICAgICAgc2V0SW4gPSBzdHJ1Y3R1cmUuc2V0SW4sXFxuICAgICAga2V5cyA9IHN0cnVjdHVyZS5rZXlzLFxcbiAgICAgIGZyb21KUyA9IHN0cnVjdHVyZS5mcm9tSlM7XFxuXFxuICB2YXIgaXNWYWxpZCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHJldHVybiBmdW5jdGlvbiAoaW5pdGlhbENvbmZpZykge1xcbiAgICB2YXIgY29uZmlnID0gX2V4dGVuZHMoe1xcbiAgICAgIHRvdWNoT25CbHVyOiB0cnVlLFxcbiAgICAgIHRvdWNoT25DaGFuZ2U6IGZhbHNlLFxcbiAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IGZhbHNlLFxcbiAgICAgIGRlc3Ryb3lPblVubW91bnQ6IHRydWUsXFxuICAgICAgc2hvdWxkQXN5bmNWYWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgICAgc2hvdWxkVmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX2RlZmF1bHRTaG91bGRWYWxpZGF0ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgICBlbmFibGVSZWluaXRpYWxpemU6IGZhbHNlLFxcbiAgICAgIGtlZXBEaXJ0eU9uUmVpbml0aWFsaXplOiBmYWxzZSxcXG4gICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICAgIH0sXFxuICAgICAgcHVyZTogdHJ1ZSxcXG4gICAgICBmb3JjZVVucmVnaXN0ZXJPblVubW91bnQ6IGZhbHNlXFxuICAgIH0sIGluaXRpYWxDb25maWcpO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gKFdyYXBwZWRDb21wb25lbnQpIHtcXG4gICAgICB2YXIgRm9ybSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgICAgICBfaW5oZXJpdHMoRm9ybSwgX0NvbXBvbmVudCk7XFxuXFxuICAgICAgICBmdW5jdGlvbiBGb3JtKHByb3BzKSB7XFxuICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtKTtcXG5cXG4gICAgICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZvcm0uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xcblxcbiAgICAgICAgICBfdGhpcy5zdWJtaXQgPSBfdGhpcy5zdWJtaXQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnJlc2V0ID0gX3RoaXMucmVzZXQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLmFzeW5jVmFsaWRhdGUgPSBfdGhpcy5hc3luY1ZhbGlkYXRlLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5nZXRWYWx1ZXMgPSBfdGhpcy5nZXRWYWx1ZXMuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnJlZ2lzdGVyID0gX3RoaXMucmVnaXN0ZXIuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnVucmVnaXN0ZXIgPSBfdGhpcy51bnJlZ2lzdGVyLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5zdWJtaXRDb21wbGV0ZWQgPSBfdGhpcy5zdWJtaXRDb21wbGV0ZWQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnN1Ym1pdEZhaWxlZCA9IF90aGlzLnN1Ym1pdEZhaWxlZC5iaW5kKF90aGlzKTtcXG4gICAgICAgICAgX3RoaXMuZmllbGRWYWxpZGF0b3JzID0ge307XFxuICAgICAgICAgIF90aGlzLmxhc3RGaWVsZFZhbGlkYXRvcktleXMgPSBbXTtcXG4gICAgICAgICAgX3RoaXMuZmllbGRXYXJuZXJzID0ge307XFxuICAgICAgICAgIF90aGlzLmxhc3RGaWVsZFdhcm5lcktleXMgPSBbXTtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgX2NyZWF0ZUNsYXNzKEZvcm0sIFt7XFxuICAgICAgICAgIGtleTogJ2dldENoaWxkQ29udGV4dCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgIF9yZWR1eEZvcm06IF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCB7XFxuICAgICAgICAgICAgICAgIGdldEZvcm1TdGF0ZTogZnVuY3Rpb24gZ2V0Rm9ybVN0YXRlKHN0YXRlKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEluKF90aGlzMi5wcm9wcy5nZXRGb3JtU3RhdGUoc3RhdGUpLCBfdGhpczIucHJvcHMuZm9ybSk7XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGU6IHRoaXMuYXN5bmNWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWVzOiB0aGlzLmdldFZhbHVlcyxcXG4gICAgICAgICAgICAgICAgc2VjdGlvblByZWZpeDogdW5kZWZpbmVkLFxcbiAgICAgICAgICAgICAgICByZWdpc3RlcjogdGhpcy5yZWdpc3RlcixcXG4gICAgICAgICAgICAgICAgdW5yZWdpc3RlcjogdGhpcy51bnJlZ2lzdGVyLFxcbiAgICAgICAgICAgICAgICByZWdpc3RlcklubmVyT25TdWJtaXQ6IGZ1bmN0aW9uIHJlZ2lzdGVySW5uZXJPblN1Ym1pdChpbm5lck9uU3VibWl0KSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5pbm5lck9uU3VibWl0ID0gaW5uZXJPblN1Ym1pdDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2luaXRJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0SWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIGVuYWJsZVJlaW5pdGlhbGl6ZSA9IHRoaXMucHJvcHMuZW5hYmxlUmVpbml0aWFsaXplO1xcblxcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICAgIGlmICgoZW5hYmxlUmVpbml0aWFsaXplIHx8ICFuZXh0UHJvcHMuaW5pdGlhbGl6ZWQpICYmICFkZWVwRXF1YWwodGhpcy5wcm9wcy5pbml0aWFsVmFsdWVzLCBuZXh0UHJvcHMuaW5pdGlhbFZhbHVlcykpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGtlZXBEaXJ0eSA9IG5leHRQcm9wcy5pbml0aWFsaXplZCAmJiB0aGlzLnByb3BzLmtlZXBEaXJ0eU9uUmVpbml0aWFsaXplO1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmluaXRpYWxpemUobmV4dFByb3BzLmluaXRpYWxWYWx1ZXMsIGtlZXBEaXJ0eSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMgJiYgKCF0aGlzLnByb3BzLmluaXRpYWxpemVkIHx8IGVuYWJsZVJlaW5pdGlhbGl6ZSkpIHtcXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuaW5pdGlhbGl6ZSh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMsIHRoaXMucHJvcHMua2VlcERpcnR5T25SZWluaXRpYWxpemUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd1cGRhdGVTeW5jRXJyb3JzSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlU3luY0Vycm9yc0lmTmVlZGVkKG5leHRTeW5jRXJyb3JzLCBuZXh0RXJyb3IpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBfcHJvcHMuZXJyb3IsXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHMuc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyA9IF9wcm9wcy51cGRhdGVTeW5jRXJyb3JzO1xcblxcbiAgICAgICAgICAgIHZhciBub0Vycm9ycyA9ICghc3luY0Vycm9ycyB8fCAhT2JqZWN0LmtleXMoc3luY0Vycm9ycykubGVuZ3RoKSAmJiAhZXJyb3I7XFxuICAgICAgICAgICAgdmFyIG5leHROb0Vycm9ycyA9ICghbmV4dFN5bmNFcnJvcnMgfHwgIU9iamVjdC5rZXlzKG5leHRTeW5jRXJyb3JzKS5sZW5ndGgpICYmICFuZXh0RXJyb3I7XFxuICAgICAgICAgICAgaWYgKCEobm9FcnJvcnMgJiYgbmV4dE5vRXJyb3JzKSAmJiAoIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwoc3luY0Vycm9ycywgbmV4dFN5bmNFcnJvcnMpIHx8ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKGVycm9yLCBuZXh0RXJyb3IpKSkge1xcbiAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyhuZXh0U3luY0Vycm9ycywgbmV4dEVycm9yKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY2xlYXJTdWJtaXRQcm9taXNlSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXJTdWJtaXRQcm9taXNlSWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSB0aGlzLnByb3BzLnN1Ym1pdHRpbmc7XFxuXFxuICAgICAgICAgICAgaWYgKHRoaXMuc3VibWl0UHJvbWlzZSAmJiBzdWJtaXR0aW5nICYmICFuZXh0UHJvcHMuc3VibWl0dGluZykge1xcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3VibWl0UHJvbWlzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0SWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0SWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBjbGVhclN1Ym1pdCA9IF9wcm9wczIuY2xlYXJTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHRyaWdnZXJTdWJtaXQgPSBfcHJvcHMyLnRyaWdnZXJTdWJtaXQ7XFxuXFxuICAgICAgICAgICAgaWYgKCF0cmlnZ2VyU3VibWl0ICYmIG5leHRQcm9wcy50cmlnZ2VyU3VibWl0KSB7XFxuICAgICAgICAgICAgICBjbGVhclN1Ym1pdCgpO1xcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAndmFsaWRhdGVJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZUlmTmVlZGVkKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgc2hvdWxkVmFsaWRhdGUgPSBfcHJvcHMzLnNob3VsZFZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZSA9IF9wcm9wczMudmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHZhbHVlcyA9IF9wcm9wczMudmFsdWVzO1xcblxcbiAgICAgICAgICAgIHZhciBmaWVsZExldmVsVmFsaWRhdGUgPSB0aGlzLmdlbmVyYXRlVmFsaWRhdG9yKCk7XFxuICAgICAgICAgICAgaWYgKHZhbGlkYXRlIHx8IGZpZWxkTGV2ZWxWYWxpZGF0ZSkge1xcbiAgICAgICAgICAgICAgdmFyIGluaXRpYWxSZW5kZXIgPSBuZXh0UHJvcHMgPT09IHVuZGVmaW5lZDtcXG4gICAgICAgICAgICAgIHZhciBmaWVsZFZhbGlkYXRvcktleXMgPSBPYmplY3Qua2V5cyh0aGlzLmdldFZhbGlkYXRvcnMoKSk7XFxuICAgICAgICAgICAgICB2YXIgc2hvdWxkVmFsaWRhdGVSZXN1bHQgPSBzaG91bGRWYWxpZGF0ZSh7XFxuICAgICAgICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHM6IG5leHRQcm9wcyxcXG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxSZW5kZXI6IGluaXRpYWxSZW5kZXIsXFxuICAgICAgICAgICAgICAgIGxhc3RGaWVsZFZhbGlkYXRvcktleXM6IHRoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyxcXG4gICAgICAgICAgICAgICAgZmllbGRWYWxpZGF0b3JLZXlzOiBmaWVsZFZhbGlkYXRvcktleXMsXFxuICAgICAgICAgICAgICAgIHN0cnVjdHVyZTogc3RydWN0dXJlXFxuICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgIGlmIChzaG91bGRWYWxpZGF0ZVJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHNUb1ZhbGlkYXRlID0gaW5pdGlhbFJlbmRlciA/IHRoaXMucHJvcHMgOiBuZXh0UHJvcHM7XFxuXFxuICAgICAgICAgICAgICAgIHZhciBfbWVyZ2UyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWVyZ2VfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbGlkYXRlID8gdmFsaWRhdGUocHJvcHNUb1ZhbGlkYXRlLnZhbHVlcywgcHJvcHNUb1ZhbGlkYXRlKSB8fCB7fSA6IHt9LCBmaWVsZExldmVsVmFsaWRhdGUgPyBmaWVsZExldmVsVmFsaWRhdGUocHJvcHNUb1ZhbGlkYXRlLnZhbHVlcywgcHJvcHNUb1ZhbGlkYXRlKSB8fCB7fSA6IHt9KSxcXG4gICAgICAgICAgICAgICAgICAgIF9lcnJvciA9IF9tZXJnZTIuX2Vycm9yLFxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN5bmNFcnJvcnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX21lcmdlMiwgWydfZXJyb3InXSk7XFxuXFxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyA9IGZpZWxkVmFsaWRhdG9yS2V5cztcXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTeW5jRXJyb3JzSWZOZWVkZWQobmV4dFN5bmNFcnJvcnMsIF9lcnJvcik7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3VwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkKG5leHRTeW5jV2FybmluZ3MsIG5leHRXYXJuaW5nKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczQgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICB3YXJuaW5nID0gX3Byb3BzNC53YXJuaW5nLFxcbiAgICAgICAgICAgICAgICBzeW5jV2FybmluZ3MgPSBfcHJvcHM0LnN5bmNXYXJuaW5ncyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzID0gX3Byb3BzNC51cGRhdGVTeW5jV2FybmluZ3M7XFxuXFxuICAgICAgICAgICAgdmFyIG5vV2FybmluZ3MgPSAoIXN5bmNXYXJuaW5ncyB8fCAhT2JqZWN0LmtleXMoc3luY1dhcm5pbmdzKS5sZW5ndGgpICYmICF3YXJuaW5nO1xcbiAgICAgICAgICAgIHZhciBuZXh0Tm9XYXJuaW5ncyA9ICghbmV4dFN5bmNXYXJuaW5ncyB8fCAhT2JqZWN0LmtleXMobmV4dFN5bmNXYXJuaW5ncykubGVuZ3RoKSAmJiAhbmV4dFdhcm5pbmc7XFxuICAgICAgICAgICAgaWYgKCEobm9XYXJuaW5ncyAmJiBuZXh0Tm9XYXJuaW5ncykgJiYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKHN5bmNXYXJuaW5ncywgbmV4dFN5bmNXYXJuaW5ncykgfHwgIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwod2FybmluZywgbmV4dFdhcm5pbmcpKSkge1xcbiAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzKG5leHRTeW5jV2FybmluZ3MsIG5leHRXYXJuaW5nKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnd2FybklmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHdhcm5JZk5lZWRlZChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzNSA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzNS5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgd2FybiA9IF9wcm9wczUud2FybixcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzNS52YWx1ZXM7XFxuXFxuICAgICAgICAgICAgdmFyIGZpZWxkTGV2ZWxXYXJuID0gdGhpcy5nZW5lcmF0ZVdhcm5lcigpO1xcbiAgICAgICAgICAgIGlmICh3YXJuIHx8IGZpZWxkTGV2ZWxXYXJuKSB7XFxuICAgICAgICAgICAgICB2YXIgaW5pdGlhbFJlbmRlciA9IG5leHRQcm9wcyA9PT0gdW5kZWZpbmVkO1xcbiAgICAgICAgICAgICAgdmFyIGZpZWxkV2FybmVyS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZ2V0V2FybmVycygpKTtcXG4gICAgICAgICAgICAgIHZhciBzaG91bGRXYXJuUmVzdWx0ID0gc2hvdWxkVmFsaWRhdGUoe1xcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzOiBuZXh0UHJvcHMsXFxuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsUmVuZGVyOiBpbml0aWFsUmVuZGVyLFxcbiAgICAgICAgICAgICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzOiB0aGlzLmxhc3RGaWVsZFdhcm5lcktleXMsXFxuICAgICAgICAgICAgICAgIGZpZWxkVmFsaWRhdG9yS2V5czogZmllbGRXYXJuZXJLZXlzLFxcbiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IHN0cnVjdHVyZVxcbiAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICBpZiAoc2hvdWxkV2FyblJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHNUb1dhcm4gPSBpbml0aWFsUmVuZGVyID8gdGhpcy5wcm9wcyA6IG5leHRQcm9wcztcXG5cXG4gICAgICAgICAgICAgICAgdmFyIF9tZXJnZTMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19tZXJnZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybiA/IHdhcm4ocHJvcHNUb1dhcm4udmFsdWVzLCBwcm9wc1RvV2FybikgOiB7fSwgZmllbGRMZXZlbFdhcm4gPyBmaWVsZExldmVsV2Fybihwcm9wc1RvV2Fybi52YWx1ZXMsIHByb3BzVG9XYXJuKSA6IHt9KSxcXG4gICAgICAgICAgICAgICAgICAgIF93YXJuaW5nID0gX21lcmdlMy5fd2FybmluZyxcXG4gICAgICAgICAgICAgICAgICAgIG5leHRTeW5jV2FybmluZ3MgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX21lcmdlMywgWydfd2FybmluZyddKTtcXG5cXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RmllbGRXYXJuZXJLZXlzID0gZmllbGRXYXJuZXJLZXlzO1xcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkKG5leHRTeW5jV2FybmluZ3MsIF93YXJuaW5nKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgICAgICB0aGlzLmluaXRJZk5lZWRlZCgpO1xcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJZk5lZWRlZCgpO1xcbiAgICAgICAgICAgIHRoaXMud2FybklmTmVlZGVkKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHRoaXMuaW5pdElmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUlmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy53YXJuSWZOZWVkZWQobmV4dFByb3BzKTtcXG4gICAgICAgICAgICB0aGlzLmNsZWFyU3VibWl0UHJvbWlzZUlmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy5zdWJtaXRJZk5lZWRlZChuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMub25DaGFuZ2UpIHtcXG4gICAgICAgICAgICAgIGlmICghZGVlcEVxdWFsKG5leHRQcm9wcy52YWx1ZXMsIHRoaXMucHJvcHMudmFsdWVzKSkge1xcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHMub25DaGFuZ2UobmV4dFByb3BzLnZhbHVlcywgbmV4dFByb3BzLmRpc3BhdGNoLCBuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIGlmICghdGhpcy5wcm9wcy5wdXJlKSByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobmV4dFByb3BzKS5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgICAgICAvLyB1c2VmdWwgdG8gZGVidWcgcmVyZW5kZXJzXFxuICAgICAgICAgICAgICAvLyBpZiAoIXBsYWluLmRlZXBFcXVhbCh0aGlzLnByb3BzWyBwcm9wIF0sIG5leHRQcm9wc1sgcHJvcCBdKSkge1xcbiAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmluZm8ocHJvcCwgJ2NoYW5nZWQnLCB0aGlzLnByb3BzWyBwcm9wIF0sICc9PT4nLCBuZXh0UHJvcHNbIHByb3AgXSlcXG4gICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgIHJldHVybiAhfnByb3BzVG9Ob3RVcGRhdGVGb3IuaW5kZXhPZihwcm9wKSAmJiAhZGVlcEVxdWFsKF90aGlzMy5wcm9wc1twcm9wXSwgbmV4dFByb3BzW3Byb3BdKTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzNiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3lPblVubW91bnQgPSBfcHJvcHM2LmRlc3Ryb3lPblVubW91bnQsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfcHJvcHM2LmRlc3Ryb3k7XFxuXFxuICAgICAgICAgICAgaWYgKGRlc3Ryb3lPblVubW91bnQpIHtcXG4gICAgICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcXG4gICAgICAgICAgICAgIGRlc3Ryb3koKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2V0VmFsdWVzJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlcygpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZXM7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnaXNWYWxpZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkKCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLnZhbGlkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2lzUHJpc3RpbmUnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNQcmlzdGluZSgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZWdpc3RlcicsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWdpc3RlcihuYW1lLCB0eXBlLCBnZXRWYWxpZGF0b3IsIGdldFdhcm5lcikge1xcbiAgICAgICAgICAgIHRoaXMucHJvcHMucmVnaXN0ZXJGaWVsZChuYW1lLCB0eXBlKTtcXG4gICAgICAgICAgICBpZiAoZ2V0VmFsaWRhdG9yKSB7XFxuICAgICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdG9yc1tuYW1lXSA9IGdldFZhbGlkYXRvcjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGdldFdhcm5lcikge1xcbiAgICAgICAgICAgICAgdGhpcy5maWVsZFdhcm5lcnNbbmFtZV0gPSBnZXRXYXJuZXI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3VucmVnaXN0ZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdW5yZWdpc3RlcihuYW1lKSB7XFxuICAgICAgICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVzdHJveU9uVW5tb3VudCB8fCB0aGlzLnByb3BzLmZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCkge1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnVucmVnaXN0ZXJGaWVsZChuYW1lKTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZmllbGRWYWxpZGF0b3JzW25hbWVdO1xcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5maWVsZFdhcm5lcnNbbmFtZV07XFxuICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnVucmVnaXN0ZXJGaWVsZChuYW1lLCBmYWxzZSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldEZpZWxkTGlzdCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGaWVsZExpc3Qob3B0aW9ucykge1xcbiAgICAgICAgICAgIHZhciByZWdpc3RlcmVkRmllbGRzID0gdGhpcy5wcm9wcy5yZWdpc3RlcmVkRmllbGRzO1xcbiAgICAgICAgICAgIHZhciBsaXN0ID0gW107XFxuICAgICAgICAgICAgaWYgKCFyZWdpc3RlcmVkRmllbGRzKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gbGlzdDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGtleVNlcSA9IGtleXMocmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5leGNsdWRlRmllbGRBcnJheSkge1xcbiAgICAgICAgICAgICAga2V5U2VxID0ga2V5U2VxLmZpbHRlcihmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXS50eXBlJykgIT09ICdGaWVsZEFycmF5JztcXG4gICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZnJvbUpTKGtleVNlcS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XFxuICAgICAgICAgICAgICBhY2MucHVzaChrZXkpO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcXG4gICAgICAgICAgICB9LCBsaXN0KSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2V0VmFsaWRhdG9ycycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWxpZGF0b3JzKCkge1xcbiAgICAgICAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIHZhciB2YWxpZGF0b3JzID0ge307XFxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZFZhbGlkYXRvcnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICAgIHZhciB2YWxpZGF0b3IgPSBfdGhpczQuZmllbGRWYWxpZGF0b3JzW25hbWVdKCk7XFxuICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKSB7XFxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnNbbmFtZV0gPSB2YWxpZGF0b3I7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRvcnM7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2VuZXJhdGVWYWxpZGF0b3InLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2VuZXJhdGVWYWxpZGF0b3IoKSB7XFxuICAgICAgICAgICAgdmFyIHZhbGlkYXRvcnMgPSB0aGlzLmdldFZhbGlkYXRvcnMoKTtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModmFsaWRhdG9ycykubGVuZ3RoID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX2dlbmVyYXRlVmFsaWRhdG9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWxpZGF0b3JzLCBzdHJ1Y3R1cmUpIDogdW5kZWZpbmVkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldFdhcm5lcnMnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0V2FybmVycygpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM1ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgd2FybmVycyA9IHt9O1xcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGRXYXJuZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgICAgICB2YXIgd2FybmVyID0gX3RoaXM1LmZpZWxkV2FybmVyc1tuYW1lXSgpO1xcbiAgICAgICAgICAgICAgaWYgKHdhcm5lcikge1xcbiAgICAgICAgICAgICAgICB3YXJuZXJzW25hbWVdID0gd2FybmVyO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiB3YXJuZXJzO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dlbmVyYXRlV2FybmVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdlbmVyYXRlV2FybmVyKCkge1xcbiAgICAgICAgICAgIHZhciB3YXJuZXJzID0gdGhpcy5nZXRXYXJuZXJzKCk7XFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHdhcm5lcnMpLmxlbmd0aCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19nZW5lcmF0ZVZhbGlkYXRvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybmVycywgc3RydWN0dXJlKSA6IHVuZGVmaW5lZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdhc3luY1ZhbGlkYXRlJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzeW5jVmFsaWRhdGUobmFtZSwgdmFsdWUpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM2ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgX3Byb3BzNyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGFzeW5jQmx1ckZpZWxkcyA9IF9wcm9wczcuYXN5bmNCbHVyRmllbGRzLFxcbiAgICAgICAgICAgICAgICBhc3luY0Vycm9ycyA9IF9wcm9wczcuYXN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGUgPSBfcHJvcHM3LmFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzNy5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBfcHJvcHM3LmluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICBwcmlzdGluZSA9IF9wcm9wczcucHJpc3RpbmUsXFxuICAgICAgICAgICAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGUgPSBfcHJvcHM3LnNob3VsZEFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHN0YXJ0QXN5bmNWYWxpZGF0aW9uID0gX3Byb3BzNy5zdGFydEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3RvcEFzeW5jVmFsaWRhdGlvbiA9IF9wcm9wczcuc3RvcEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3luY0Vycm9ycyA9IF9wcm9wczcuc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzNy52YWx1ZXM7XFxuXFxuICAgICAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSAhbmFtZTtcXG4gICAgICAgICAgICBpZiAoYXN5bmNWYWxpZGF0ZSkge1xcbiAgICAgICAgICAgICAgdmFyIHZhbHVlc1RvVmFsaWRhdGUgPSBzdWJtaXR0aW5nID8gdmFsdWVzIDogc2V0SW4odmFsdWVzLCBuYW1lLCB2YWx1ZSk7XFxuICAgICAgICAgICAgICB2YXIgc3luY1ZhbGlkYXRpb25QYXNzZXMgPSBzdWJtaXR0aW5nIHx8ICFnZXRJbihzeW5jRXJyb3JzLCBuYW1lKTtcXG4gICAgICAgICAgICAgIHZhciBpc0JsdXJyZWRGaWVsZCA9ICFzdWJtaXR0aW5nICYmICghYXN5bmNCbHVyRmllbGRzIHx8IH5hc3luY0JsdXJGaWVsZHMuaW5kZXhPZihuYW1lLnJlcGxhY2UoL1xcXFxbWzAtOV0rXFxcXF0vZywgJ1tdJykpKTtcXG4gICAgICAgICAgICAgIGlmICgoaXNCbHVycmVkRmllbGQgfHwgc3VibWl0dGluZykgJiYgc2hvdWxkQXN5bmNWYWxpZGF0ZSh7XFxuICAgICAgICAgICAgICAgIGFzeW5jRXJyb3JzOiBhc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICB0cmlnZ2VyOiBzdWJtaXR0aW5nID8gJ3N1Ym1pdCcgOiAnYmx1cicsXFxuICAgICAgICAgICAgICAgIGJsdXJyZWRGaWVsZDogbmFtZSxcXG4gICAgICAgICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICAgICAgICBzeW5jVmFsaWRhdGlvblBhc3Nlczogc3luY1ZhbGlkYXRpb25QYXNzZXNcXG4gICAgICAgICAgICAgIH0pKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fYXN5bmNWYWxpZGF0aW9uX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jVmFsaWRhdGUodmFsdWVzVG9WYWxpZGF0ZSwgZGlzcGF0Y2gsIF90aGlzNi5wcm9wcywgbmFtZSk7XFxuICAgICAgICAgICAgICAgIH0sIHN0YXJ0QXN5bmNWYWxpZGF0aW9uLCBzdG9wQXN5bmNWYWxpZGF0aW9uLCBuYW1lKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0Q29tcGxldGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdENvbXBsZXRlZChyZXN1bHQpIHtcXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5zdWJtaXRQcm9taXNlO1xcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0RmFpbGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdEZhaWxlZChlcnJvcikge1xcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN1Ym1pdFByb21pc2U7XFxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnbGlzdGVuVG9TdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbGlzdGVuVG9TdWJtaXQocHJvbWlzZSkge1xcbiAgICAgICAgICAgIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2lzX3Byb21pc2VfX19kZWZhdWx0KCkocHJvbWlzZSkpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLnN1Ym1pdFByb21pc2UgPSBwcm9taXNlO1xcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4odGhpcy5zdWJtaXRDb21wbGV0ZWQsIHRoaXMuc3VibWl0RmFpbGVkKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdzdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0KHN1Ym1pdE9yRXZlbnQpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM3ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgX3Byb3BzOCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIG9uU3VibWl0ID0gX3Byb3BzOC5vblN1Ym1pdCxcXG4gICAgICAgICAgICAgICAgYmx1ciA9IF9wcm9wczguYmx1cixcXG4gICAgICAgICAgICAgICAgY2hhbmdlID0gX3Byb3BzOC5jaGFuZ2UsXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzOC5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgdmFsaWRFeGNlcHRTdWJtaXQgPSBfcHJvcHM4LnZhbGlkRXhjZXB0U3VibWl0O1xcblxcblxcbiAgICAgICAgICAgIGlmICghc3VibWl0T3JFdmVudCB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fZXZlbnRzX3NpbGVuY2VFdmVudF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3VibWl0T3JFdmVudCkpIHtcXG4gICAgICAgICAgICAgIC8vIHN1Ym1pdE9yRXZlbnQgaXMgYW4gZXZlbnQ6IGZpcmUgc3VibWl0IGlmIG5vdCBhbHJlYWR5IHN1Ym1pdHRpbmdcXG4gICAgICAgICAgICAgIGlmICghdGhpcy5zdWJtaXRQcm9taXNlKSB7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlubmVyT25TdWJtaXQpIHtcXG4gICAgICAgICAgICAgICAgICAvLyB3aWxsIGNhbGwgXFxcInN1Ym1pdE9yRXZlbnQgaXMgdGhlIHN1Ym1pdCBmdW5jdGlvblxcXCIgYmxvY2sgYmVsb3dcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbm5lck9uU3VibWl0KCk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdGVuVG9TdWJtaXQoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjaGVja1N1Ym1pdChvblN1Ym1pdCksIF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpKSwgdmFsaWRFeGNlcHRTdWJtaXQsIHRoaXMuYXN5bmNWYWxpZGF0ZSwgdGhpcy5nZXRGaWVsZExpc3QoeyBleGNsdWRlRmllbGRBcnJheTogdHJ1ZSB9KSkpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgIC8vIHN1Ym1pdE9yRXZlbnQgaXMgdGhlIHN1Ym1pdCBmdW5jdGlvbjogcmV0dXJuIGRlZmVycmVkIHN1Ym1pdCB0aHVua1xcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19ldmVudHNfc2lsZW5jZUV2ZW50c19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gIV90aGlzNy5zdWJtaXRQcm9taXNlICYmIF90aGlzNy5saXN0ZW5Ub1N1Ym1pdChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19oYW5kbGVTdWJtaXRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGNoZWNrU3VibWl0KHN1Ym1pdE9yRXZlbnQpLCBfZXh0ZW5kcyh7fSwgX3RoaXM3LnByb3BzLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpKSwgdmFsaWRFeGNlcHRTdWJtaXQsIF90aGlzNy5hc3luY1ZhbGlkYXRlLCBfdGhpczcuZ2V0RmllbGRMaXN0KHsgZXhjbHVkZUZpZWxkQXJyYXk6IHRydWUgfSkpKTtcXG4gICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZXNldCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcXG4gICAgICAgICAgICB0aGlzLnByb3BzLnJlc2V0KCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgICAgICAvLyByZW1vdmUgc29tZSByZWR1eC1mb3JtIGNvbmZpZy1vbmx5IHByb3BzXFxuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cXG4gICAgICAgICAgICB2YXIgX3Byb3BzOSA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGFueVRvdWNoZWQgPSBfcHJvcHM5LmFueVRvdWNoZWQsXFxuICAgICAgICAgICAgICAgIGFycmF5SW5zZXJ0ID0gX3Byb3BzOS5hcnJheUluc2VydCxcXG4gICAgICAgICAgICAgICAgYXJyYXlNb3ZlID0gX3Byb3BzOS5hcnJheU1vdmUsXFxuICAgICAgICAgICAgICAgIGFycmF5UG9wID0gX3Byb3BzOS5hcnJheVBvcCxcXG4gICAgICAgICAgICAgICAgYXJyYXlQdXNoID0gX3Byb3BzOS5hcnJheVB1c2gsXFxuICAgICAgICAgICAgICAgIGFycmF5UmVtb3ZlID0gX3Byb3BzOS5hcnJheVJlbW92ZSxcXG4gICAgICAgICAgICAgICAgYXJyYXlSZW1vdmVBbGwgPSBfcHJvcHM5LmFycmF5UmVtb3ZlQWxsLFxcbiAgICAgICAgICAgICAgICBhcnJheVNoaWZ0ID0gX3Byb3BzOS5hcnJheVNoaWZ0LFxcbiAgICAgICAgICAgICAgICBhcnJheVNwbGljZSA9IF9wcm9wczkuYXJyYXlTcGxpY2UsXFxuICAgICAgICAgICAgICAgIGFycmF5U3dhcCA9IF9wcm9wczkuYXJyYXlTd2FwLFxcbiAgICAgICAgICAgICAgICBhcnJheVVuc2hpZnQgPSBfcHJvcHM5LmFycmF5VW5zaGlmdCxcXG4gICAgICAgICAgICAgICAgYXN5bmNFcnJvcnMgPSBfcHJvcHM5LmFzeW5jRXJyb3JzLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRlID0gX3Byb3BzOS5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRpbmcgPSBfcHJvcHM5LmFzeW5jVmFsaWRhdGluZyxcXG4gICAgICAgICAgICAgICAgYmx1ciA9IF9wcm9wczkuYmx1cixcXG4gICAgICAgICAgICAgICAgY2hhbmdlID0gX3Byb3BzOS5jaGFuZ2UsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfcHJvcHM5LmRlc3Ryb3ksXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3lPblVubW91bnQgPSBfcHJvcHM5LmRlc3Ryb3lPblVubW91bnQsXFxuICAgICAgICAgICAgICAgIGZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCA9IF9wcm9wczkuZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50LFxcbiAgICAgICAgICAgICAgICBkaXJ0eSA9IF9wcm9wczkuZGlydHksXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzOS5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgZW5hYmxlUmVpbml0aWFsaXplID0gX3Byb3BzOS5lbmFibGVSZWluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIGVycm9yID0gX3Byb3BzOS5lcnJvcixcXG4gICAgICAgICAgICAgICAgZm9jdXMgPSBfcHJvcHM5LmZvY3VzLFxcbiAgICAgICAgICAgICAgICBmb3JtID0gX3Byb3BzOS5mb3JtLFxcbiAgICAgICAgICAgICAgICBnZXRGb3JtU3RhdGUgPSBfcHJvcHM5LmdldEZvcm1TdGF0ZSxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSA9IF9wcm9wczkuaW5pdGlhbGl6ZSxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBfcHJvcHM5LmluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gX3Byb3BzOS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgICAgICAgICBpbnZhbGlkID0gX3Byb3BzOS5pbnZhbGlkLFxcbiAgICAgICAgICAgICAgICBrZWVwRGlydHlPblJlaW5pdGlhbGl6ZSA9IF9wcm9wczkua2VlcERpcnR5T25SZWluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIHByaXN0aW5lID0gX3Byb3BzOS5wcmlzdGluZSxcXG4gICAgICAgICAgICAgICAgcHJvcE5hbWVzcGFjZSA9IF9wcm9wczkucHJvcE5hbWVzcGFjZSxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJlZEZpZWxkcyA9IF9wcm9wczkucmVnaXN0ZXJlZEZpZWxkcyxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJGaWVsZCA9IF9wcm9wczkucmVnaXN0ZXJGaWVsZCxcXG4gICAgICAgICAgICAgICAgcmVzZXQgPSBfcHJvcHM5LnJlc2V0LFxcbiAgICAgICAgICAgICAgICBzZXRTdWJtaXRGYWlsZWQgPSBfcHJvcHM5LnNldFN1Ym1pdEZhaWxlZCxcXG4gICAgICAgICAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkID0gX3Byb3BzOS5zZXRTdWJtaXRTdWNjZWVkZWQsXFxuICAgICAgICAgICAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGUgPSBfcHJvcHM5LnNob3VsZEFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzOS5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM5LnN0YXJ0QXN5bmNWYWxpZGF0aW9uLFxcbiAgICAgICAgICAgICAgICBzdGFydFN1Ym1pdCA9IF9wcm9wczkuc3RhcnRTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM5LnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgICAgICAgICAgICAgIHN0b3BTdWJtaXQgPSBfcHJvcHM5LnN0b3BTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHN1Ym1pdHRpbmcgPSBfcHJvcHM5LnN1Ym1pdHRpbmcsXFxuICAgICAgICAgICAgICAgIHN1Ym1pdEZhaWxlZCA9IF9wcm9wczkuc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQgPSBfcHJvcHM5LnN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgICAgICAgdG91Y2ggPSBfcHJvcHM5LnRvdWNoLFxcbiAgICAgICAgICAgICAgICB0b3VjaE9uQmx1ciA9IF9wcm9wczkudG91Y2hPbkJsdXIsXFxuICAgICAgICAgICAgICAgIHRvdWNoT25DaGFuZ2UgPSBfcHJvcHM5LnRvdWNoT25DaGFuZ2UsXFxuICAgICAgICAgICAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgPSBfcHJvcHM5LnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHM5LnN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHN5bmNXYXJuaW5ncyA9IF9wcm9wczkuc3luY1dhcm5pbmdzLFxcbiAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyRmllbGQgPSBfcHJvcHM5LnVucmVnaXN0ZXJGaWVsZCxcXG4gICAgICAgICAgICAgICAgdW50b3VjaCA9IF9wcm9wczkudW50b3VjaCxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyA9IF9wcm9wczkudXBkYXRlU3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzID0gX3Byb3BzOS51cGRhdGVTeW5jV2FybmluZ3MsXFxuICAgICAgICAgICAgICAgIHZhbGlkID0gX3Byb3BzOS52YWxpZCxcXG4gICAgICAgICAgICAgICAgdmFsaWRFeGNlcHRTdWJtaXQgPSBfcHJvcHM5LnZhbGlkRXhjZXB0U3VibWl0LFxcbiAgICAgICAgICAgICAgICB2YWx1ZXMgPSBfcHJvcHM5LnZhbHVlcyxcXG4gICAgICAgICAgICAgICAgd2FybmluZyA9IF9wcm9wczkud2FybmluZyxcXG4gICAgICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHM5LCBbJ2FueVRvdWNoZWQnLCAnYXJyYXlJbnNlcnQnLCAnYXJyYXlNb3ZlJywgJ2FycmF5UG9wJywgJ2FycmF5UHVzaCcsICdhcnJheVJlbW92ZScsICdhcnJheVJlbW92ZUFsbCcsICdhcnJheVNoaWZ0JywgJ2FycmF5U3BsaWNlJywgJ2FycmF5U3dhcCcsICdhcnJheVVuc2hpZnQnLCAnYXN5bmNFcnJvcnMnLCAnYXN5bmNWYWxpZGF0ZScsICdhc3luY1ZhbGlkYXRpbmcnLCAnYmx1cicsICdjaGFuZ2UnLCAnZGVzdHJveScsICdkZXN0cm95T25Vbm1vdW50JywgJ2ZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCcsICdkaXJ0eScsICdkaXNwYXRjaCcsICdlbmFibGVSZWluaXRpYWxpemUnLCAnZXJyb3InLCAnZm9jdXMnLCAnZm9ybScsICdnZXRGb3JtU3RhdGUnLCAnaW5pdGlhbGl6ZScsICdpbml0aWFsaXplZCcsICdpbml0aWFsVmFsdWVzJywgJ2ludmFsaWQnLCAna2VlcERpcnR5T25SZWluaXRpYWxpemUnLCAncHJpc3RpbmUnLCAncHJvcE5hbWVzcGFjZScsICdyZWdpc3RlcmVkRmllbGRzJywgJ3JlZ2lzdGVyRmllbGQnLCAncmVzZXQnLCAnc2V0U3VibWl0RmFpbGVkJywgJ3NldFN1Ym1pdFN1Y2NlZWRlZCcsICdzaG91bGRBc3luY1ZhbGlkYXRlJywgJ3Nob3VsZFZhbGlkYXRlJywgJ3N0YXJ0QXN5bmNWYWxpZGF0aW9uJywgJ3N0YXJ0U3VibWl0JywgJ3N0b3BBc3luY1ZhbGlkYXRpb24nLCAnc3RvcFN1Ym1pdCcsICdzdWJtaXR0aW5nJywgJ3N1Ym1pdEZhaWxlZCcsICdzdWJtaXRTdWNjZWVkZWQnLCAndG91Y2gnLCAndG91Y2hPbkJsdXInLCAndG91Y2hPbkNoYW5nZScsICdwZXJzaXN0ZW50U3VibWl0RXJyb3JzJywgJ3N5bmNFcnJvcnMnLCAnc3luY1dhcm5pbmdzJywgJ3VucmVnaXN0ZXJGaWVsZCcsICd1bnRvdWNoJywgJ3VwZGF0ZVN5bmNFcnJvcnMnLCAndXBkYXRlU3luY1dhcm5pbmdzJywgJ3ZhbGlkJywgJ3ZhbGlkRXhjZXB0U3VibWl0JywgJ3ZhbHVlcycsICd3YXJuaW5nJ10pO1xcbiAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cXG5cXG5cXG4gICAgICAgICAgICB2YXIgcmVkdXhGb3JtUHJvcHMgPSBfZXh0ZW5kcyh7XFxuICAgICAgICAgICAgICBhbnlUb3VjaGVkOiBhbnlUb3VjaGVkLFxcbiAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0ZTogdGhpcy5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBhc3luY1ZhbGlkYXRpbmdcXG4gICAgICAgICAgICB9LCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpLCB7XFxuICAgICAgICAgICAgICBkZXN0cm95OiBkZXN0cm95LFxcbiAgICAgICAgICAgICAgZGlydHk6IGRpcnR5LFxcbiAgICAgICAgICAgICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgICAgICAgICAgZm9ybTogZm9ybSxcXG4gICAgICAgICAgICAgIGhhbmRsZVN1Ym1pdDogdGhpcy5zdWJtaXQsXFxuICAgICAgICAgICAgICBpbml0aWFsaXplOiBpbml0aWFsaXplLFxcbiAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlczogaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICAgIGludmFsaWQ6IGludmFsaWQsXFxuICAgICAgICAgICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgICAgICAgICByZXNldDogcmVzZXQsXFxuICAgICAgICAgICAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxcbiAgICAgICAgICAgICAgc3VibWl0RmFpbGVkOiBzdWJtaXRGYWlsZWQsXFxuICAgICAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgICAgIHRvdWNoOiB0b3VjaCxcXG4gICAgICAgICAgICAgIHVudG91Y2g6IHVudG91Y2gsXFxuICAgICAgICAgICAgICB2YWxpZDogdmFsaWQsXFxuICAgICAgICAgICAgICB3YXJuaW5nOiB3YXJuaW5nXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgdmFyIHByb3BzVG9QYXNzID0gX2V4dGVuZHMoe30sIHByb3BOYW1lc3BhY2UgPyBfZGVmaW5lUHJvcGVydHkoe30sIHByb3BOYW1lc3BhY2UsIHJlZHV4Rm9ybVByb3BzKSA6IHJlZHV4Rm9ybVByb3BzLCByZXN0KTtcXG4gICAgICAgICAgICBpZiAoaXNDbGFzc0NvbXBvbmVudChXcmFwcGVkQ29tcG9uZW50KSkge1xcbiAgICAgICAgICAgICAgcHJvcHNUb1Bhc3MucmVmID0gJ3dyYXBwZWQnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKFdyYXBwZWRDb21wb25lbnQsIHByb3BzVG9QYXNzKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfV0pO1xcblxcbiAgICAgICAgcmV0dXJuIEZvcm07XFxuICAgICAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgICAgIEZvcm0uZGlzcGxheU5hbWUgPSAnRm9ybSgnICsgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fdXRpbF9nZXREaXNwbGF5TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoV3JhcHBlZENvbXBvbmVudCkgKyAnKSc7XFxuICAgICAgRm9ybS5XcmFwcGVkQ29tcG9uZW50ID0gV3JhcHBlZENvbXBvbmVudDtcXG4gICAgICBGb3JtLmNoaWxkQ29udGV4dFR5cGVzID0ge1xcbiAgICAgICAgX3JlZHV4Rm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdC5pc1JlcXVpcmVkXFxuICAgICAgfTtcXG4gICAgICBGb3JtLnByb3BUeXBlcyA9IHtcXG4gICAgICAgIGRlc3Ryb3lPblVubW91bnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIGZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QsXFxuICAgICAgICBnZXRGb3JtU3RhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgb25TdWJtaXRGYWlsOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgICAgIG9uU3VibWl0U3VjY2VzczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICBwcm9wTmFtZVNwYWNlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nLFxcbiAgICAgICAgdmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgd2FybjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICB0b3VjaE9uQmx1cjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICB0b3VjaE9uQ2hhbmdlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIHRyaWdnZXJTdWJtaXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9yczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICByZWdpc3RlcmVkRmllbGRzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYW55XFxuICAgICAgfTtcXG5cXG4gICAgICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBwcm9wcykge1xcbiAgICAgICAgdmFyIGZvcm0gPSBwcm9wcy5mb3JtLFxcbiAgICAgICAgICAgIGdldEZvcm1TdGF0ZSA9IHByb3BzLmdldEZvcm1TdGF0ZSxcXG4gICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gcHJvcHMuaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICBlbmFibGVSZWluaXRpYWxpemUgPSBwcm9wcy5lbmFibGVSZWluaXRpYWxpemUsXFxuICAgICAgICAgICAga2VlcERpcnR5T25SZWluaXRpYWxpemUgPSBwcm9wcy5rZWVwRGlydHlPblJlaW5pdGlhbGl6ZTtcXG5cXG4gICAgICAgIHZhciBmb3JtU3RhdGUgPSBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpIHx8IGVtcHR5LCBmb3JtKSB8fCBlbXB0eTtcXG4gICAgICAgIHZhciBzdGF0ZUluaXRpYWwgPSBnZXRJbihmb3JtU3RhdGUsICdpbml0aWFsJyk7XFxuICAgICAgICB2YXIgaW5pdGlhbGl6ZWQgPSAhIXN0YXRlSW5pdGlhbDtcXG5cXG4gICAgICAgIHZhciBzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzID0gZW5hYmxlUmVpbml0aWFsaXplICYmIGluaXRpYWxpemVkICYmICFkZWVwRXF1YWwoaW5pdGlhbFZhbHVlcywgc3RhdGVJbml0aWFsKTtcXG4gICAgICAgIHZhciBzaG91bGRSZXNldFZhbHVlcyA9IHNob3VsZFVwZGF0ZUluaXRpYWxWYWx1ZXMgJiYgIWtlZXBEaXJ0eU9uUmVpbml0aWFsaXplO1xcblxcbiAgICAgICAgdmFyIGluaXRpYWwgPSBpbml0aWFsVmFsdWVzIHx8IHN0YXRlSW5pdGlhbCB8fCBlbXB0eTtcXG5cXG4gICAgICAgIGlmIChzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzKSB7XFxuICAgICAgICAgIGluaXRpYWwgPSBzdGF0ZUluaXRpYWwgfHwgZW1wdHk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgdmFsdWVzID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzJykgfHwgaW5pdGlhbDtcXG5cXG4gICAgICAgIGlmIChzaG91bGRSZXNldFZhbHVlcykge1xcbiAgICAgICAgICB2YWx1ZXMgPSBpbml0aWFsO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIHByaXN0aW5lID0gc2hvdWxkUmVzZXRWYWx1ZXMgfHwgZGVlcEVxdWFsKGluaXRpYWwsIHZhbHVlcyk7XFxuICAgICAgICB2YXIgYXN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsICdhc3luY0Vycm9ycycpO1xcbiAgICAgICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsICdzeW5jRXJyb3JzJykgfHwge307XFxuICAgICAgICB2YXIgc3luY1dhcm5pbmdzID0gZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJykgfHwge307XFxuICAgICAgICB2YXIgcmVnaXN0ZXJlZEZpZWxkcyA9IGdldEluKGZvcm1TdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICAgIHZhciB2YWxpZCA9IGlzVmFsaWQoZm9ybSwgZ2V0Rm9ybVN0YXRlLCBmYWxzZSkoc3RhdGUpO1xcbiAgICAgICAgdmFyIHZhbGlkRXhjZXB0U3VibWl0ID0gaXNWYWxpZChmb3JtLCBnZXRGb3JtU3RhdGUsIHRydWUpKHN0YXRlKTtcXG4gICAgICAgIHZhciBhbnlUb3VjaGVkID0gISFnZXRJbihmb3JtU3RhdGUsICdhbnlUb3VjaGVkJyk7XFxuICAgICAgICB2YXIgc3VibWl0dGluZyA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0dGluZycpO1xcbiAgICAgICAgdmFyIHN1Ym1pdEZhaWxlZCA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyk7XFxuICAgICAgICB2YXIgc3VibWl0U3VjY2VlZGVkID0gISFnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRTdWNjZWVkZWQnKTtcXG4gICAgICAgIHZhciBlcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgJ2Vycm9yJyk7XFxuICAgICAgICB2YXIgd2FybmluZyA9IGdldEluKGZvcm1TdGF0ZSwgJ3dhcm5pbmcnKTtcXG4gICAgICAgIHZhciB0cmlnZ2VyU3VibWl0ID0gZ2V0SW4oZm9ybVN0YXRlLCAndHJpZ2dlclN1Ym1pdCcpO1xcbiAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgYW55VG91Y2hlZDogYW55VG91Y2hlZCxcXG4gICAgICAgICAgYXN5bmNFcnJvcnM6IGFzeW5jRXJyb3JzLFxcbiAgICAgICAgICBhc3luY1ZhbGlkYXRpbmc6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycpIHx8IGZhbHNlLFxcbiAgICAgICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgICAgICBlcnJvcjogZXJyb3IsXFxuICAgICAgICAgIGluaXRpYWxpemVkOiBpbml0aWFsaXplZCxcXG4gICAgICAgICAgaW52YWxpZDogIXZhbGlkLFxcbiAgICAgICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgICAgIHJlZ2lzdGVyZWRGaWVsZHM6IHJlZ2lzdGVyZWRGaWVsZHMsXFxuICAgICAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgICAgIHN1Ym1pdEZhaWxlZDogc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgc3luY0Vycm9yczogc3luY0Vycm9ycyxcXG4gICAgICAgICAgc3luY1dhcm5pbmdzOiBzeW5jV2FybmluZ3MsXFxuICAgICAgICAgIHRyaWdnZXJTdWJtaXQ6IHRyaWdnZXJTdWJtaXQsXFxuICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxcbiAgICAgICAgICB2YWxpZDogdmFsaWQsXFxuICAgICAgICAgIHZhbGlkRXhjZXB0U3VibWl0OiB2YWxpZEV4Y2VwdFN1Ym1pdCxcXG4gICAgICAgICAgd2FybmluZzogd2FybmluZ1xcbiAgICAgICAgfTtcXG4gICAgICB9LCBmdW5jdGlvbiAoZGlzcGF0Y2gsIGluaXRpYWxQcm9wcykge1xcbiAgICAgICAgdmFyIGJpbmRGb3JtID0gZnVuY3Rpb24gYmluZEZvcm0oYWN0aW9uQ3JlYXRvcikge1xcbiAgICAgICAgICByZXR1cm4gYWN0aW9uQ3JlYXRvci5iaW5kKG51bGwsIGluaXRpYWxQcm9wcy5mb3JtKTtcXG4gICAgICAgIH07XFxuXFxuICAgICAgICAvLyBCaW5kIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb24gYHByb3BzLmZvcm1gXFxuICAgICAgICB2YXIgYm91bmRGb3JtQUNzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmb3JtQWN0aW9ucywgYmluZEZvcm0pO1xcbiAgICAgICAgdmFyIGJvdW5kQXJyYXlBQ3MgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2xvZGFzaF9lc19tYXBWYWx1ZXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFycmF5QWN0aW9ucywgYmluZEZvcm0pO1xcbiAgICAgICAgdmFyIGJvdW5kQmx1ciA9IGZ1bmN0aW9uIGJvdW5kQmx1cihmaWVsZCwgdmFsdWUpIHtcXG4gICAgICAgICAgcmV0dXJuIGJsdXIoaW5pdGlhbFByb3BzLmZvcm0sIGZpZWxkLCB2YWx1ZSwgISFpbml0aWFsUHJvcHMudG91Y2hPbkJsdXIpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBib3VuZENoYW5nZSA9IGZ1bmN0aW9uIGJvdW5kQ2hhbmdlKGZpZWxkLCB2YWx1ZSkge1xcbiAgICAgICAgICByZXR1cm4gY2hhbmdlKGluaXRpYWxQcm9wcy5mb3JtLCBmaWVsZCwgdmFsdWUsICEhaW5pdGlhbFByb3BzLnRvdWNoT25DaGFuZ2UsICEhaW5pdGlhbFByb3BzLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBib3VuZEZvY3VzID0gYmluZEZvcm0oZm9jdXMpO1xcblxcbiAgICAgICAgLy8gV3JhcCBhY3Rpb24gY3JlYXRvcnMgd2l0aCBgZGlzcGF0Y2hgXFxuICAgICAgICB2YXIgY29ubmVjdGVkRm9ybUFDcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRGb3JtQUNzLCBkaXNwYXRjaCk7XFxuICAgICAgICB2YXIgY29ubmVjdGVkQXJyYXlBQ3MgPSB7XFxuICAgICAgICAgIGluc2VydDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5SW5zZXJ0LCBkaXNwYXRjaCksXFxuICAgICAgICAgIG1vdmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheU1vdmUsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcG9wOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlQb3AsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcHVzaDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5UHVzaCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICByZW1vdmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVJlbW92ZSwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICByZW1vdmVBbGw6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVJlbW92ZUFsbCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICBzaGlmdDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U2hpZnQsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc3BsaWNlOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlTcGxpY2UsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc3dhcDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U3dhcCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICB1bnNoaWZ0OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlVbnNoaWZ0LCBkaXNwYXRjaClcXG4gICAgICAgIH07XFxuXFxuICAgICAgICB2YXIgY29tcHV0ZWRBY3Rpb25zID0gX2V4dGVuZHMoe30sIGNvbm5lY3RlZEZvcm1BQ3MsIGJvdW5kQXJyYXlBQ3MsIHtcXG4gICAgICAgICAgYmx1cjogYm91bmRCbHVyLFxcbiAgICAgICAgICBjaGFuZ2U6IGJvdW5kQ2hhbmdlLFxcbiAgICAgICAgICBhcnJheTogY29ubmVjdGVkQXJyYXlBQ3MsXFxuICAgICAgICAgIGZvY3VzOiBib3VuZEZvY3VzLFxcbiAgICAgICAgICBkaXNwYXRjaDogZGlzcGF0Y2hcXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNvbXB1dGVkQWN0aW9ucztcXG4gICAgICAgIH07XFxuICAgICAgfSwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICAgICAgdmFyIENvbm5lY3RlZEZvcm0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0KCkoY29ubmVjdG9yKEZvcm0pLCBXcmFwcGVkQ29tcG9uZW50KTtcXG4gICAgICBDb25uZWN0ZWRGb3JtLmRlZmF1bHRQcm9wcyA9IGNvbmZpZztcXG5cXG4gICAgICAvLyBidWlsZCBvdXRlciBjb21wb25lbnQgdG8gZXhwb3NlIGluc3RhbmNlIGFwaVxcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoX0NvbXBvbmVudDIpIHtcXG4gICAgICAgIF9pbmhlcml0cyhSZWR1eEZvcm0sIF9Db21wb25lbnQyKTtcXG5cXG4gICAgICAgIGZ1bmN0aW9uIFJlZHV4Rm9ybSgpIHtcXG4gICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlZHV4Rm9ybSk7XFxuXFxuICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoUmVkdXhGb3JtLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUmVkdXhGb3JtKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBfY3JlYXRlQ2xhc3MoUmVkdXhGb3JtLCBbe1xcbiAgICAgICAgICBrZXk6ICdzdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0KCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnMud3JhcHBlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5zdWJtaXQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZXNldCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkucmVzZXQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMxMCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfcHJvcHMxMC5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczEwLCBbJ2luaXRpYWxWYWx1ZXMnXSk7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShDb25uZWN0ZWRGb3JtLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgICAgICAgcmVmOiAnd3JhcHBlZCcsXFxuICAgICAgICAgICAgICAvLyBjb252ZXJ0IGluaXRpYWxWYWx1ZXMgaWYgbmVlZCB0b1xcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlczogZnJvbUpTKGluaXRpYWxWYWx1ZXMpXFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ZhbGlkJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzVmFsaWQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdpbnZhbGlkJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLnZhbGlkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5wcmlzdGluZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd2YWx1ZXMnLFxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0VmFsdWVzKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZmllbGRMaXN0JyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgLy8gbWFpbmx5IHByb3ZpZGVkIGZvciB0ZXN0aW5nXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldEZpZWxkTGlzdCgpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3dyYXBwZWRJbnN0YW5jZScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIC8vIGZvciB0ZXN0aW5lXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLnJlZnMud3JhcHBlZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfV0pO1xcblxcbiAgICAgICAgcmV0dXJuIFJlZHV4Rm9ybTtcXG4gICAgICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlUmVkdXhGb3JtKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAxMjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNZXJnZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NyZWF0ZUFzc2lnbmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Nyk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXFxuICogaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgaW50byB0aGVcXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcXG4gKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcXG4gKiBhcmUgbWVyZ2VkIHJlY3Vyc2l2ZWx5LiBPdGhlciBvYmplY3RzIGFuZCB2YWx1ZSB0eXBlcyBhcmUgb3ZlcnJpZGRlbiBieVxcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxcbiAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXFxuICpcXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjUuMFxcbiAqIEBjYXRlZ29yeSBPYmplY3RcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXFxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHtcXG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXFxuICogfTtcXG4gKlxcbiAqIHZhciBvdGhlciA9IHtcXG4gKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXFxuICogfTtcXG4gKlxcbiAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XFxuICogLy8gPT4geyAnYSc6IFt7ICdiJzogMiwgJ2MnOiAzIH0sIHsgJ2QnOiA0LCAnZSc6IDUgfV0gfVxcbiAqL1xcbnZhciBtZXJnZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NyZWF0ZUFzc2lnbmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpIHtcXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNZXJnZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcXG59KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZXJnZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUZvcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYmFzZU1lcmdlRGVlcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fc2FmZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXFxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXFxuICogIGNvdW50ZXJwYXJ0cy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Jhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xcbiAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSkge1xcbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19iYXNlTWVyZ2VEZWVwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxcbiAgICAgICAgPyBjdXN0b21pemVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcXG4gICAgICAgIDogdW5kZWZpbmVkO1xcblxcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xcbiAgICAgIH1cXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hc3NpZ25NZXJnZVZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9XFxuICB9LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNZXJnZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBjbGVhclxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbiAgdGhpcy5zaXplID0gMDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTI0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xcblxcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tEZWxldGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgU3RhY2tcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XFxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0YWNrSGFzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0xpc3RDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XFxuXFxuXFxuXFxuXFxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXFxudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XFxuXFxuLyoqXFxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgc2V0XFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pIHtcXG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcXG4gICAgaWYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XFxuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9XFxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ocGFpcnMpO1xcbiAgfVxcbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XFxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XFxuICByZXR1cm4gdGhpcztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xcbiAgICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XFxuXFxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcXG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XFxuICAgICAgICBicmVhaztcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdDtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUJhc2VGb3IpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY2xvbmVCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jbG9uZVR5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19jb3B5QXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2luaXRDbG9uZU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzQXJndW1lbnRzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzQXJyYXlMaWtlT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faXNCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX2lzRnVuY3Rpb25fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9faXNQbGFpbk9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX2lzVHlwZWRBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X190b1BsYWluT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlTWVyZ2VgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxcbiAqIHJlZmVyZW5jZXMgdG8gYmUgbWVyZ2VkLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWVyZ2VGdW5jIFRoZSBmdW5jdGlvbiB0byBtZXJnZSB2YWx1ZXMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXFxuICogIGNvdW50ZXJwYXJ0cy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBtZXJnZUZ1bmMsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XFxuICB2YXIgb2JqVmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fc2FmZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXkpLFxcbiAgICAgIHNyY1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSwga2V5KSxcXG4gICAgICBzdGFja2VkID0gc3RhY2suZ2V0KHNyY1ZhbHVlKTtcXG5cXG4gIGlmIChzdGFja2VkKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnbk1lcmdlVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5LCBzdGFja2VkKTtcXG4gICAgcmV0dXJuO1xcbiAgfVxcbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxcbiAgICA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXFxuICAgIDogdW5kZWZpbmVkO1xcblxcbiAgdmFyIGlzQ29tbW9uID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcXG5cXG4gIGlmIChpc0NvbW1vbikge1xcbiAgICB2YXIgaXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSksXFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faXNCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSxcXG4gICAgICAgIGlzVHlwZWQgPSAhaXNBcnIgJiYgIWlzQnVmZiAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9faXNUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSk7XFxuXFxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XFxuICAgIGlmIChpc0FyciB8fCBpc0J1ZmYgfHwgaXNUeXBlZCkge1xcbiAgICAgIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzQXJyYXlMaWtlT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fY29weUFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKGlzQnVmZikge1xcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY2xvbmVCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlLCB0cnVlKTtcXG4gICAgICB9XFxuICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY2xvbmVUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgdHJ1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2Uge1xcbiAgICAgICAgbmV3VmFsdWUgPSBbXTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgZWxzZSBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX2lzUGxhaW5PYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FyZ3VtZW50c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpKSB7XFxuICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcXG4gICAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlKSkge1xcbiAgICAgICAgbmV3VmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fdG9QbGFpbk9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgICBlbHNlIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2luaXRDbG9uZU9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xcbiAgICB9XFxuICB9XFxuICBpZiAoaXNDb21tb24pIHtcXG4gICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIHN0YWNrLnNldChzcmNWYWx1ZSwgbmV3VmFsdWUpO1xcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xcbiAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xcbiAgfVxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZU1lcmdlRGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xcbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXFxudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcXG5cXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xcbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLkJ1ZmZlciA6IHVuZGVmaW5lZCxcXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXFxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cXG4gKi9cXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xcbiAgaWYgKGlzRGVlcCkge1xcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XFxuICB9XFxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XFxuXFxuICBidWZmZXIuY29weShyZXN1bHQpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2xvbmVCdWZmZXIpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxMzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nsb25lQXJyYXlCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMyKTtcXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXFxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nsb25lQXJyYXlCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNsb25lVHlwZWRBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19VaW50OEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcXG4gIG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ocmVzdWx0KS5zZXQobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fVWludDhBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShhcnJheUJ1ZmZlcikpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2xvbmVBcnJheUJ1ZmZlcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc1Byb3RvdHlwZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXFxuICovXFxuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzUHJvdG90eXBlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKVxcbiAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFByb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSlcXG4gICAgOiB7fTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaW5pdENsb25lT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXFxuICovXFxudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XFxuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxcbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XFxuICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHByb3RvKSkge1xcbiAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XFxuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XFxuICAgIH1cXG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcXG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlQ3JlYXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSA9PSBhcmdzVGFnO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNBcmd1bWVudHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEzNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheUxpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXFxuICogaXMgYW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0FycmF5TGlrZU9iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4xMy4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcXG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxcbiAqL1xcbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3R1YkZhbHNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xcblxcbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcXG5cXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXFxudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XFxudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cXG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cXG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XFxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cXG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgJiZcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSldO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNUeXBlZEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XFxuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VVbmFyeSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xcbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XFxuXFxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5wcm9jZXNzO1xcblxcbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xcbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcXG4gIHRyeSB7XFxuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxcbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcXG5cXG4gICAgaWYgKHR5cGVzKSB7XFxuICAgICAgcmV0dXJuIHR5cGVzO1xcbiAgICB9XFxuXFxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXFxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcXG4gIH0gY2F0Y2ggKGUpIHt9XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChub2RlVXRpbCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjIpKG1vZHVsZSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE0MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29weU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Mik7XFxuXFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHBsYWluIG9iamVjdCBmbGF0dGVuaW5nIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZ1xcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYiA9IDI7XFxuICogfVxcbiAqXFxuICogRm9vLnByb3RvdHlwZS5jID0gMztcXG4gKlxcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxcbiAqXFxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcXG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfVxcbiAqL1xcbmZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3B5T2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c0luX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9ICh0b1BsYWluT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxcbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcXG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XFxuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcXG5cXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XFxuXFxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxcbiAgICAgIDogdW5kZWZpbmVkO1xcblxcbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XFxuICAgIH1cXG4gICAgaWYgKGlzTmV3KSB7XFxuICAgICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gb2JqZWN0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb3B5T2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXFxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cXG4gKi9cXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlLCB2YWx1ZSkpIHx8XFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgdmFsdWUpO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NpZ25WYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXFxuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXFxuICovXFxuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVRpbWVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzUHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19uYXRpdmVLZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ2KTtcXG5cXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25hdGl2ZUtleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG4gIH1cXG4gIHZhciBpc1Byb3RvID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgcmVzdWx0ID0gW107XFxuXFxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XFxuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XFxuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXFxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XFxuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG5hdGl2ZUtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUmVzdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzSXRlcmF0ZWVDYWxsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUmVzdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XFxuICAgIHZhciBpbmRleCA9IC0xLFxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xcblxcbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcXG4gICAgICA6IHVuZGVmaW5lZDtcXG5cXG4gICAgaWYgKGd1YXJkICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzSXRlcmF0ZWVDYWxsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcXG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XFxuICAgICAgbGVuZ3RoID0gMTtcXG4gICAgfVxcbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XFxuICAgICAgaWYgKHNvdXJjZSkge1xcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdDtcXG4gIH0pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVBc3NpZ25lcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pZGVudGl0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fb3ZlclJlc3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTEpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fb3ZlclJlc3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmMsIHN0YXJ0LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lkZW50aXR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSwgZnVuYyArICcnKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVJlc3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBwbHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUwKTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcXG4gICAgICAgIGluZGV4ID0gLTEsXFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XFxuXFxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcXG4gICAgfVxcbiAgICBpbmRleCA9IC0xO1xcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcXG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcXG4gICAgfVxcbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwcGx5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob3ZlclJlc3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxcbiAqL1xcbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcXG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcXG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XFxuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcXG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xcbiAgfVxcbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFwcGx5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VTZXRUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Nob3J0T3V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NCk7XFxuXFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cXG4gKi9cXG52YXIgc2V0VG9TdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zaG9ydE91dF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlU2V0VG9TdHJpbmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNldFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbnN0YW50X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVmaW5lUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXFxuICovXFxudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pZGVudGl0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCAndG9TdHJpbmcnLCB7XFxuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxcbiAgICAndmFsdWUnOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb25zdGFudF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RyaW5nKSxcXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxcbiAgfSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlU2V0VG9TdHJpbmcpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDIuNC4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XFxuICpcXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcXG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cXG4gKlxcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb25zdGFudCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXFxudmFyIEhPVF9DT1VOVCA9IDgwMCxcXG4gICAgSE9UX1NQQU4gPSAxNjtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxcbiAqIG1pbGxpc2Vjb25kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcXG4gIHZhciBjb3VudCA9IDAsXFxuICAgICAgbGFzdENhbGxlZCA9IDA7XFxuXFxuICByZXR1cm4gZnVuY3Rpb24oKSB7XFxuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcXG5cXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcXG4gICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgY291bnQgPSAwO1xcbiAgICB9XFxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNob3J0T3V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgdmFsdWUgYXJndW1lbnQuXFxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLFxcbiAqICBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XFxuICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xcbiAgICAgICAgPyAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcnJheUxpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNJbmRleF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5kZXgsIG9iamVjdC5sZW5ndGgpKVxcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXFxuICAgICAgKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19lcV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xcbiAgfVxcbiAgcmV0dXJuIGZhbHNlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0l0ZXJhdGVlQ2FsbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlRm9yX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19rZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XFxuICByZXR1cm4gb2JqZWN0ICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgaXRlcmF0ZWUsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VGb3JPd24pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNQcm90b3R5cGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX25hdGl2ZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTU4KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xcbiAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1Byb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbmF0aXZlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG4gIH1cXG4gIHZhciByZXN1bHQgPSBbXTtcXG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUtleXMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3Qua2V5cywgT2JqZWN0KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChuYXRpdmVLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNYXRjaGVzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZU1hdGNoZXNQcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3Byb3BlcnR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xcbiAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcXG4gICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faWRlbnRpdHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICB9XFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSlcXG4gICAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VNYXRjaGVzUHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlWzBdLCB2YWx1ZVsxXSlcXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNYXRjaGVzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxuICB9XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fcHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUl0ZXJhdGVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc01hdGNoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0TWF0Y2hEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcXG4gIHZhciBtYXRjaERhdGEgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRNYXRjaERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSk7XFxuICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc01hdGNoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNYXRjaGVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlSXNFcXVhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXFxudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXRjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxcbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhLCBjdXN0b21pemVyKSB7XFxuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxcbiAgICAgIG5vQ3VzdG9taXplciA9ICFjdXN0b21pemVyO1xcblxcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XFxuICAgIHJldHVybiAhbGVuZ3RoO1xcbiAgfVxcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICB3aGlsZSAoaW5kZXgtLSkge1xcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XFxuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXFxuICAgICAgICAgID8gZGF0YVsxXSAhPT0gb2JqZWN0W2RhdGFbMF1dXFxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcXG4gICAgICAgICkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XFxuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxcbiAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcXG5cXG4gICAgaWYgKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKSB7XFxuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICB2YXIgc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG4gICAgICBpZiAoY3VzdG9taXplcikge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjayk7XFxuICAgICAgfVxcbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXFxuICAgICAgICAgICAgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxcbiAgICAgICAgICAgIDogcmVzdWx0XFxuICAgICAgICAgICkpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiB0cnVlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNNYXRjaCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXF1YWxBcnJheXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2VxdWFsQnlUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19lcXVhbE9iamVjdHNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcblxcblxcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgb2JqSXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpLFxcbiAgICAgIG90aElzQXJyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpLFxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2dldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpO1xcblxcbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XFxuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcXG5cXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XFxuXFxuICBpZiAoaXNTYW1lVGFnICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKSB7XFxuICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9faXNCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyKSkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICBvYmpJc0FyciA9IHRydWU7XFxuICAgIG9iaklzT2JqID0gZmFsc2U7XFxuICB9XFxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuICAgIHJldHVybiAob2JqSXNBcnIgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19faXNUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKVxcbiAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXF1YWxBcnJheXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXFxuICAgICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcXVhbEJ5VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xcbiAgfVxcbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XFxuXFxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XFxuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XFxuXFxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcXG4gICAgfVxcbiAgfVxcbiAgaWYgKCFpc1NhbWVUYWcpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsT2JqZWN0c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJc0VxdWFsRGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19NYXBDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc2V0Q2FjaGVBZGRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRDYWNoZUhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjUpO1xcblxcblxcblxcblxcbi8qKlxcbiAqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XFxuXFxuICB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcXG4gIH1cXG59XFxuXFxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3NldENhY2hlQWRkX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFNldENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XFxuXFxuLyoqXFxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgYWRkXFxuICogQG1lbWJlck9mIFNldENhY2hlXFxuICogQGFsaWFzIHB1c2hcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcXG4gIHJldHVybiB0aGlzO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRDYWNoZUFkZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXFxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XFxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRDYWNoZUhhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXFxuICogc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYXJyYXlTb21lKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjYWNoZUhhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsQXJyYXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBUb0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2V0VG9BcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzApO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xcblxcbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcXG5cXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cXG52YXIgc3ltYm9sUHJvdG8gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcXG5cXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXFxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cXG4gKlxcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICBzd2l0Y2ggKHRhZykge1xcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcXG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XFxuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XFxuXFxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XFxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ob2JqZWN0KSwgbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fVWludDhBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShvdGhlcikpKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiB0cnVlO1xcblxcbiAgICBjYXNlIGJvb2xUYWc6XFxuICAgIGNhc2UgZGF0ZVRhZzpcXG4gICAgY2FzZSBudW1iZXJUYWc6XFxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoK29iamVjdCwgK290aGVyKTtcXG5cXG4gICAgY2FzZSBlcnJvclRhZzpcXG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xcblxcbiAgICBjYXNlIHJlZ2V4cFRhZzpcXG4gICAgY2FzZSBzdHJpbmdUYWc6XFxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXFxuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcXG5cXG4gICAgY2FzZSBtYXBUYWc6XFxuICAgICAgdmFyIGNvbnZlcnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21hcFRvQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuICAgIGNhc2Ugc2V0VGFnOlxcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XFxuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2V0VG9BcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXFxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcXG4gICAgICBpZiAoc3RhY2tlZCkge1xcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICAgICAgfVxcbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcXG5cXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XFxuICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsQXJyYXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcXG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcXG4gICAgICByZXR1cm4gcmVzdWx0O1xcblxcbiAgICBjYXNlIHN5bWJvbFRhZzpcXG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XFxuICAgICAgfVxcbiAgfVxcbiAgcmV0dXJuIGZhbHNlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcXVhbEJ5VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XFxuXFxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XFxuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwVG9BcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cXG4gKi9cXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xcblxcbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcXG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XFxuICB9KTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNldFRvQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzIpO1xcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxcbiAgICAgIG9ialByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSxcXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXFxuICAgICAgb3RoUHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRBbGxLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlciksXFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xcblxcbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XFxuICB3aGlsZSAoaW5kZXgtLSkge1xcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxcbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcXG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcXG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICB9XFxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcXG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcXG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcXG5cXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcXG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XFxuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcXG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XFxuXFxuICAgIGlmIChjdXN0b21pemVyKSB7XFxuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcXG4gICAgICAgICAgOiBjb21wYXJlZFxcbiAgICAgICAgKSkge1xcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcXG4gIH1cXG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XFxuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xcblxcbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXFxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XFxuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZXF1YWxPYmplY3RzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRBbGxLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0U3ltYm9sc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2tleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDApO1xcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxcbiAqL1xcbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldEFsbEtleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19rZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFN5bWJvbHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRBbGxLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5UHVzaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXFxuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XFxuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gcmVzdWx0IDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlQdXNoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlR2V0QWxsS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cXG4gKi9cXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XFxuXFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xcbiAgfVxcbiAgcmV0dXJuIGFycmF5O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheVB1c2gpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlGaWx0ZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdHViQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc3KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXFxuICovXFxudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3R1YkFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogZnVuY3Rpb24ob2JqZWN0KSB7XFxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcXG4gICAgcmV0dXJuIFtdO1xcbiAgfVxcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlGaWx0ZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XFxuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcXG4gIH0pO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0U3ltYm9scyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXFxuICAgICAgcmVzSW5kZXggPSAwLFxcbiAgICAgIHJlc3VsdCA9IFtdO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XFxuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5RmlsdGVyKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4xMy4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xcbiAqXFxuICogY29uc29sZS5sb2coYXJyYXlzKTtcXG4gKiAvLyA9PiBbW10sIFtdXVxcbiAqXFxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xcbiAgcmV0dXJuIFtdO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHViQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19TZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19XZWFrTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFzZUdldFRhZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xcblxcbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICBtYXBDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Qcm9taXNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgc2V0Q3RvclN0cmluZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSksXFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fV2Vha01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuLyoqXFxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxcbiAqL1xcbnZhciBnZXRUYWcgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxcbmlmICgoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRhVmlld19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10obmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSBtYXBUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fUHJvbWlzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSBzZXRUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pICE9IHdlYWtNYXBUYWcpKSB7XFxuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xcbiAgICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKEN0b3IpIDogJyc7XFxuXFxuICAgIGlmIChjdG9yU3RyaW5nKSB7XFxuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XFxuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XFxuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XFxuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFRhZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIERhdGFWaWV3ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sICdEYXRhVmlldycpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKERhdGFWaWV3KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cXG52YXIgUHJvbWlzZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnUHJvbWlzZScpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFByb21pc2UpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xcbnZhciBTZXQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1NldCcpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTgyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIFdlYWtNYXAgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1dlYWtNYXAnKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChXZWFrTWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MCk7XFxuXFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xcbiAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcXG5cXG4gIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xcblxcbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N0cmljdENvbXBhcmFibGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKV07XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRNYXRjaERhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc0luX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCksIHNyY1ZhbHVlKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgdmFyIG9ialZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxcbiAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faGFzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aClcXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRyk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlTWF0Y2hlc1Byb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjgpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXFxuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMy43LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XFxuICpcXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xcbiAqIC8vID0+IDNcXG4gKlxcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xcbiAqIC8vID0+IDNcXG4gKlxcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcXG4gKiAvLyA9PiAnZGVmYXVsdCdcXG4gKi9cXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcXG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aCk7XFxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSGFzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19oYXNQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OCk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc1BhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSGFzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUhhc0luKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0xlbmd0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdG9LZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgcGF0aGAgZXhpc3RzIG9uIGBvYmplY3RgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XFxuICBwYXRoID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY2FzdFBhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgsIG9iamVjdCk7XFxuXFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBrZXkgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aFtpbmRleF0pO1xcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcXG4gIH1cXG4gIGlmIChyZXN1bHQgfHwgKytpbmRleCAhPSBsZW5ndGgpIHtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH1cXG4gIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IG9iamVjdC5sZW5ndGg7XFxuICByZXR1cm4gISFsZW5ndGggJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGxlbmd0aCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNJbmRleF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoa2V5LCBsZW5ndGgpICYmXFxuICAgIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlUHJvcGVydHlEZWVwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMi40LjBcXG4gKiBAY2F0ZWdvcnkgVXRpbFxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3RzID0gW1xcbiAqICAgeyAnYSc6IHsgJ2InOiAyIH0gfSxcXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cXG4gKiBdO1xcbiAqXFxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xcbiAqIC8vID0+IFsyLCAxXVxcbiAqXFxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcXG4gKiAvLyA9PiBbMSwgMl1cXG4gKi9cXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNLZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCkpIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVByb3BlcnR5RGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHByb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlUHJvcGVydHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE5MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OCk7XFxuXFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVByb3BlcnR5RGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXFxuICovXFxuXFxuXFxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XFxuICAgIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXFxuICAgIGRlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZGlzcGxheU5hbWU6IHRydWUsXFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgbWl4aW5zOiB0cnVlLFxcbiAgICBwcm9wVHlwZXM6IHRydWUsXFxuICAgIHR5cGU6IHRydWVcXG59O1xcblxcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xcbiAgICBuYW1lOiB0cnVlLFxcbiAgICBsZW5ndGg6IHRydWUsXFxuICAgIHByb3RvdHlwZTogdHJ1ZSxcXG4gICAgY2FsbGVyOiB0cnVlLFxcbiAgICBhcmd1bWVudHM6IHRydWUsXFxuICAgIGFyaXR5OiB0cnVlXFxufTtcXG5cXG52YXIgaXNHZXRPd25Qcm9wZXJ0eVN5bWJvbHNBdmFpbGFibGUgPSB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJztcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBjdXN0b21TdGF0aWNzKSB7XFxuICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykgeyAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xcblxcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cXG4gICAgICAgIGlmIChpc0dldE93blByb3BlcnR5U3ltYm9sc0F2YWlsYWJsZSkge1xcbiAgICAgICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleXNbaV1dICYmICFLTk9XTl9TVEFUSUNTW2tleXNbaV1dICYmICghY3VzdG9tU3RhdGljcyB8fCAhY3VzdG9tU3RhdGljc1trZXlzW2ldXSkpIHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldENvbXBvbmVudFtrZXlzW2ldXSA9IHNvdXJjZUNvbXBvbmVudFtrZXlzW2ldXTtcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcXG5cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBjcmVhdGVQcm92aWRlciAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX3dhcm5pbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlID0gZmFsc2U7XFxuZnVuY3Rpb24gd2FybkFib3V0UmVjZWl2aW5nU3RvcmUoKSB7XFxuICBpZiAoZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUpIHtcXG4gICAgcmV0dXJuO1xcbiAgfVxcbiAgZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUgPSB0cnVlO1xcblxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbHNfd2FybmluZ19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoJzxQcm92aWRlcj4gZG9lcyBub3Qgc3VwcG9ydCBjaGFuZ2luZyBgc3RvcmVgIG9uIHRoZSBmbHkuICcgKyAnSXQgaXMgbW9zdCBsaWtlbHkgdGhhdCB5b3Ugc2VlIHRoaXMgZXJyb3IgYmVjYXVzZSB5b3UgdXBkYXRlZCB0byAnICsgJ1JlZHV4IDIueCBhbmQgUmVhY3QgUmVkdXggMi54IHdoaWNoIG5vIGxvbmdlciBob3QgcmVsb2FkIHJlZHVjZXJzICcgKyAnYXV0b21hdGljYWxseS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXJlZHV4L3JlbGVhc2VzLycgKyAndGFnL3YyLjAuMCBmb3IgdGhlIG1pZ3JhdGlvbiBpbnN0cnVjdGlvbnMuJyk7XFxufVxcblxcbmZ1bmN0aW9uIGNyZWF0ZVByb3ZpZGVyKCkge1xcbiAgdmFyIF9Qcm92aWRlciRjaGlsZENvbnRleDtcXG5cXG4gIHZhciBzdG9yZUtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ3N0b3JlJztcXG4gIHZhciBzdWJLZXkgPSBhcmd1bWVudHNbMV07XFxuXFxuICB2YXIgc3Vic2NyaXB0aW9uS2V5ID0gc3ViS2V5IHx8IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XFxuXFxuICB2YXIgUHJvdmlkZXIgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICBfaW5oZXJpdHMoUHJvdmlkZXIsIF9Db21wb25lbnQpO1xcblxcbiAgICBQcm92aWRlci5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xcbiAgICAgIHZhciBfcmVmO1xcblxcbiAgICAgIHJldHVybiBfcmVmID0ge30sIF9yZWZbc3RvcmVLZXldID0gdGhpc1tzdG9yZUtleV0sIF9yZWZbc3Vic2NyaXB0aW9uS2V5XSA9IG51bGwsIF9yZWY7XFxuICAgIH07XFxuXFxuICAgIGZ1bmN0aW9uIFByb3ZpZGVyKHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFByb3ZpZGVyKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICBfdGhpc1tzdG9yZUtleV0gPSBwcm9wcy5zdG9yZTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNoaWxkcmVuXFxcIl0ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKTtcXG4gICAgfTtcXG5cXG4gICAgcmV0dXJuIFByb3ZpZGVyO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiAobmV4dFByb3BzKSB7XFxuICAgICAgaWYgKHRoaXNbc3RvcmVLZXldICE9PSBuZXh0UHJvcHMuc3RvcmUpIHtcXG4gICAgICAgIHdhcm5BYm91dFJlY2VpdmluZ1N0b3JlKCk7XFxuICAgICAgfVxcbiAgICB9O1xcbiAgfVxcblxcbiAgUHJvdmlkZXIucHJvcFR5cGVzID0ge1xcbiAgICBzdG9yZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogc3RvcmVTaGFwZSAqL10uaXNSZXF1aXJlZCxcXG4gICAgY2hpbGRyZW46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmVsZW1lbnQuaXNSZXF1aXJlZFxcbiAgfTtcXG4gIFByb3ZpZGVyLmNoaWxkQ29udGV4dFR5cGVzID0gKF9Qcm92aWRlciRjaGlsZENvbnRleCA9IHt9LCBfUHJvdmlkZXIkY2hpbGRDb250ZXhbc3RvcmVLZXldID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogc3RvcmVTaGFwZSAqL10uaXNSZXF1aXJlZCwgX1Byb3ZpZGVyJGNoaWxkQ29udGV4W3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9Qcm92aWRlciRjaGlsZENvbnRleCk7XFxuXFxuICByZXR1cm4gUHJvdmlkZXI7XFxufVxcblxcbi8qIHVudXNlZCBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBfdW51c2VkX3dlYnBhY2tfZGVmYXVsdF9leHBvcnQgPSAoY3JlYXRlUHJvdmlkZXIoKSk7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE5NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTUpO1xcblxcbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xcbnZhciBjaGVja1Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk2KTtcXG5cXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcXG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXFxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXFxuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXFxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICB9IGNhdGNoICh4KSB7fVxcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcXG4gIHJldHVybiBudWxsO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKSB7XFxuICAvKiBnbG9iYWwgU3ltYm9sICovXFxuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XFxuICB2YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cXG5cXG4gIC8qKlxcbiAgICogUmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRlcmFibGUgb2JqZWN0LlxcbiAgICpcXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxcbiAgICpcXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XFxuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcXG4gICAqICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTtcXG4gICAqICAgICAgIC4uLlxcbiAgICogICAgIH1cXG4gICAqXFxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cXG4gICAqL1xcbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XFxuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XFxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKipcXG4gICAqIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IGFsbG93IGRlY2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJlXFxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxcbiAgICpcXG4gICAqICAgdmFyIFByb3BzID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTtcXG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcXG4gICAqICAgICBwcm9wVHlwZXM6IHtcXG4gICAqICAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5hbWVkIFxcXCJkZXNjcmlwdGlvblxcXCIuXFxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxcbiAgICpcXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFxcXCJjYXRlZ29yeVxcXCIuXFxuICAgKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsXFxuICAgKlxcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFxcXCJkaWFsb2dcXFwiIHRoYXQgcmVxdWlyZXMgYW4gaW5zdGFuY2Ugb2YgRGlhbG9nLlxcbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxcbiAgICogICAgIH0sXFxuICAgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsgLi4uIH1cXG4gICAqICAgfSk7XFxuICAgKlxcbiAgICogQSBtb3JlIGZvcm1hbCBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOlxcbiAgICpcXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxcbiAgICogICBkZWNsIDo9IFJlYWN0UHJvcFR5cGVzLnt0eXBlfSguaXNSZXF1aXJlZCk/XFxuICAgKlxcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xcbiAgICogYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIEZvciBleGFtcGxlOlxcbiAgICpcXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xcbiAgICogICAgcHJvcFR5cGVzOiB7XFxuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcXFwiaHJlZlxcXCIuXFxuICAgKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXFxuICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2YgVVJJKSkge1xcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcXG4gICAqICAgICAgICAgICAgY29tcG9uZW50TmFtZVxcbiAgICogICAgICAgICAgKTtcXG4gICAqICAgICAgICB9XFxuICAgKiAgICAgIH1cXG4gICAqICAgIH0sXFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cXG4gICAqICB9KTtcXG4gICAqXFxuICAgKiBAaW50ZXJuYWxcXG4gICAqL1xcblxcbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcXG5cXG4gIC8vIEltcG9ydGFudCFcXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcXG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxcbiAgICBmdW5jOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSxcXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxcbiAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzdHJpbmcnKSxcXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXFxuXFxuICAgIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSxcXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIsXFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxcbiAgfTtcXG5cXG4gIC8qKlxcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXFxuICAgKi9cXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cXG4gIGZ1bmN0aW9uIGlzKHgsIHkpIHtcXG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxcbiAgICBpZiAoeCA9PT0geSkge1xcbiAgICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXFxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcXG4gICAgfVxcbiAgfVxcbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXFxuXFxuICAvKipcXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcXG4gICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBvdXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsXFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXFxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XFxuICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlwZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xcbiAgICB0aGlzLnN0YWNrID0gJyc7XFxuICB9XFxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXFxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XFxuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcXG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XFxuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xcblxcbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XFxuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXFxuICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gJyArXFxuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXFxuICAgICAgICAgICk7XFxuICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICAgICAgICB0aHJvdyBlcnI7XFxuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XFxuICAgICAgICAgIGlmIChcXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXFxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXFxuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXFxuICAgICAgICAgICkge1xcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcXG4gICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgcHJvcCBvbiBgJyArIGNvbXBvbmVudE5hbWUgICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXFxuICAgICAgICAgICAgICAnWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRoaXJkLXBhcnR5IFByb3BUeXBlcyAnICtcXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXFxuICAgICAgICAgICAgKTtcXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XFxuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG51bGw7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcXG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XFxuXFxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XFxuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxcbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxcbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcXG5cXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4nKTtcXG4gICAgICB9XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcXG4gICAgICB9XFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XFxuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XFxuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDtcXG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xcbiAgICAgICAgICByZXR1cm4gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuXFxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzKTtcXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgcHJvcFZhbHVlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XFxuICAgICAgfVxcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xcbiAgICAgIH1cXG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XFxuICAgICAgICBpZiAocHJvcFZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHtcXG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcXG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XFxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XFxuICAgIH1cXG5cXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcXG4gICAgICAgICk7XFxuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XFxuICAgICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KSA9PSBudWxsKSB7XFxuICAgICAgICAgIHJldHVybiBudWxsO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xcbiAgICAgIH1cXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XFxuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcXG4gICAgICAgICAgY29udGludWU7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XFxuICAgICAgfVxcbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgYWxsIGtleXMgaW4gY2FzZSBzb21lIGFyZSByZXF1aXJlZCBidXQgbWlzc2luZyBmcm9tXFxuICAgICAgLy8gcHJvcHMuXFxuICAgICAgdmFyIGFsbEtleXMgPSBhc3NpZ24oe30sIHByb3BzW3Byb3BOYW1lXSwgc2hhcGVUeXBlcyk7XFxuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcXG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XFxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXFxuICAgICAgICAgICAgJ1xcXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xcbiAgICAgICAgICAgICdcXFxcblZhbGlkIGtleXM6ICcgKyAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXFxuICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcXG4gICAgICBjYXNlICdudW1iZXInOlxcbiAgICAgIGNhc2UgJ3N0cmluZyc6XFxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XFxuICAgICAgY2FzZSAnb2JqZWN0JzpcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XFxuICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XFxuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTtcXG4gICAgICAgICAgdmFyIHN0ZXA7XFxuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcXG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXFxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcXG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIGRlZmF1bHQ6XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcXG4gICAgLy8gTmF0aXZlIFN5bWJvbC5cXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuXFxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXFxuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcXG4gICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgfVxcblxcbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXFxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG5cXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XFxuICAgICAgcmV0dXJuICdhcnJheSc7XFxuICAgIH1cXG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cXG4gICAgICByZXR1cm4gJ29iamVjdCc7XFxuICAgIH1cXG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XFxuICAgICAgcmV0dXJuICdzeW1ib2wnO1xcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVHlwZTtcXG4gIH1cXG5cXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxcbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XFxuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcXG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XFxuICAgIH1cXG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XFxuICAgICAgICByZXR1cm4gJ2RhdGUnO1xcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XFxuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVHlwZTtcXG4gIH1cXG5cXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cXG4gIC8vIEZvciBleGFtcGxlLCBcXFwidW5kZWZpbmVkXFxcIiBvciBcXFwib2YgdHlwZSBhcnJheVxcXCJcXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcXG4gICAgc3dpdGNoICh0eXBlKSB7XFxuICAgICAgY2FzZSAnYXJyYXknOlxcbiAgICAgIGNhc2UgJ29iamVjdCc6XFxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxcbiAgICAgIGNhc2UgJ2RhdGUnOlxcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XFxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XFxuICAgICAgZGVmYXVsdDpcXG4gICAgICAgIHJldHVybiB0eXBlO1xcbiAgICB9XFxuICB9XFxuXFxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxcbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcXG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcXG4gIH1cXG5cXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XFxuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcXG5cXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcXG59O1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxOTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qXFxub2JqZWN0LWFzc2lnblxcbihjKSBTaW5kcmUgU29yaHVzXFxuQGxpY2Vuc2UgTUlUXFxuKi9cXG5cXG5cXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XFxudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xcblxcbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xcblxcdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcXG5cXHRcXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xcblxcdH1cXG5cXG5cXHRyZXR1cm4gT2JqZWN0KHZhbCk7XFxufVxcblxcbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcXG5cXHR0cnkge1xcblxcdFxcdGlmICghT2JqZWN0LmFzc2lnbikge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxcblxcblxcdFxcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcXG5cXHRcXHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXFxuXFx0XFx0dGVzdDFbNV0gPSAnZGUnO1xcblxcdFxcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxcblxcdFxcdHZhciB0ZXN0MiA9IHt9O1xcblxcdFxcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xcblxcdFxcdFxcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcXG5cXHRcXHR9XFxuXFx0XFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcXG5cXHRcXHRcXHRyZXR1cm4gdGVzdDJbbl07XFxuXFx0XFx0fSk7XFxuXFx0XFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XFxuXFx0XFx0dmFyIHRlc3QzID0ge307XFxuXFx0XFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XFxuXFx0XFx0XFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcXG5cXHRcXHR9KTtcXG5cXHRcXHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cXG5cXHRcXHRcXHRcXHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cXHR9IGNhdGNoIChlcnIpIHtcXG5cXHRcXHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxcblxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHR9XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XFxuXFx0dmFyIGZyb207XFxuXFx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcXG5cXHR2YXIgc3ltYm9scztcXG5cXG5cXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xcblxcdFxcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcXG5cXG5cXHRcXHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xcblxcdFxcdFxcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcXG5cXHRcXHRcXHRcXHR0b1trZXldID0gZnJvbVtrZXldO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xcblxcdFxcdFxcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XFxuXFx0XFx0XFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XFxuXFx0XFx0XFx0XFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xcblxcdFxcdFxcdFxcdFxcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9XFxuXFxuXFx0cmV0dXJuIHRvO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xcblxcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcXG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcXG5cXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XFxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxcbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcXG4gICAgfSBjYXRjaCAoeCkge31cXG4gIH07XFxufVxcblxcbi8qKlxcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cXG4gKlxcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXFxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXFxcInByb3BcXFwiLCBcXFwiY29udGV4dFxcXCIsIFxcXCJjaGlsZCBjb250ZXh0XFxcIlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXFxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cXG4gKiBAcHJpdmF0ZVxcbiAqL1xcbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcXG4gICAgICBpZiAodHlwZVNwZWNzLmhhc093blByb3BlcnR5KHR5cGVTcGVjTmFtZSkpIHtcXG4gICAgICAgIHZhciBlcnJvcjtcXG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXFxuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXFxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxcbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLidcXG4gICAgICAgICAgICApO1xcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICAgICAgICAgIHRocm93IGVycjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcXG4gICAgICAgICAgZXJyb3IgPSBleDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XFxuICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXFxuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xcbiAgICAgICAgICApXFxuXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcXG5cXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XFxuXFxuICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXFxuICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE5NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXFxuICpcXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXFxuICovXFxuXFxuXFxuXFxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7XFxuXFxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcXG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcXG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcXG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXFxuICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcXG4gICAgKTtcXG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XFxuICAgIHRocm93IGVycjtcXG4gIH07XFxuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcXG4gICAgcmV0dXJuIHNoaW07XFxuICB9O1xcbiAgLy8gSW1wb3J0YW50IVxcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXFxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XFxuICAgIGFycmF5OiBzaGltLFxcbiAgICBib29sOiBzaGltLFxcbiAgICBmdW5jOiBzaGltLFxcbiAgICBudW1iZXI6IHNoaW0sXFxuICAgIG9iamVjdDogc2hpbSxcXG4gICAgc3RyaW5nOiBzaGltLFxcbiAgICBzeW1ib2w6IHNoaW0sXFxuXFxuICAgIGFueTogc2hpbSxcXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcXG4gICAgZWxlbWVudDogc2hpbSxcXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcXG4gICAgbm9kZTogc2hpbSxcXG4gICAgb2JqZWN0T2Y6IGdldFNoaW0sXFxuICAgIG9uZU9mOiBnZXRTaGltLFxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXFxuICAgIHNoYXBlOiBnZXRTaGltLFxcbiAgICBleGFjdDogZ2V0U2hpbVxcbiAgfTtcXG5cXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZW1wdHlGdW5jdGlvbjtcXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xcblxcbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXFxuICovXFxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XFxuICAgIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXFxuICAgIGRlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZGlzcGxheU5hbWU6IHRydWUsXFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxcbiAgICBtaXhpbnM6IHRydWUsXFxuICAgIHByb3BUeXBlczogdHJ1ZSxcXG4gICAgdHlwZTogdHJ1ZVxcbn07XFxuXFxudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XFxuICAgIG5hbWU6IHRydWUsXFxuICAgIGxlbmd0aDogdHJ1ZSxcXG4gICAgcHJvdG90eXBlOiB0cnVlLFxcbiAgICBjYWxsZXI6IHRydWUsXFxuICAgIGNhbGxlZTogdHJ1ZSxcXG4gICAgYXJndW1lbnRzOiB0cnVlLFxcbiAgICBhcml0eTogdHJ1ZVxcbn07XFxuXFxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XFxudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XFxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XFxudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xcbnZhciBvYmplY3RQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZiAmJiBnZXRQcm90b3R5cGVPZihPYmplY3QpO1xcblxcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcXG4gICAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7IC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXFxuXFxuICAgICAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XFxuICAgICAgICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XFxuICAgICAgICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xcbiAgICAgICAgICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcXG5cXG4gICAgICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcXG4gICAgICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XFxuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleV0gJiYgIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAoIWJsYWNrbGlzdCB8fCAhYmxhY2tsaXN0W2tleV0pKSB7XFxuICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcXG4gICAgICAgICAgICAgICAgdHJ5IHsgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1YnNjcmlwdGlvbjsgfSk7XFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuLy8gZW5jYXBzdWxhdGVzIHRoZSBzdWJzY3JpcHRpb24gbG9naWMgZm9yIGNvbm5lY3RpbmcgYSBjb21wb25lbnQgdG8gdGhlIHJlZHV4IHN0b3JlLCBhc1xcbi8vIHdlbGwgYXMgbmVzdGluZyBzdWJzY3JpcHRpb25zIG9mIGRlc2NlbmRhbnQgY29tcG9uZW50cywgc28gdGhhdCB3ZSBjYW4gZW5zdXJlIHRoZVxcbi8vIGFuY2VzdG9yIGNvbXBvbmVudHMgcmUtcmVuZGVyIGJlZm9yZSBkZXNjZW5kYW50c1xcblxcbnZhciBDTEVBUkVEID0gbnVsbDtcXG52YXIgbnVsbExpc3RlbmVycyA9IHtcXG4gIG5vdGlmeTogZnVuY3Rpb24gbm90aWZ5KCkge31cXG59O1xcblxcbmZ1bmN0aW9uIGNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbigpIHtcXG4gIC8vIHRoZSBjdXJyZW50L25leHQgcGF0dGVybiBpcyBjb3BpZWQgZnJvbSByZWR1eCdzIGNyZWF0ZVN0b3JlIGNvZGUuXFxuICAvLyBUT0RPOiByZWZhY3RvcitleHBvc2UgdGhhdCBjb2RlIHRvIGJlIHJldXNhYmxlIGhlcmU/XFxuICB2YXIgY3VycmVudCA9IFtdO1xcbiAgdmFyIG5leHQgPSBbXTtcXG5cXG4gIHJldHVybiB7XFxuICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcXG4gICAgICBuZXh0ID0gQ0xFQVJFRDtcXG4gICAgICBjdXJyZW50ID0gQ0xFQVJFRDtcXG4gICAgfSxcXG4gICAgbm90aWZ5OiBmdW5jdGlvbiBub3RpZnkoKSB7XFxuICAgICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnQgPSBuZXh0O1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBsaXN0ZW5lcnNbaV0oKTtcXG4gICAgICB9XFxuICAgIH0sXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBuZXh0O1xcbiAgICB9LFxcbiAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xcbiAgICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xcbiAgICAgIGlmIChuZXh0ID09PSBjdXJyZW50KSBuZXh0ID0gY3VycmVudC5zbGljZSgpO1xcbiAgICAgIG5leHQucHVzaChsaXN0ZW5lcik7XFxuXFxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xcbiAgICAgICAgaWYgKCFpc1N1YnNjcmliZWQgfHwgY3VycmVudCA9PT0gQ0xFQVJFRCkgcmV0dXJuO1xcbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XFxuXFxuICAgICAgICBpZiAobmV4dCA9PT0gY3VycmVudCkgbmV4dCA9IGN1cnJlbnQuc2xpY2UoKTtcXG4gICAgICAgIG5leHQuc3BsaWNlKG5leHQuaW5kZXhPZihsaXN0ZW5lciksIDEpO1xcbiAgICAgIH07XFxuICAgIH1cXG4gIH07XFxufVxcblxcbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oc3RvcmUsIHBhcmVudFN1Yiwgb25TdGF0ZUNoYW5nZSkge1xcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3Vic2NyaXB0aW9uKTtcXG5cXG4gICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xcbiAgICB0aGlzLnBhcmVudFN1YiA9IHBhcmVudFN1YjtcXG4gICAgdGhpcy5vblN0YXRlQ2hhbmdlID0gb25TdGF0ZUNoYW5nZTtcXG4gICAgdGhpcy51bnN1YnNjcmliZSA9IG51bGw7XFxuICAgIHRoaXMubGlzdGVuZXJzID0gbnVsbExpc3RlbmVycztcXG4gIH1cXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkTmVzdGVkU3ViID0gZnVuY3Rpb24gYWRkTmVzdGVkU3ViKGxpc3RlbmVyKSB7XFxuICAgIHRoaXMudHJ5U3Vic2NyaWJlKCk7XFxuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5zdWJzY3JpYmUobGlzdGVuZXIpO1xcbiAgfTtcXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUubm90aWZ5TmVzdGVkU3VicyA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnMoKSB7XFxuICAgIHRoaXMubGlzdGVuZXJzLm5vdGlmeSgpO1xcbiAgfTtcXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuaXNTdWJzY3JpYmVkID0gZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnVuc3Vic2NyaWJlKTtcXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIHRyeVN1YnNjcmliZSgpIHtcXG4gICAgaWYgKCF0aGlzLnVuc3Vic2NyaWJlKSB7XFxuICAgICAgdGhpcy51bnN1YnNjcmliZSA9IHRoaXMucGFyZW50U3ViID8gdGhpcy5wYXJlbnRTdWIuYWRkTmVzdGVkU3ViKHRoaXMub25TdGF0ZUNoYW5nZSkgOiB0aGlzLnN0b3JlLnN1YnNjcmliZSh0aGlzLm9uU3RhdGVDaGFuZ2UpO1xcblxcbiAgICAgIHRoaXMubGlzdGVuZXJzID0gY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uKCk7XFxuICAgIH1cXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdHJ5VW5zdWJzY3JpYmUoKSB7XFxuICAgIGlmICh0aGlzLnVuc3Vic2NyaWJlKSB7XFxuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUgPSBudWxsO1xcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNsZWFyKCk7XFxuICAgICAgdGhpcy5saXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzO1xcbiAgICB9XFxuICB9O1xcblxcbiAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcXG59KCk7XFxuXFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgY3JlYXRlQ29ubmVjdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX191dGlsc19zaGFsbG93RXF1YWxfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19tYXBEaXNwYXRjaFRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19tYXBTdGF0ZVRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjA4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tZXJnZVByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2VsZWN0b3JGYWN0b3J5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMCk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLypcXG4gIGNvbm5lY3QgaXMgYSBmYWNhZGUgb3ZlciBjb25uZWN0QWR2YW5jZWQuIEl0IHR1cm5zIGl0cyBhcmdzIGludG8gYSBjb21wYXRpYmxlXFxuICBzZWxlY3RvckZhY3RvcnksIHdoaWNoIGhhcyB0aGUgc2lnbmF0dXJlOlxcblxcbiAgICAoZGlzcGF0Y2gsIG9wdGlvbnMpID0+IChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykgPT4gbmV4dEZpbmFsUHJvcHNcXG4gIFxcbiAgY29ubmVjdCBwYXNzZXMgaXRzIGFyZ3MgdG8gY29ubmVjdEFkdmFuY2VkIGFzIG9wdGlvbnMsIHdoaWNoIHdpbGwgaW4gdHVybiBwYXNzIHRoZW0gdG9cXG4gIHNlbGVjdG9yRmFjdG9yeSBlYWNoIHRpbWUgYSBDb25uZWN0IGNvbXBvbmVudCBpbnN0YW5jZSBpcyBpbnN0YW50aWF0ZWQgb3IgaG90IHJlbG9hZGVkLlxcblxcbiAgc2VsZWN0b3JGYWN0b3J5IHJldHVybnMgYSBmaW5hbCBwcm9wcyBzZWxlY3RvciBmcm9tIGl0cyBtYXBTdGF0ZVRvUHJvcHMsXFxuICBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVzLCBtZXJnZVByb3BzLFxcbiAgbWVyZ2VQcm9wc0ZhY3RvcmllcywgYW5kIHB1cmUgYXJncy5cXG5cXG4gIFRoZSByZXN1bHRpbmcgZmluYWwgcHJvcHMgc2VsZWN0b3IgaXMgY2FsbGVkIGJ5IHRoZSBDb25uZWN0IGNvbXBvbmVudCBpbnN0YW5jZSB3aGVuZXZlclxcbiAgaXQgcmVjZWl2ZXMgbmV3IHByb3BzIG9yIHN0b3JlIHN0YXRlLlxcbiAqL1xcblxcbmZ1bmN0aW9uIG1hdGNoKGFyZywgZmFjdG9yaWVzLCBuYW1lKSB7XFxuICBmb3IgKHZhciBpID0gZmFjdG9yaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XFxuICAgIHZhciByZXN1bHQgPSBmYWN0b3JpZXNbaV0oYXJnKTtcXG4gICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcXG4gIH1cXG5cXG4gIHJldHVybiBmdW5jdGlvbiAoZGlzcGF0Y2gsIG9wdGlvbnMpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIG9mIHR5cGUgJyArIHR5cGVvZiBhcmcgKyAnIGZvciAnICsgbmFtZSArICcgYXJndW1lbnQgd2hlbiBjb25uZWN0aW5nIGNvbXBvbmVudCAnICsgb3B0aW9ucy53cmFwcGVkQ29tcG9uZW50TmFtZSArICcuJyk7XFxuICB9O1xcbn1cXG5cXG5mdW5jdGlvbiBzdHJpY3RFcXVhbChhLCBiKSB7XFxuICByZXR1cm4gYSA9PT0gYjtcXG59XFxuXFxuLy8gY3JlYXRlQ29ubmVjdCB3aXRoIGRlZmF1bHQgYXJncyBidWlsZHMgdGhlICdvZmZpY2lhbCcgY29ubmVjdCBiZWhhdmlvci4gQ2FsbGluZyBpdCB3aXRoXFxuLy8gZGlmZmVyZW50IG9wdGlvbnMgb3BlbnMgdXAgc29tZSB0ZXN0aW5nIGFuZCBleHRlbnNpYmlsaXR5IHNjZW5hcmlvc1xcbmZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3QoKSB7XFxuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXFxuICAgICAgX3JlZiRjb25uZWN0SE9DID0gX3JlZi5jb25uZWN0SE9DLFxcbiAgICAgIGNvbm5lY3RIT0MgPSBfcmVmJGNvbm5lY3RIT0MgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9uZW50c19jb25uZWN0QWR2YW5jZWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJGNvbm5lY3RIT0MsXFxuICAgICAgX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID0gX3JlZi5tYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsXFxuICAgICAgbWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzID0gX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcFN0YXRlVG9Qcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYkbWFwU3RhdGVUb1Byb3BzRixcXG4gICAgICBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPSBfcmVmLm1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyxcXG4gICAgICBtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMgPSBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWFwRGlzcGF0Y2hUb1Byb3BzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZiRtYXBEaXNwYXRjaFRvUHJvLFxcbiAgICAgIF9yZWYkbWVyZ2VQcm9wc0ZhY3RvciA9IF9yZWYubWVyZ2VQcm9wc0ZhY3RvcmllcyxcXG4gICAgICBtZXJnZVByb3BzRmFjdG9yaWVzID0gX3JlZiRtZXJnZVByb3BzRmFjdG9yID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21lcmdlUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJG1lcmdlUHJvcHNGYWN0b3IsXFxuICAgICAgX3JlZiRzZWxlY3RvckZhY3RvcnkgPSBfcmVmLnNlbGVjdG9yRmFjdG9yeSxcXG4gICAgICBzZWxlY3RvckZhY3RvcnkgPSBfcmVmJHNlbGVjdG9yRmFjdG9yeSA9PT0gdW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zZWxlY3RvckZhY3RvcnlfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJHNlbGVjdG9yRmFjdG9yeTtcXG5cXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzKSB7XFxuICAgIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge30sXFxuICAgICAgICBfcmVmMiRwdXJlID0gX3JlZjIucHVyZSxcXG4gICAgICAgIHB1cmUgPSBfcmVmMiRwdXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogX3JlZjIkcHVyZSxcXG4gICAgICAgIF9yZWYyJGFyZVN0YXRlc0VxdWFsID0gX3JlZjIuYXJlU3RhdGVzRXF1YWwsXFxuICAgICAgICBhcmVTdGF0ZXNFcXVhbCA9IF9yZWYyJGFyZVN0YXRlc0VxdWFsID09PSB1bmRlZmluZWQgPyBzdHJpY3RFcXVhbCA6IF9yZWYyJGFyZVN0YXRlc0VxdWFsLFxcbiAgICAgICAgX3JlZjIkYXJlT3duUHJvcHNFcXVhID0gX3JlZjIuYXJlT3duUHJvcHNFcXVhbCxcXG4gICAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmMiRhcmVPd25Qcm9wc0VxdWEgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbHNfc2hhbGxvd0VxdWFsX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZjIkYXJlT3duUHJvcHNFcXVhLFxcbiAgICAgICAgX3JlZjIkYXJlU3RhdGVQcm9wc0VxID0gX3JlZjIuYXJlU3RhdGVQcm9wc0VxdWFsLFxcbiAgICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZjIkYXJlU3RhdGVQcm9wc0VxID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZVN0YXRlUHJvcHNFcSxcXG4gICAgICAgIF9yZWYyJGFyZU1lcmdlZFByb3BzRSA9IF9yZWYyLmFyZU1lcmdlZFByb3BzRXF1YWwsXFxuICAgICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsID0gX3JlZjIkYXJlTWVyZ2VkUHJvcHNFID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZU1lcmdlZFByb3BzRSxcXG4gICAgICAgIGV4dHJhT3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgWydwdXJlJywgJ2FyZVN0YXRlc0VxdWFsJywgJ2FyZU93blByb3BzRXF1YWwnLCAnYXJlU3RhdGVQcm9wc0VxdWFsJywgJ2FyZU1lcmdlZFByb3BzRXF1YWwnXSk7XFxuXFxuICAgIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gbWF0Y2gobWFwU3RhdGVUb1Byb3BzLCBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsICdtYXBTdGF0ZVRvUHJvcHMnKTtcXG4gICAgdmFyIGluaXRNYXBEaXNwYXRjaFRvUHJvcHMgPSBtYXRjaChtYXBEaXNwYXRjaFRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcywgJ21hcERpc3BhdGNoVG9Qcm9wcycpO1xcbiAgICB2YXIgaW5pdE1lcmdlUHJvcHMgPSBtYXRjaChtZXJnZVByb3BzLCBtZXJnZVByb3BzRmFjdG9yaWVzLCAnbWVyZ2VQcm9wcycpO1xcblxcbiAgICByZXR1cm4gY29ubmVjdEhPQyhzZWxlY3RvckZhY3RvcnksIF9leHRlbmRzKHtcXG4gICAgICAvLyB1c2VkIGluIGVycm9yIG1lc3NhZ2VzXFxuICAgICAgbWV0aG9kTmFtZTogJ2Nvbm5lY3QnLFxcblxcbiAgICAgIC8vIHVzZWQgdG8gY29tcHV0ZSBDb25uZWN0J3MgZGlzcGxheU5hbWUgZnJvbSB0aGUgd3JhcHBlZCBjb21wb25lbnQncyBkaXNwbGF5TmFtZS5cXG4gICAgICBnZXREaXNwbGF5TmFtZTogZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUobmFtZSkge1xcbiAgICAgICAgcmV0dXJuICdDb25uZWN0KCcgKyBuYW1lICsgJyknO1xcbiAgICAgIH0sXFxuXFxuICAgICAgLy8gaWYgbWFwU3RhdGVUb1Byb3BzIGlzIGZhbHN5LCB0aGUgQ29ubmVjdCBjb21wb25lbnQgZG9lc24ndCBzdWJzY3JpYmUgdG8gc3RvcmUgc3RhdGUgY2hhbmdlc1xcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogQm9vbGVhbihtYXBTdGF0ZVRvUHJvcHMpLFxcblxcbiAgICAgIC8vIHBhc3NlZCB0aHJvdWdoIHRvIHNlbGVjdG9yRmFjdG9yeVxcbiAgICAgIGluaXRNYXBTdGF0ZVRvUHJvcHM6IGluaXRNYXBTdGF0ZVRvUHJvcHMsXFxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wczogaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcXG4gICAgICBpbml0TWVyZ2VQcm9wczogaW5pdE1lcmdlUHJvcHMsXFxuICAgICAgcHVyZTogcHVyZSxcXG4gICAgICBhcmVTdGF0ZXNFcXVhbDogYXJlU3RhdGVzRXF1YWwsXFxuICAgICAgYXJlT3duUHJvcHNFcXVhbDogYXJlT3duUHJvcHNFcXVhbCxcXG4gICAgICBhcmVTdGF0ZVByb3BzRXF1YWw6IGFyZVN0YXRlUHJvcHNFcXVhbCxcXG4gICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsOiBhcmVNZXJnZWRQcm9wc0VxdWFsXFxuXFxuICAgIH0sIGV4dHJhT3B0aW9ucykpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdCgpKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHNoYWxsb3dFcXVhbDtcXG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcXG5cXG5mdW5jdGlvbiBpcyh4LCB5KSB7XFxuICBpZiAoeCA9PT0geSkge1xcbiAgICByZXR1cm4geCAhPT0gMCB8fCB5ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcXG4gIH0gZWxzZSB7XFxuICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XFxuICBpZiAoaXMob2JqQSwgb2JqQikpIHJldHVybiB0cnVlO1xcblxcbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG5cXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xcbiAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XFxuXFxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcXG5cXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcXG4gICAgaWYgKCFoYXNPd24uY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIWlzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gIHJldHVybiB0cnVlO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc09iamVjdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2KTtcXG5cXG5cXG5cXG5mdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbihtYXBEaXNwYXRjaFRvUHJvcHMpIHtcXG4gIHJldHVybiB0eXBlb2YgbWFwRGlzcGF0Y2hUb1Byb3BzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYlxcXCIgLyogd3JhcE1hcFRvUHJvcHNGdW5jICovXSkobWFwRGlzcGF0Y2hUb1Byb3BzLCAnbWFwRGlzcGF0Y2hUb1Byb3BzJykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc01pc3NpbmcobWFwRGlzcGF0Y2hUb1Byb3BzKSB7XFxuICByZXR1cm4gIW1hcERpc3BhdGNoVG9Qcm9wcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcXG4gICAgcmV0dXJuIHsgZGlzcGF0Y2g6IGRpc3BhdGNoIH07XFxuICB9KSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuZnVuY3Rpb24gd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzT2JqZWN0KG1hcERpc3BhdGNoVG9Qcm9wcykge1xcbiAgcmV0dXJuIG1hcERpc3BhdGNoVG9Qcm9wcyAmJiB0eXBlb2YgbWFwRGlzcGF0Y2hUb1Byb3BzID09PSAnb2JqZWN0JyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkobWFwRGlzcGF0Y2hUb1Byb3BzLCBkaXNwYXRjaCk7XFxuICB9KSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoW3doZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9uLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNPYmplY3RdKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihnbG9iYWwsIG1vZHVsZSkgey8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3BvbnlmaWxsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNCk7XFxuLyogZ2xvYmFsIHdpbmRvdyAqL1xcblxcblxcbnZhciByb290O1xcblxcbmlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSBzZWxmO1xcbn0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSB3aW5kb3c7XFxufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xcbiAgcm9vdCA9IGdsb2JhbDtcXG59IGVsc2UgaWYgKHRydWUpIHtcXG4gIHJvb3QgPSBtb2R1bGU7XFxufSBlbHNlIHtcXG4gIHJvb3QgPSBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xcbn1cXG5cXG52YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcG9ueWZpbGxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHJvb3QpO1xcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHJlc3VsdCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHN5bWJvbE9ic2VydmFibGVQb255ZmlsbDtcXG5mdW5jdGlvbiBzeW1ib2xPYnNlcnZhYmxlUG9ueWZpbGwocm9vdCkge1xcblxcdHZhciByZXN1bHQ7XFxuXFx0dmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xcblxcblxcdGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XFxuXFx0XFx0aWYgKFN5bWJvbC5vYnNlcnZhYmxlKSB7XFxuXFx0XFx0XFx0cmVzdWx0ID0gU3ltYm9sLm9ic2VydmFibGU7XFxuXFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHRyZXN1bHQgPSBTeW1ib2woJ29ic2VydmFibGUnKTtcXG5cXHRcXHRcXHRTeW1ib2wub2JzZXJ2YWJsZSA9IHJlc3VsdDtcXG5cXHRcXHR9XFxuXFx0fSBlbHNlIHtcXG5cXHRcXHRyZXN1bHQgPSAnQEBvYnNlcnZhYmxlJztcXG5cXHR9XFxuXFxuXFx0cmV0dXJuIHJlc3VsdDtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIwNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0KTtcXG5cXG5cXG5cXG5cXG5mdW5jdGlvbiBnZXRVbmRlZmluZWRTdGF0ZUVycm9yTWVzc2FnZShrZXksIGFjdGlvbikge1xcbiAgdmFyIGFjdGlvblR5cGUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGU7XFxuICB2YXIgYWN0aW9uTmFtZSA9IGFjdGlvblR5cGUgJiYgJ1xcXCInICsgYWN0aW9uVHlwZS50b1N0cmluZygpICsgJ1xcXCInIHx8ICdhbiBhY3Rpb24nO1xcblxcbiAgcmV0dXJuICdHaXZlbiBhY3Rpb24gJyArIGFjdGlvbk5hbWUgKyAnLCByZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkLiAnICsgJ1RvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZS4gJyArICdJZiB5b3Ugd2FudCB0aGlzIHJlZHVjZXIgdG8gaG9sZCBubyB2YWx1ZSwgeW91IGNhbiByZXR1cm4gbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC4nO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKGlucHV0U3RhdGUsIHJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSkge1xcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xcbiAgdmFyIGFyZ3VtZW50TmFtZSA9IGFjdGlvbiAmJiBhY3Rpb24udHlwZSA9PT0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fW1xcXCJhXFxcIiAvKiBBY3Rpb25UeXBlcyAqL10uSU5JVCA/ICdwcmVsb2FkZWRTdGF0ZSBhcmd1bWVudCBwYXNzZWQgdG8gY3JlYXRlU3RvcmUnIDogJ3ByZXZpb3VzIHN0YXRlIHJlY2VpdmVkIGJ5IHRoZSByZWR1Y2VyJztcXG5cXG4gIGlmIChyZWR1Y2VyS2V5cy5sZW5ndGggPT09IDApIHtcXG4gICAgcmV0dXJuICdTdG9yZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgcmVkdWNlci4gTWFrZSBzdXJlIHRoZSBhcmd1bWVudCBwYXNzZWQgJyArICd0byBjb21iaW5lUmVkdWNlcnMgaXMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgcmVkdWNlcnMuJztcXG4gIH1cXG5cXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5wdXRTdGF0ZSkpIHtcXG4gICAgcmV0dXJuICdUaGUgJyArIGFyZ3VtZW50TmFtZSArICcgaGFzIHVuZXhwZWN0ZWQgdHlwZSBvZiBcXFwiJyArIHt9LnRvU3RyaW5nLmNhbGwoaW5wdXRTdGF0ZSkubWF0Y2goL1xcXFxzKFthLXp8QS1aXSspLylbMV0gKyAnXFxcIi4gRXhwZWN0ZWQgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyAnICsgKCdrZXlzOiBcXFwiJyArIHJlZHVjZXJLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiJyk7XFxuICB9XFxuXFxuICB2YXIgdW5leHBlY3RlZEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dFN0YXRlKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xcbiAgICByZXR1cm4gIXJlZHVjZXJzLmhhc093blByb3BlcnR5KGtleSkgJiYgIXVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldO1xcbiAgfSk7XFxuXFxuICB1bmV4cGVjdGVkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgdW5leHBlY3RlZEtleUNhY2hlW2tleV0gPSB0cnVlO1xcbiAgfSk7XFxuXFxuICBpZiAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMCkge1xcbiAgICByZXR1cm4gJ1VuZXhwZWN0ZWQgJyArICh1bmV4cGVjdGVkS2V5cy5sZW5ndGggPiAxID8gJ2tleXMnIDogJ2tleScpICsgJyAnICsgKCdcXFwiJyArIHVuZXhwZWN0ZWRLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiIGZvdW5kIGluICcgKyBhcmd1bWVudE5hbWUgKyAnLiAnKSArICdFeHBlY3RlZCB0byBmaW5kIG9uZSBvZiB0aGUga25vd24gcmVkdWNlciBrZXlzIGluc3RlYWQ6ICcgKyAoJ1xcXCInICsgcmVkdWNlcktleXMuam9pbignXFxcIiwgXFxcIicpICsgJ1xcXCIuIFVuZXhwZWN0ZWQga2V5cyB3aWxsIGJlIGlnbm9yZWQuJyk7XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xcbiAgT2JqZWN0LmtleXMocmVkdWNlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICB2YXIgcmVkdWNlciA9IHJlZHVjZXJzW2tleV07XFxuICAgIHZhciBpbml0aWFsU3RhdGUgPSByZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX19bXFxcImFcXFwiIC8qIEFjdGlvblR5cGVzICovXS5JTklUIH0pO1xcblxcbiAgICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgXFxcIicgKyBrZXkgKyAnXFxcIiByZXR1cm5lZCB1bmRlZmluZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAnICsgJ0lmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXIgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCAnICsgJ2V4cGxpY2l0bHkgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgJyArICdub3QgYmUgdW5kZWZpbmVkLiBJZiB5b3UgZG9uXFxcXCd0IHdhbnQgdG8gc2V0IGEgdmFsdWUgZm9yIHRoaXMgcmVkdWNlciwgJyArICd5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLicpO1xcbiAgICB9XFxuXFxuICAgIHZhciB0eXBlID0gJ0BAcmVkdXgvUFJPQkVfVU5LTk9XTl9BQ1RJT05fJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KS5zcGxpdCgnJykuam9pbignLicpO1xcbiAgICBpZiAodHlwZW9mIHJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6IHR5cGUgfSkgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gcHJvYmVkIHdpdGggYSByYW5kb20gdHlwZS4gJyArICgnRG9uXFxcXCd0IHRyeSB0byBoYW5kbGUgJyArIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlU3RvcmVfX1tcXFwiYVxcXCIgLyogQWN0aW9uVHlwZXMgKi9dLklOSVQgKyAnIG9yIG90aGVyIGFjdGlvbnMgaW4gXFxcInJlZHV4LypcXFwiICcpICsgJ25hbWVzcGFjZS4gVGhleSBhcmUgY29uc2lkZXJlZCBwcml2YXRlLiBJbnN0ZWFkLCB5b3UgbXVzdCByZXR1cm4gdGhlICcgKyAnY3VycmVudCBzdGF0ZSBmb3IgYW55IHVua25vd24gYWN0aW9ucywgdW5sZXNzIGl0IGlzIHVuZGVmaW5lZCwgJyArICdpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgJyArICdhY3Rpb24gdHlwZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQsIGJ1dCBjYW4gYmUgbnVsbC4nKTtcXG4gICAgfVxcbiAgfSk7XFxufVxcblxcbi8qKlxcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCByZWR1Y2VyIGZ1bmN0aW9ucywgaW50byBhIHNpbmdsZVxcbiAqIHJlZHVjZXIgZnVuY3Rpb24uIEl0IHdpbGwgY2FsbCBldmVyeSBjaGlsZCByZWR1Y2VyLCBhbmQgZ2F0aGVyIHRoZWlyIHJlc3VsdHNcXG4gKiBpbnRvIGEgc2luZ2xlIHN0YXRlIG9iamVjdCwgd2hvc2Uga2V5cyBjb3JyZXNwb25kIHRvIHRoZSBrZXlzIG9mIHRoZSBwYXNzZWRcXG4gKiByZWR1Y2VyIGZ1bmN0aW9ucy5cXG4gKlxcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWR1Y2VycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGNvcnJlc3BvbmQgdG8gZGlmZmVyZW50XFxuICogcmVkdWNlciBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNvbWJpbmVkIGludG8gb25lLiBPbmUgaGFuZHkgd2F5IHRvIG9idGFpblxcbiAqIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzIHJlZHVjZXJzYCBzeW50YXguIFRoZSByZWR1Y2VycyBtYXkgbmV2ZXIgcmV0dXJuXFxuICogdW5kZWZpbmVkIGZvciBhbnkgYWN0aW9uLiBJbnN0ZWFkLCB0aGV5IHNob3VsZCByZXR1cm4gdGhlaXIgaW5pdGlhbCBzdGF0ZVxcbiAqIGlmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlbSB3YXMgdW5kZWZpbmVkLCBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIGFueVxcbiAqIHVucmVjb2duaXplZCBhY3Rpb24uXFxuICpcXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgcmVkdWNlciBmdW5jdGlvbiB0aGF0IGludm9rZXMgZXZlcnkgcmVkdWNlciBpbnNpZGUgdGhlXFxuICogcGFzc2VkIG9iamVjdCwgYW5kIGJ1aWxkcyBhIHN0YXRlIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlLlxcbiAqL1xcbmZ1bmN0aW9uIGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2Vycykge1xcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xcbiAgdmFyIGZpbmFsUmVkdWNlcnMgPSB7fTtcXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmVkdWNlcktleXMubGVuZ3RoOyBpKyspIHtcXG4gICAgdmFyIGtleSA9IHJlZHVjZXJLZXlzW2ldO1xcblxcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxzX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCdObyByZWR1Y2VyIHByb3ZpZGVkIGZvciBrZXkgXFxcIicgKyBrZXkgKyAnXFxcIicpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICBmaW5hbFJlZHVjZXJzW2tleV0gPSByZWR1Y2Vyc1trZXldO1xcbiAgICB9XFxuICB9XFxuICB2YXIgZmluYWxSZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKGZpbmFsUmVkdWNlcnMpO1xcblxcbiAgdmFyIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHZvaWQgMDtcXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHt9O1xcbiAgfVxcblxcbiAgdmFyIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSB2b2lkIDA7XFxuICB0cnkge1xcbiAgICBhc3NlcnRSZWR1Y2VyU2hhcGUoZmluYWxSZWR1Y2Vycyk7XFxuICB9IGNhdGNoIChlKSB7XFxuICAgIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSBlO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbWJpbmF0aW9uKCkge1xcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xcblxcbiAgICBpZiAoc2hhcGVBc3NlcnRpb25FcnJvcikge1xcbiAgICAgIHRocm93IHNoYXBlQXNzZXJ0aW9uRXJyb3I7XFxuICAgIH1cXG5cXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgICB2YXIgd2FybmluZ01lc3NhZ2UgPSBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKHN0YXRlLCBmaW5hbFJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSk7XFxuICAgICAgaWYgKHdhcm5pbmdNZXNzYWdlKSB7XFxuICAgICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh3YXJuaW5nTWVzc2FnZSk7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XFxuICAgIHZhciBuZXh0U3RhdGUgPSB7fTtcXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGZpbmFsUmVkdWNlcktleXMubGVuZ3RoOyBfaSsrKSB7XFxuICAgICAgdmFyIF9rZXkgPSBmaW5hbFJlZHVjZXJLZXlzW19pXTtcXG4gICAgICB2YXIgcmVkdWNlciA9IGZpbmFsUmVkdWNlcnNbX2tleV07XFxuICAgICAgdmFyIHByZXZpb3VzU3RhdGVGb3JLZXkgPSBzdGF0ZVtfa2V5XTtcXG4gICAgICB2YXIgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91c1N0YXRlRm9yS2V5LCBhY3Rpb24pO1xcbiAgICAgIGlmICh0eXBlb2YgbmV4dFN0YXRlRm9yS2V5ID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IGdldFVuZGVmaW5lZFN0YXRlRXJyb3JNZXNzYWdlKF9rZXksIGFjdGlvbik7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcXG4gICAgICB9XFxuICAgICAgbmV4dFN0YXRlW19rZXldID0gbmV4dFN0YXRlRm9yS2V5O1xcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcXG4gICAgfVxcbiAgICByZXR1cm4gaGFzQ2hhbmdlZCA/IG5leHRTdGF0ZSA6IHN0YXRlO1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDIwNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gYmluZEFjdGlvbkNyZWF0b3JzO1xcbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICByZXR1cm4gZGlzcGF0Y2goYWN0aW9uQ3JlYXRvci5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cykpO1xcbiAgfTtcXG59XFxuXFxuLyoqXFxuICogVHVybnMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgYWN0aW9uIGNyZWF0b3JzLCBpbnRvIGFuIG9iamVjdCB3aXRoIHRoZVxcbiAqIHNhbWUga2V5cywgYnV0IHdpdGggZXZlcnkgZnVuY3Rpb24gd3JhcHBlZCBpbnRvIGEgYGRpc3BhdGNoYCBjYWxsIHNvIHRoZXlcXG4gKiBtYXkgYmUgaW52b2tlZCBkaXJlY3RseS4gVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgbWV0aG9kLCBhcyB5b3UgY2FuIGNhbGxcXG4gKiBgc3RvcmUuZGlzcGF0Y2goTXlBY3Rpb25DcmVhdG9ycy5kb1NvbWV0aGluZygpKWAgeW91cnNlbGYganVzdCBmaW5lLlxcbiAqXFxuICogRm9yIGNvbnZlbmllbmNlLCB5b3UgY2FuIGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQsXFxuICogYW5kIGdldCBhIGZ1bmN0aW9uIGluIHJldHVybi5cXG4gKlxcbiAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBhY3Rpb25DcmVhdG9ycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBhY3Rpb25cXG4gKiBjcmVhdG9yIGZ1bmN0aW9ucy4gT25lIGhhbmR5IHdheSB0byBvYnRhaW4gaXQgaXMgdG8gdXNlIEVTNiBgaW1wb3J0ICogYXNgXFxuICogc3ludGF4LiBZb3UgbWF5IGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbi5cXG4gKlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGRpc3BhdGNoIFRoZSBgZGlzcGF0Y2hgIGZ1bmN0aW9uIGF2YWlsYWJsZSBvbiB5b3VyIFJlZHV4XFxuICogc3RvcmUuXFxuICpcXG4gKiBAcmV0dXJucyB7RnVuY3Rpb258T2JqZWN0fSBUaGUgb2JqZWN0IG1pbWlja2luZyB0aGUgb3JpZ2luYWwgb2JqZWN0LCBidXQgd2l0aFxcbiAqIGV2ZXJ5IGFjdGlvbiBjcmVhdG9yIHdyYXBwZWQgaW50byB0aGUgYGRpc3BhdGNoYCBjYWxsLiBJZiB5b3UgcGFzc2VkIGFcXG4gKiBmdW5jdGlvbiBhcyBgYWN0aW9uQ3JlYXRvcnNgLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYWxzbyBiZSBhIHNpbmdsZVxcbiAqIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9ycyhhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpIHtcXG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgcmV0dXJuIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3JzLCBkaXNwYXRjaCk7XFxuICB9XFxuXFxuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzICE9PSAnb2JqZWN0JyB8fCBhY3Rpb25DcmVhdG9ycyA9PT0gbnVsbCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBY3Rpb25DcmVhdG9ycyBleHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwgaW5zdGVhZCByZWNlaXZlZCAnICsgKGFjdGlvbkNyZWF0b3JzID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGFjdGlvbkNyZWF0b3JzKSArICcuICcgKyAnRGlkIHlvdSB3cml0ZSBcXFwiaW1wb3J0IEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiIGluc3RlYWQgb2YgXFxcImltcG9ydCAqIGFzIEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiPycpO1xcbiAgfVxcblxcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhY3Rpb25DcmVhdG9ycyk7XFxuICB2YXIgYm91bmRBY3Rpb25DcmVhdG9ycyA9IHt9O1xcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xcbiAgICB2YXIgYWN0aW9uQ3JlYXRvciA9IGFjdGlvbkNyZWF0b3JzW2tleV07XFxuICAgIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIGJvdW5kQWN0aW9uQ3JlYXRvcnNba2V5XSA9IGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIGJvdW5kQWN0aW9uQ3JlYXRvcnM7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDIwNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGRlZmF1bHQgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb3NlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc1KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBzdG9yZSBlbmhhbmNlciB0aGF0IGFwcGxpZXMgbWlkZGxld2FyZSB0byB0aGUgZGlzcGF0Y2ggbWV0aG9kXFxuICogb2YgdGhlIFJlZHV4IHN0b3JlLiBUaGlzIGlzIGhhbmR5IGZvciBhIHZhcmlldHkgb2YgdGFza3MsIHN1Y2ggYXMgZXhwcmVzc2luZ1xcbiAqIGFzeW5jaHJvbm91cyBhY3Rpb25zIGluIGEgY29uY2lzZSBtYW5uZXIsIG9yIGxvZ2dpbmcgZXZlcnkgYWN0aW9uIHBheWxvYWQuXFxuICpcXG4gKiBTZWUgYHJlZHV4LXRodW5rYCBwYWNrYWdlIGFzIGFuIGV4YW1wbGUgb2YgdGhlIFJlZHV4IG1pZGRsZXdhcmUuXFxuICpcXG4gKiBCZWNhdXNlIG1pZGRsZXdhcmUgaXMgcG90ZW50aWFsbHkgYXN5bmNocm9ub3VzLCB0aGlzIHNob3VsZCBiZSB0aGUgZmlyc3RcXG4gKiBzdG9yZSBlbmhhbmNlciBpbiB0aGUgY29tcG9zaXRpb24gY2hhaW4uXFxuICpcXG4gKiBOb3RlIHRoYXQgZWFjaCBtaWRkbGV3YXJlIHdpbGwgYmUgZ2l2ZW4gdGhlIGBkaXNwYXRjaGAgYW5kIGBnZXRTdGF0ZWAgZnVuY3Rpb25zXFxuICogYXMgbmFtZWQgYXJndW1lbnRzLlxcbiAqXFxuICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gbWlkZGxld2FyZXMgVGhlIG1pZGRsZXdhcmUgY2hhaW4gdG8gYmUgYXBwbGllZC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgc3RvcmUgZW5oYW5jZXIgYXBwbHlpbmcgdGhlIG1pZGRsZXdhcmUuXFxuICovXFxuZnVuY3Rpb24gYXBwbHlNaWRkbGV3YXJlKCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1pZGRsZXdhcmVzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIG1pZGRsZXdhcmVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIChjcmVhdGVTdG9yZSkge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xcbiAgICAgIHZhciBzdG9yZSA9IGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcik7XFxuICAgICAgdmFyIF9kaXNwYXRjaCA9IHN0b3JlLmRpc3BhdGNoO1xcbiAgICAgIHZhciBjaGFpbiA9IFtdO1xcblxcbiAgICAgIHZhciBtaWRkbGV3YXJlQVBJID0ge1xcbiAgICAgICAgZ2V0U3RhdGU6IHN0b3JlLmdldFN0YXRlLFxcbiAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xcbiAgICAgICAgICByZXR1cm4gX2Rpc3BhdGNoKGFjdGlvbik7XFxuICAgICAgICB9XFxuICAgICAgfTtcXG4gICAgICBjaGFpbiA9IG1pZGRsZXdhcmVzLm1hcChmdW5jdGlvbiAobWlkZGxld2FyZSkge1xcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmUobWlkZGxld2FyZUFQSSk7XFxuICAgICAgfSk7XFxuICAgICAgX2Rpc3BhdGNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb3NlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmFwcGx5KHVuZGVmaW5lZCwgY2hhaW4pKHN0b3JlLmRpc3BhdGNoKTtcXG5cXG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0b3JlLCB7XFxuICAgICAgICBkaXNwYXRjaDogX2Rpc3BhdGNoXFxuICAgICAgfSk7XFxuICAgIH07XFxuICB9O1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNNaXNzaW5nICovXFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzYpO1xcblxcblxcbmZ1bmN0aW9uIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc0Z1bmN0aW9uKG1hcFN0YXRlVG9Qcm9wcykge1xcbiAgcmV0dXJuIHR5cGVvZiBtYXBTdGF0ZVRvUHJvcHMgPT09ICdmdW5jdGlvbicgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX193cmFwTWFwVG9Qcm9wc19fW1xcXCJiXFxcIiAvKiB3cmFwTWFwVG9Qcm9wc0Z1bmMgKi9dKShtYXBTdGF0ZVRvUHJvcHMsICdtYXBTdGF0ZVRvUHJvcHMnKSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuZnVuY3Rpb24gd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZyhtYXBTdGF0ZVRvUHJvcHMpIHtcXG4gIHJldHVybiAhbWFwU3RhdGVUb1Byb3BzID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYVxcXCIgLyogd3JhcE1hcFRvUHJvcHNDb25zdGFudCAqL10pKGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIHt9O1xcbiAgfSkgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFt3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiwgd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZ10pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIwOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdE1lcmdlUHJvcHMgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd3JhcE1lcmdlUHJvcHNGdW5jICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWVyZ2VQcm9wc0lzT21pdHRlZCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc3KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbmZ1bmN0aW9uIGRlZmF1bHRNZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XFxuICByZXR1cm4gX2V4dGVuZHMoe30sIG93blByb3BzLCBzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzKTtcXG59XFxuXFxuZnVuY3Rpb24gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbml0TWVyZ2VQcm9wc1Byb3h5KGRpc3BhdGNoLCBfcmVmKSB7XFxuICAgIHZhciBkaXNwbGF5TmFtZSA9IF9yZWYuZGlzcGxheU5hbWUsXFxuICAgICAgICBwdXJlID0gX3JlZi5wdXJlLFxcbiAgICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbCA9IF9yZWYuYXJlTWVyZ2VkUHJvcHNFcXVhbDtcXG5cXG4gICAgdmFyIGhhc1J1bk9uY2UgPSBmYWxzZTtcXG4gICAgdmFyIG1lcmdlZFByb3BzID0gdm9pZCAwO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VQcm9wc1Byb3h5KHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XFxuICAgICAgdmFyIG5leHRNZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xcblxcbiAgICAgIGlmIChoYXNSdW5PbmNlKSB7XFxuICAgICAgICBpZiAoIXB1cmUgfHwgIWFyZU1lcmdlZFByb3BzRXF1YWwobmV4dE1lcmdlZFByb3BzLCBtZXJnZWRQcm9wcykpIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICBoYXNSdW5PbmNlID0gdHJ1ZTtcXG4gICAgICAgIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xcblxcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShtZXJnZWRQcm9wcywgZGlzcGxheU5hbWUsICdtZXJnZVByb3BzJyk7XFxuICAgICAgfVxcblxcbiAgICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gICAgfTtcXG4gIH07XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbihtZXJnZVByb3BzKSB7XFxuICByZXR1cm4gdHlwZW9mIG1lcmdlUHJvcHMgPT09ICdmdW5jdGlvbicgPyB3cmFwTWVyZ2VQcm9wc0Z1bmMobWVyZ2VQcm9wcykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNPbWl0dGVkKG1lcmdlUHJvcHMpIHtcXG4gIHJldHVybiAhbWVyZ2VQcm9wcyA/IGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIGRlZmF1bHRNZXJnZVByb3BzO1xcbiAgfSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoW3doZW5NZXJnZVByb3BzSXNGdW5jdGlvbiwgd2hlbk1lcmdlUHJvcHNJc09taXR0ZWRdKTtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMjEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5ICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5ICovXFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gZmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX192ZXJpZnlTdWJzZWxlY3RvcnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjExKTtcXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuZnVuY3Rpb24gaW1wdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgZGlzcGF0Y2gpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3Ioc3RhdGUsIG93blByb3BzKSB7XFxuICAgIHJldHVybiBtZXJnZVByb3BzKG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpLCBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKSwgb3duUHJvcHMpO1xcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIGRpc3BhdGNoLCBfcmVmKSB7XFxuICB2YXIgYXJlU3RhdGVzRXF1YWwgPSBfcmVmLmFyZVN0YXRlc0VxdWFsLFxcbiAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmLmFyZU93blByb3BzRXF1YWwsXFxuICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZi5hcmVTdGF0ZVByb3BzRXF1YWw7XFxuXFxuICB2YXIgaGFzUnVuQXRMZWFzdE9uY2UgPSBmYWxzZTtcXG4gIHZhciBzdGF0ZSA9IHZvaWQgMDtcXG4gIHZhciBvd25Qcm9wcyA9IHZvaWQgMDtcXG4gIHZhciBzdGF0ZVByb3BzID0gdm9pZCAwO1xcbiAgdmFyIGRpc3BhdGNoUHJvcHMgPSB2b2lkIDA7XFxuICB2YXIgbWVyZ2VkUHJvcHMgPSB2b2lkIDA7XFxuXFxuICBmdW5jdGlvbiBoYW5kbGVGaXJzdENhbGwoZmlyc3RTdGF0ZSwgZmlyc3RPd25Qcm9wcykge1xcbiAgICBzdGF0ZSA9IGZpcnN0U3RhdGU7XFxuICAgIG93blByb3BzID0gZmlyc3RPd25Qcm9wcztcXG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcbiAgICBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIGhhc1J1bkF0TGVhc3RPbmNlID0gdHJ1ZTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaGFuZGxlTmV3UHJvcHNBbmROZXdTdGF0ZSgpIHtcXG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcblxcbiAgICBpZiAobWFwRGlzcGF0Y2hUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuXFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZU5ld1Byb3BzKCkge1xcbiAgICBpZiAobWFwU3RhdGVUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBzdGF0ZVByb3BzID0gbWFwU3RhdGVUb1Byb3BzKHN0YXRlLCBvd25Qcm9wcyk7XFxuXFxuICAgIGlmIChtYXBEaXNwYXRjaFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMpIGRpc3BhdGNoUHJvcHMgPSBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKTtcXG5cXG4gICAgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaGFuZGxlTmV3U3RhdGUoKSB7XFxuICAgIHZhciBuZXh0U3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcbiAgICB2YXIgc3RhdGVQcm9wc0NoYW5nZWQgPSAhYXJlU3RhdGVQcm9wc0VxdWFsKG5leHRTdGF0ZVByb3BzLCBzdGF0ZVByb3BzKTtcXG4gICAgc3RhdGVQcm9wcyA9IG5leHRTdGF0ZVByb3BzO1xcblxcbiAgICBpZiAoc3RhdGVQcm9wc0NoYW5nZWQpIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuXFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZVN1YnNlcXVlbnRDYWxscyhuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykge1xcbiAgICB2YXIgcHJvcHNDaGFuZ2VkID0gIWFyZU93blByb3BzRXF1YWwobmV4dE93blByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHZhciBzdGF0ZUNoYW5nZWQgPSAhYXJlU3RhdGVzRXF1YWwobmV4dFN0YXRlLCBzdGF0ZSk7XFxuICAgIHN0YXRlID0gbmV4dFN0YXRlO1xcbiAgICBvd25Qcm9wcyA9IG5leHRPd25Qcm9wcztcXG5cXG4gICAgaWYgKHByb3BzQ2hhbmdlZCAmJiBzdGF0ZUNoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wc0FuZE5ld1N0YXRlKCk7XFxuICAgIGlmIChwcm9wc0NoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wcygpO1xcbiAgICBpZiAoc3RhdGVDaGFuZ2VkKSByZXR1cm4gaGFuZGxlTmV3U3RhdGUoKTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIHB1cmVGaW5hbFByb3BzU2VsZWN0b3IobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpIHtcXG4gICAgcmV0dXJuIGhhc1J1bkF0TGVhc3RPbmNlID8gaGFuZGxlU3Vic2VxdWVudENhbGxzKG5leHRTdGF0ZSwgbmV4dE93blByb3BzKSA6IGhhbmRsZUZpcnN0Q2FsbChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcyk7XFxuICB9O1xcbn1cXG5cXG4vLyBUT0RPOiBBZGQgbW9yZSBjb21tZW50c1xcblxcbi8vIElmIHB1cmUgaXMgdHJ1ZSwgdGhlIHNlbGVjdG9yIHJldHVybmVkIGJ5IHNlbGVjdG9yRmFjdG9yeSB3aWxsIG1lbW9pemUgaXRzIHJlc3VsdHMsXFxuLy8gYWxsb3dpbmcgY29ubmVjdEFkdmFuY2VkJ3Mgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHRvIHJldHVybiBmYWxzZSBpZiBmaW5hbFxcbi8vIHByb3BzIGhhdmUgbm90IGNoYW5nZWQuIElmIGZhbHNlLCB0aGUgc2VsZWN0b3Igd2lsbCBhbHdheXMgcmV0dXJuIGEgbmV3XFxuLy8gb2JqZWN0IGFuZCBzaG91bGRDb21wb25lbnRVcGRhdGUgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuXFxuXFxuZnVuY3Rpb24gZmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShkaXNwYXRjaCwgX3JlZjIpIHtcXG4gIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gX3JlZjIuaW5pdE1hcFN0YXRlVG9Qcm9wcyxcXG4gICAgICBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzID0gX3JlZjIuaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcXG4gICAgICBpbml0TWVyZ2VQcm9wcyA9IF9yZWYyLmluaXRNZXJnZVByb3BzLFxcbiAgICAgIG9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFsnaW5pdE1hcFN0YXRlVG9Qcm9wcycsICdpbml0TWFwRGlzcGF0Y2hUb1Byb3BzJywgJ2luaXRNZXJnZVByb3BzJ10pO1xcblxcbiAgdmFyIG1hcFN0YXRlVG9Qcm9wcyA9IGluaXRNYXBTdGF0ZVRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbiAgdmFyIG1hcERpc3BhdGNoVG9Qcm9wcyA9IGluaXRNYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbiAgdmFyIG1lcmdlUHJvcHMgPSBpbml0TWVyZ2VQcm9wcyhkaXNwYXRjaCwgb3B0aW9ucyk7XFxuXFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX192ZXJpZnlTdWJzZWxlY3RvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBvcHRpb25zLmRpc3BsYXlOYW1lKTtcXG4gIH1cXG5cXG4gIHZhciBzZWxlY3RvckZhY3RvcnkgPSBvcHRpb25zLnB1cmUgPyBwdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeSA6IGltcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3Rvcnk7XFxuXFxuICByZXR1cm4gc2VsZWN0b3JGYWN0b3J5KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwYXRjaCwgb3B0aW9ucyk7XFxufVxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHZlcmlmeVN1YnNlbGVjdG9ycztcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5cXG5cXG5mdW5jdGlvbiB2ZXJpZnkoc2VsZWN0b3IsIG1ldGhvZE5hbWUsIGRpc3BsYXlOYW1lKSB7XFxuICBpZiAoIXNlbGVjdG9yKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB2YWx1ZSBmb3IgJyArIG1ldGhvZE5hbWUgKyAnIGluICcgKyBkaXNwbGF5TmFtZSArICcuJyk7XFxuICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09ICdtYXBTdGF0ZVRvUHJvcHMnIHx8IG1ldGhvZE5hbWUgPT09ICdtYXBEaXNwYXRjaFRvUHJvcHMnKSB7XFxuICAgIGlmICghc2VsZWN0b3IuaGFzT3duUHJvcGVydHkoJ2RlcGVuZHNPbk93blByb3BzJykpIHtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnVGhlIHNlbGVjdG9yIGZvciAnICsgbWV0aG9kTmFtZSArICcgb2YgJyArIGRpc3BsYXlOYW1lICsgJyBkaWQgbm90IHNwZWNpZnkgYSB2YWx1ZSBmb3IgZGVwZW5kc09uT3duUHJvcHMuJyk7XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuZnVuY3Rpb24gdmVyaWZ5U3Vic2VsZWN0b3JzKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwbGF5TmFtZSkge1xcbiAgdmVyaWZ5KG1hcFN0YXRlVG9Qcm9wcywgJ21hcFN0YXRlVG9Qcm9wcycsIGRpc3BsYXlOYW1lKTtcXG4gIHZlcmlmeShtYXBEaXNwYXRjaFRvUHJvcHMsICdtYXBEaXNwYXRjaFRvUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxuICB2ZXJpZnkobWVyZ2VQcm9wcywgJ21lcmdlUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDIxMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGdldERpc3BsYXlOYW1lID0gZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoQ29tcCkge1xcbiAgcmV0dXJuIENvbXAuZGlzcGxheU5hbWUgfHwgQ29tcC5uYW1lIHx8ICdDb21wb25lbnQnO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0RGlzcGxheU5hbWUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OSk7XFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxuXFxuXFxuXFxudmFyIGhhbmRsZVN1Ym1pdCA9IGZ1bmN0aW9uIGhhbmRsZVN1Ym1pdChzdWJtaXQsIHByb3BzLCB2YWxpZCwgYXN5bmNWYWxpZGF0ZSwgZmllbGRzKSB7XFxuICB2YXIgZGlzcGF0Y2ggPSBwcm9wcy5kaXNwYXRjaCxcXG4gICAgICBvblN1Ym1pdEZhaWwgPSBwcm9wcy5vblN1Ym1pdEZhaWwsXFxuICAgICAgb25TdWJtaXRTdWNjZXNzID0gcHJvcHMub25TdWJtaXRTdWNjZXNzLFxcbiAgICAgIHN0YXJ0U3VibWl0ID0gcHJvcHMuc3RhcnRTdWJtaXQsXFxuICAgICAgc3RvcFN1Ym1pdCA9IHByb3BzLnN0b3BTdWJtaXQsXFxuICAgICAgc2V0U3VibWl0RmFpbGVkID0gcHJvcHMuc2V0U3VibWl0RmFpbGVkLFxcbiAgICAgIHNldFN1Ym1pdFN1Y2NlZWRlZCA9IHByb3BzLnNldFN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICBzeW5jRXJyb3JzID0gcHJvcHMuc3luY0Vycm9ycyxcXG4gICAgICB0b3VjaCA9IHByb3BzLnRvdWNoLFxcbiAgICAgIHZhbHVlcyA9IHByb3BzLnZhbHVlcyxcXG4gICAgICBwZXJzaXN0ZW50U3VibWl0RXJyb3JzID0gcHJvcHMucGVyc2lzdGVudFN1Ym1pdEVycm9ycztcXG5cXG5cXG4gIHRvdWNoLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpOyAvLyBtYXJrIGFsbCBmaWVsZHMgYXMgdG91Y2hlZFxcblxcbiAgaWYgKHZhbGlkIHx8IHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpIHtcXG4gICAgdmFyIGRvU3VibWl0ID0gZnVuY3Rpb24gZG9TdWJtaXQoKSB7XFxuICAgICAgdmFyIHJlc3VsdCA9IHZvaWQgMDtcXG4gICAgICB0cnkge1xcbiAgICAgICAgcmVzdWx0ID0gc3VibWl0KHZhbHVlcywgZGlzcGF0Y2gsIHByb3BzKTtcXG4gICAgICB9IGNhdGNoIChzdWJtaXRFcnJvcikge1xcbiAgICAgICAgdmFyIGVycm9yID0gc3VibWl0RXJyb3IgaW5zdGFuY2VvZiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IHN1Ym1pdEVycm9yLmVycm9ycyA6IHVuZGVmaW5lZDtcXG4gICAgICAgIHN0b3BTdWJtaXQoZXJyb3IpO1xcbiAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICBvblN1Ym1pdEZhaWwoZXJyb3IsIGRpc3BhdGNoLCBzdWJtaXRFcnJvciwgcHJvcHMpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGVycm9yIHx8IG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICAvLyBpZiB5b3UndmUgcHJvdmlkZWQgYW4gb25TdWJtaXRGYWlsIGNhbGxiYWNrLCBkb24ndCByZS10aHJvdyB0aGUgZXJyb3JcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgdGhyb3cgc3VibWl0RXJyb3I7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fX2RlZmF1bHQoKShyZXN1bHQpKSB7XFxuICAgICAgICBzdGFydFN1Ym1pdCgpO1xcbiAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKGZ1bmN0aW9uIChzdWJtaXRSZXN1bHQpIHtcXG4gICAgICAgICAgc3RvcFN1Ym1pdCgpO1xcbiAgICAgICAgICBzZXRTdWJtaXRTdWNjZWVkZWQoKTtcXG4gICAgICAgICAgaWYgKG9uU3VibWl0U3VjY2Vzcykge1xcbiAgICAgICAgICAgIG9uU3VibWl0U3VjY2VzcyhzdWJtaXRSZXN1bHQsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgcmV0dXJuIHN1Ym1pdFJlc3VsdDtcXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzdWJtaXRFcnJvcikge1xcbiAgICAgICAgICB2YXIgZXJyb3IgPSBzdWJtaXRFcnJvciBpbnN0YW5jZW9mIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fU3VibWlzc2lvbkVycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gc3VibWl0RXJyb3IuZXJyb3JzIDogdW5kZWZpbmVkO1xcbiAgICAgICAgICBzdG9wU3VibWl0KGVycm9yKTtcXG4gICAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgICBpZiAob25TdWJtaXRGYWlsKSB7XFxuICAgICAgICAgICAgb25TdWJtaXRGYWlsKGVycm9yLCBkaXNwYXRjaCwgc3VibWl0RXJyb3IsIHByb3BzKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBpZiAoZXJyb3IgfHwgb25TdWJtaXRGYWlsKSB7XFxuICAgICAgICAgICAgLy8gaWYgeW91J3ZlIHByb3ZpZGVkIGFuIG9uU3VibWl0RmFpbCBjYWxsYmFjaywgZG9uJ3QgcmUtdGhyb3cgdGhlIGVycm9yXFxuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRocm93IHN1Ym1pdEVycm9yO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkKCk7XFxuICAgICAgICBpZiAob25TdWJtaXRTdWNjZXNzKSB7XFxuICAgICAgICAgIG9uU3VibWl0U3VjY2VzcyhyZXN1bHQsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgIH07XFxuXFxuICAgIHZhciBhc3luY1ZhbGlkYXRlUmVzdWx0ID0gYXN5bmNWYWxpZGF0ZSAmJiBhc3luY1ZhbGlkYXRlKCk7XFxuICAgIGlmIChhc3luY1ZhbGlkYXRlUmVzdWx0KSB7XFxuICAgICAgcmV0dXJuIGFzeW5jVmFsaWRhdGVSZXN1bHQudGhlbihmdW5jdGlvbiAoYXN5bmNFcnJvcnMpIHtcXG4gICAgICAgIGlmIChhc3luY0Vycm9ycykge1xcbiAgICAgICAgICB0aHJvdyBhc3luY0Vycm9ycztcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkb1N1Ym1pdCgpO1xcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChhc3luY0Vycm9ycykge1xcbiAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICBvblN1Ym1pdEZhaWwoYXN5bmNFcnJvcnMsIGRpc3BhdGNoLCBudWxsLCBwcm9wcyk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYXN5bmNFcnJvcnMpO1xcbiAgICAgIH0pO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJldHVybiBkb1N1Ym1pdCgpO1xcbiAgICB9XFxuICB9IGVsc2Uge1xcbiAgICBzZXRTdWJtaXRGYWlsZWQuYXBwbHkodW5kZWZpbmVkLCBfdG9Db25zdW1hYmxlQXJyYXkoZmllbGRzKSk7XFxuICAgIGlmIChvblN1Ym1pdEZhaWwpIHtcXG4gICAgICBvblN1Ym1pdEZhaWwoc3luY0Vycm9ycywgZGlzcGF0Y2gsIG51bGwsIHByb3BzKTtcXG4gICAgfVxcbiAgICByZXR1cm4gc3luY0Vycm9ycztcXG4gIH1cXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhbmRsZVN1Ym1pdCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9leHRlbmRhYmxlQnVpbHRpbihjbHMpIHtcXG4gIGZ1bmN0aW9uIEV4dGVuZGFibGVCdWlsdGluKCkge1xcbiAgICBjbHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcXG4gIH1cXG5cXG4gIEV4dGVuZGFibGVCdWlsdGluLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY2xzLnByb3RvdHlwZSwge1xcbiAgICBjb25zdHJ1Y3Rvcjoge1xcbiAgICAgIHZhbHVlOiBjbHMsXFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXFxuICAgICAgd3JpdGFibGU6IHRydWUsXFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXFxuICAgIH1cXG4gIH0pO1xcblxcbiAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRXh0ZW5kYWJsZUJ1aWx0aW4sIGNscyk7XFxuICB9IGVsc2Uge1xcbiAgICBFeHRlbmRhYmxlQnVpbHRpbi5fX3Byb3RvX18gPSBjbHM7XFxuICB9XFxuXFxuICByZXR1cm4gRXh0ZW5kYWJsZUJ1aWx0aW47XFxufVxcblxcbnZhciBFeHRlbmRhYmxlRXJyb3IgPSBmdW5jdGlvbiAoX2V4dGVuZGFibGVCdWlsdGluMikge1xcbiAgX2luaGVyaXRzKEV4dGVuZGFibGVFcnJvciwgX2V4dGVuZGFibGVCdWlsdGluMik7XFxuXFxuICBmdW5jdGlvbiBFeHRlbmRhYmxlRXJyb3IoKSB7XFxuICAgIHZhciBtZXNzYWdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcXG5cXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV4dGVuZGFibGVFcnJvcik7XFxuXFxuICAgIC8vIGV4dGVuZGluZyBFcnJvciBpcyB3ZWlyZCBhbmQgZG9lcyBub3QgcHJvcGFnYXRlIGBtZXNzYWdlYFxcbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRXh0ZW5kYWJsZUVycm9yLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRXh0ZW5kYWJsZUVycm9yKSkuY2FsbCh0aGlzLCBtZXNzYWdlKSk7XFxuXFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ21lc3NhZ2UnLCB7XFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxcbiAgICAgIHZhbHVlOiBtZXNzYWdlLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXFxuICAgIH0pO1xcblxcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogX3RoaXMuY29uc3RydWN0b3IubmFtZSxcXG4gICAgICB3cml0YWJsZTogdHJ1ZVxcbiAgICB9KTtcXG5cXG4gICAgaWYgKEVycm9yLmhhc093blByb3BlcnR5KCdjYXB0dXJlU3RhY2tUcmFjZScpKSB7XFxuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoX3RoaXMsIF90aGlzLmNvbnN0cnVjdG9yKTtcXG4gICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMpO1xcbiAgICB9XFxuXFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ3N0YWNrJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogbmV3IEVycm9yKG1lc3NhZ2UpLnN0YWNrLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXFxuICAgIH0pO1xcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICByZXR1cm4gRXh0ZW5kYWJsZUVycm9yO1xcbn0oX2V4dGVuZGFibGVCdWlsdGluKEVycm9yKSk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoRXh0ZW5kYWJsZUVycm9yKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3NpbGVuY2VFdmVudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MCk7XFxuXFxuXFxudmFyIHNpbGVuY2VFdmVudHMgPSBmdW5jdGlvbiBzaWxlbmNlRXZlbnRzKGZuKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zaWxlbmNlRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50KSA/IGZuLmFwcGx5KHVuZGVmaW5lZCwgYXJncykgOiBmbi5hcHBseSh1bmRlZmluZWQsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzaWxlbmNlRXZlbnRzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fKTtcXG5cXG5cXG52YXIgYXN5bmNWYWxpZGF0aW9uID0gZnVuY3Rpb24gYXN5bmNWYWxpZGF0aW9uKGZuLCBzdGFydCwgc3RvcCwgZmllbGQpIHtcXG4gIHN0YXJ0KGZpZWxkKTtcXG4gIHZhciBwcm9taXNlID0gZm4oKTtcXG4gIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0KCkocHJvbWlzZSkpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdhc3luY1ZhbGlkYXRlIGZ1bmN0aW9uIHBhc3NlZCB0byByZWR1eEZvcm0gbXVzdCByZXR1cm4gYSBwcm9taXNlJyk7XFxuICB9XFxuICB2YXIgaGFuZGxlRXJyb3JzID0gZnVuY3Rpb24gaGFuZGxlRXJyb3JzKHJlamVjdGVkKSB7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZXJyb3JzKSB7XFxuICAgICAgaWYgKGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCkge1xcbiAgICAgICAgc3RvcChlcnJvcnMpO1xcbiAgICAgICAgcmV0dXJuIGVycm9ycztcXG4gICAgICB9IGVsc2UgaWYgKHJlamVjdGVkKSB7XFxuICAgICAgICBzdG9wKCk7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FzeW5jaHJvbm91cyB2YWxpZGF0aW9uIHByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGhvdXQgZXJyb3JzLicpO1xcbiAgICAgIH1cXG4gICAgICBzdG9wKCk7XFxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xcbiAgICB9O1xcbiAgfTtcXG4gIHJldHVybiBwcm9taXNlLnRoZW4oaGFuZGxlRXJyb3JzKGZhbHNlKSwgaGFuZGxlRXJyb3JzKHRydWUpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFzeW5jVmFsaWRhdGlvbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUgPSBmdW5jdGlvbiBkZWZhdWx0U2hvdWxkQXN5bmNWYWxpZGF0ZShfcmVmKSB7XFxuICB2YXIgaW5pdGlhbGl6ZWQgPSBfcmVmLmluaXRpYWxpemVkLFxcbiAgICAgIHRyaWdnZXIgPSBfcmVmLnRyaWdnZXIsXFxuICAgICAgcHJpc3RpbmUgPSBfcmVmLnByaXN0aW5lLFxcbiAgICAgIHN5bmNWYWxpZGF0aW9uUGFzc2VzID0gX3JlZi5zeW5jVmFsaWRhdGlvblBhc3NlcztcXG5cXG4gIGlmICghc3luY1ZhbGlkYXRpb25QYXNzZXMpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgc3dpdGNoICh0cmlnZ2VyKSB7XFxuICAgIGNhc2UgJ2JsdXInOlxcbiAgICAgIC8vIGJsdXJyaW5nXFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIGNhc2UgJ3N1Ym1pdCc6XFxuICAgICAgLy8gc3VibWl0dGluZywgc28gb25seSBhc3luYyB2YWxpZGF0ZSBpZiBmb3JtIGlzIGRpcnR5IG9yIHdhcyBuZXZlciBpbml0aWFsaXplZFxcbiAgICAgIC8vIGNvbnZlcnNlbHksIERPTidUIGFzeW5jIHZhbGlkYXRlIGlmIHRoZSBmb3JtIGlzIHByaXN0aW5lIGp1c3QgYXMgaXQgd2FzIGluaXRpYWxpemVkXFxuICAgICAgcmV0dXJuICFwcmlzdGluZSB8fCAhaW5pdGlhbGl6ZWQ7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGRlZmF1bHRTaG91bGRWYWxpZGF0ZSA9IGZ1bmN0aW9uIGRlZmF1bHRTaG91bGRWYWxpZGF0ZShfcmVmKSB7XFxuICB2YXIgdmFsdWVzID0gX3JlZi52YWx1ZXMsXFxuICAgICAgbmV4dFByb3BzID0gX3JlZi5uZXh0UHJvcHMsXFxuICAgICAgaW5pdGlhbFJlbmRlciA9IF9yZWYuaW5pdGlhbFJlbmRlcixcXG4gICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzID0gX3JlZi5sYXN0RmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgIGZpZWxkVmFsaWRhdG9yS2V5cyA9IF9yZWYuZmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgIHN0cnVjdHVyZSA9IF9yZWYuc3RydWN0dXJlO1xcblxcbiAgaWYgKGluaXRpYWxSZW5kZXIpIHtcXG4gICAgcmV0dXJuIHRydWU7XFxuICB9XFxuICByZXR1cm4gIXN0cnVjdHVyZS5kZWVwRXF1YWwodmFsdWVzLCBuZXh0UHJvcHMudmFsdWVzKSB8fCAhc3RydWN0dXJlLmRlZXBFcXVhbChsYXN0RmllbGRWYWxpZGF0b3JLZXlzLCBmaWVsZFZhbGlkYXRvcktleXMpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmYXVsdFNob3VsZFZhbGlkYXRlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxcblxcbnZhciBzcGxpY2UgPSBmdW5jdGlvbiBzcGxpY2UoYXJyYXksIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICBhcnJheSA9IGFycmF5IHx8IFtdO1xcblxcbiAgaWYgKGluZGV4IDwgYXJyYXkubGVuZ3RoKSB7XFxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICFyZW1vdmVOdW0pIHtcXG4gICAgICAvLyBpbnNlcnRpbmcgdW5kZWZpbmVkXFxuICAgICAgdmFyIF9jb3B5MiA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTtcXG4gICAgICBfY29weTIuc3BsaWNlKGluZGV4LCAwLCBudWxsKTtcXG4gICAgICBfY29weTJbaW5kZXhdID0gdW5kZWZpbmVkO1xcbiAgICAgIHJldHVybiBfY29weTI7XFxuICAgIH1cXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcXG4gICAgICB2YXIgX2NvcHkzID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhcnJheSkpO1xcbiAgICAgIF9jb3B5My5zcGxpY2UoaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUpOyAvLyByZW1vdmluZyBhbmQgYWRkaW5nXFxuICAgICAgcmV0dXJuIF9jb3B5MztcXG4gICAgfVxcbiAgICB2YXIgX2NvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICAgIF9jb3B5LnNwbGljZShpbmRleCwgcmVtb3ZlTnVtKTsgLy8gcmVtb3ZpbmdcXG4gICAgcmV0dXJuIF9jb3B5O1xcbiAgfVxcbiAgaWYgKHJlbW92ZU51bSkge1xcbiAgICAvLyB0cnlpbmcgdG8gcmVtb3ZlIG5vbi1leGlzdGFudCBpdGVtOiByZXR1cm4gb3JpZ2luYWwgYXJyYXlcXG4gICAgcmV0dXJuIGFycmF5O1xcbiAgfVxcbiAgLy8gdHJ5aW5nIHRvIGFkZCBvdXRzaWRlIG9mIHJhbmdlOiBqdXN0IHNldCB2YWx1ZVxcbiAgdmFyIGNvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICBjb3B5W2luZGV4XSA9IHZhbHVlO1xcbiAgcmV0dXJuIGNvcHk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzcGxpY2UpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG5cXG52YXIgZ2V0SW4gPSBmdW5jdGlvbiBnZXRJbihzdGF0ZSwgZmllbGQpIHtcXG4gIGlmICghc3RhdGUpIHtcXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcblxcbiAgdmFyIHBhdGggPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKTtcXG4gIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcXG4gIGlmICghbGVuZ3RoKSB7XFxuICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICB9XFxuXFxuICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAmJiAhIXJlc3VsdDsgKytpKSB7XFxuICAgIHJlc3VsdCA9IHJlc3VsdFtwYXRoW2ldXTtcXG4gIH1cXG5cXG4gIHJldHVybiByZXN1bHQ7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRJbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xcblxcblxcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG52YXIgc2V0SW5XaXRoUGF0aCA9IGZ1bmN0aW9uIHNldEluV2l0aFBhdGgoc3RhdGUsIHZhbHVlLCBwYXRoLCBwYXRoSW5kZXgpIHtcXG4gIGlmIChwYXRoSW5kZXggPj0gcGF0aC5sZW5ndGgpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcblxcbiAgdmFyIGZpcnN0ID0gcGF0aFtwYXRoSW5kZXhdO1xcbiAgdmFyIG5leHQgPSBzZXRJbldpdGhQYXRoKHN0YXRlICYmIHN0YXRlW2ZpcnN0XSwgdmFsdWUsIHBhdGgsIHBhdGhJbmRleCArIDEpO1xcblxcbiAgaWYgKCFzdGF0ZSkge1xcbiAgICB2YXIgaW5pdGlhbGl6ZWQgPSBpc05hTihmaXJzdCkgPyB7fSA6IFtdO1xcbiAgICBpbml0aWFsaXplZFtmaXJzdF0gPSBuZXh0O1xcbiAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7XFxuICB9XFxuXFxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZSkpIHtcXG4gICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoc3RhdGUpO1xcbiAgICBjb3B5W2ZpcnN0XSA9IG5leHQ7XFxuICAgIHJldHVybiBjb3B5O1xcbiAgfVxcblxcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgX2RlZmluZVByb3BlcnR5KHt9LCBmaXJzdCwgbmV4dCkpO1xcbn07XFxuXFxudmFyIHNldEluID0gZnVuY3Rpb24gc2V0SW4oc3RhdGUsIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHNldEluV2l0aFBhdGgoc3RhdGUsIHZhbHVlLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKSwgMCk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRJbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Mik7XFxuXFxuXFxuXFxudmFyIGN1c3RvbWl6ZXIgPSBmdW5jdGlvbiBjdXN0b21pemVyKG9iaiwgb3RoZXIpIHtcXG4gIGlmIChvYmogPT09IG90aGVyKSByZXR1cm4gdHJ1ZTtcXG4gIGlmICgob2JqID09IG51bGwgfHwgb2JqID09PSAnJyB8fCBvYmogPT09IGZhbHNlKSAmJiAob3RoZXIgPT0gbnVsbCB8fCBvdGhlciA9PT0gJycgfHwgb3RoZXIgPT09IGZhbHNlKSkgcmV0dXJuIHRydWU7XFxuXFxuICBpZiAob2JqICYmIG90aGVyICYmIG9iai5fZXJyb3IgIT09IG90aGVyLl9lcnJvcikgcmV0dXJuIGZhbHNlO1xcbiAgaWYgKG9iaiAmJiBvdGhlciAmJiBvYmouX3dhcm5pbmcgIT09IG90aGVyLl93YXJuaW5nKSByZXR1cm4gZmFsc2U7XFxufTtcXG5cXG52YXIgZGVlcEVxdWFsID0gZnVuY3Rpb24gZGVlcEVxdWFsKGEsIGIpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoYSwgYiwgY3VzdG9taXplcik7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChkZWVwRXF1YWwpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxudmFyIGRlbGV0ZUluV2l0aFBhdGggPSBmdW5jdGlvbiBkZWxldGVJbldpdGhQYXRoKHN0YXRlLCBmaXJzdCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIHJlc3RbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQgfHwgZmlyc3QgPT09IHVuZGVmaW5lZCkge1xcbiAgICByZXR1cm4gc3RhdGU7XFxuICB9XFxuICBpZiAocmVzdC5sZW5ndGgpIHtcXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgICAgaWYgKGZpcnN0IDwgc3RhdGUubGVuZ3RoKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZSAmJiBzdGF0ZVtmaXJzdF1dLmNvbmNhdChyZXN0KSk7XFxuICAgICAgICBpZiAocmVzdWx0ICE9PSBzdGF0ZVtmaXJzdF0pIHtcXG4gICAgICAgICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHN0YXRlKSk7XFxuICAgICAgICAgIGNvcHlbZmlyc3RdID0gcmVzdWx0O1xcbiAgICAgICAgICByZXR1cm4gY29weTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIHN0YXRlO1xcbiAgICB9XFxuICAgIGlmIChmaXJzdCBpbiBzdGF0ZSkge1xcbiAgICAgIHZhciBfcmVzdWx0ID0gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZSAmJiBzdGF0ZVtmaXJzdF1dLmNvbmNhdChyZXN0KSk7XFxuICAgICAgcmV0dXJuIHN0YXRlW2ZpcnN0XSA9PT0gX3Jlc3VsdCA/IHN0YXRlIDogX2V4dGVuZHMoe30sIHN0YXRlLCBfZGVmaW5lUHJvcGVydHkoe30sIGZpcnN0LCBfcmVzdWx0KSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgIGlmIChpc05hTihmaXJzdCkpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZWxldGUgbm9uLW51bWVyaWNhbCBpbmRleCBmcm9tIGFuIGFycmF5Jyk7XFxuICAgIH1cXG4gICAgaWYgKGZpcnN0IDwgc3RhdGUubGVuZ3RoKSB7XFxuICAgICAgdmFyIF9jb3B5ID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShzdGF0ZSkpO1xcbiAgICAgIF9jb3B5LnNwbGljZShmaXJzdCwgMSk7XFxuICAgICAgcmV0dXJuIF9jb3B5O1xcbiAgICB9XFxuICAgIHJldHVybiBzdGF0ZTtcXG4gIH1cXG4gIGlmIChmaXJzdCBpbiBzdGF0ZSkge1xcbiAgICB2YXIgX2NvcHkyID0gX2V4dGVuZHMoe30sIHN0YXRlKTtcXG4gICAgZGVsZXRlIF9jb3B5MltmaXJzdF07XFxuICAgIHJldHVybiBfY29weTI7XFxuICB9XFxuICByZXR1cm4gc3RhdGU7XFxufTtcXG5cXG52YXIgZGVsZXRlSW4gPSBmdW5jdGlvbiBkZWxldGVJbihzdGF0ZSwgZmllbGQpIHtcXG4gIHJldHVybiBkZWxldGVJbldpdGhQYXRoLmFwcGx5KHVuZGVmaW5lZCwgW3N0YXRlXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZmllbGQpKSkpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVsZXRlSW4pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGtleXMgPSBmdW5jdGlvbiBrZXlzKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPyBPYmplY3Qua2V5cyh2YWx1ZSkgOiBbXTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGtleXMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcbnZhciB0b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xcbn07XFxuXFxudmFyIGdldEVycm9yID0gZnVuY3Rpb24gZ2V0RXJyb3IodmFsdWUsIHZhbHVlcywgcHJvcHMsIHZhbGlkYXRvcnMpIHtcXG4gIHZhciBhcnJheSA9IHRvQXJyYXkodmFsaWRhdG9ycyk7XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBlcnJvciA9IGFycmF5W2ldKHZhbHVlLCB2YWx1ZXMsIHByb3BzKTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICB9XFxuICB9XFxufTtcXG5cXG52YXIgZ2VuZXJhdGVWYWxpZGF0b3IgPSBmdW5jdGlvbiBnZW5lcmF0ZVZhbGlkYXRvcih2YWxpZGF0b3JzLCBfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BzKSB7XFxuICAgIHZhciBlcnJvcnMgPSB7fTtcXG4gICAgT2JqZWN0LmtleXModmFsaWRhdG9ycykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgIHZhciB2YWx1ZSA9IGdldEluKHZhbHVlcywgbmFtZSk7XFxuICAgICAgdmFyIGVycm9yID0gZ2V0RXJyb3IodmFsdWUsIHZhbHVlcywgcHJvcHMsIHZhbGlkYXRvcnNbbmFtZV0pO1xcbiAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgZXJyb3JzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uc2V0SW4oZXJyb3JzLCBuYW1lLCBlcnJvcik7XFxuICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIGVycm9ycztcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZW5lcmF0ZVZhbGlkYXRvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjI2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgZ2V0RXJyb3JLZXlzID0gZnVuY3Rpb24gZ2V0RXJyb3JLZXlzKG5hbWUsIHR5cGUpIHtcXG4gIHN3aXRjaCAodHlwZSkge1xcbiAgICBjYXNlICdGaWVsZCc6XFxuICAgICAgcmV0dXJuIFtuYW1lLCBuYW1lICsgJy5fZXJyb3InXTtcXG4gICAgY2FzZSAnRmllbGRBcnJheSc6XFxuICAgICAgcmV0dXJuIFtuYW1lICsgJy5fZXJyb3InXTtcXG4gICAgZGVmYXVsdDpcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZmllbGQgdHlwZScpO1xcbiAgfVxcbn07XFxuXFxudmFyIGNyZWF0ZUhhc0Vycm9yID0gZnVuY3Rpb24gY3JlYXRlSGFzRXJyb3IoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG5cXG4gIHZhciBoYXNFcnJvciA9IGZ1bmN0aW9uIGhhc0Vycm9yKGZpZWxkLCBzeW5jRXJyb3JzLCBhc3luY0Vycm9ycywgc3VibWl0RXJyb3JzKSB7XFxuICAgIGlmICghc3luY0Vycm9ycyAmJiAhYXN5bmNFcnJvcnMgJiYgIXN1Ym1pdEVycm9ycykge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcblxcbiAgICB2YXIgbmFtZSA9IGdldEluKGZpZWxkLCAnbmFtZScpO1xcbiAgICB2YXIgdHlwZSA9IGdldEluKGZpZWxkLCAndHlwZScpO1xcbiAgICByZXR1cm4gZ2V0RXJyb3JLZXlzKG5hbWUsIHR5cGUpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzeW5jRXJyb3JzLCBrZXkpIHx8IGdldEluKGFzeW5jRXJyb3JzLCBrZXkpIHx8IGdldEluKHN1Ym1pdEVycm9ycywga2V5KTtcXG4gICAgfSk7XFxuICB9O1xcbiAgcmV0dXJuIGhhc0Vycm9yO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzRXJyb3IpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZUZpZWxkID0gZnVuY3Rpb24gY3JlYXRlRmllbGQoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBzZXRJbiA9IF9yZWYuc2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYudG9KUztcXG5cXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsLFxcbiAgICBnZXRJbjogZ2V0SW4sXFxuICAgIHRvSlM6IHRvSlNcXG4gIH0pO1xcblxcbiAgdmFyIEZpZWxkID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKEZpZWxkLCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGQocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGQpO1xcblxcbiAgICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGaWVsZC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkIG11c3QgYmUgaW5zaWRlIGEgY29tcG9uZW50IGRlY29yYXRlZCB3aXRoIHJlZHV4Rm9ybSgpJyk7XFxuICAgICAgfVxcblxcbiAgICAgIF90aGlzLm5vcm1hbGl6ZSA9IF90aGlzLm5vcm1hbGl6ZS5iaW5kKF90aGlzKTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkLCBbe1xcbiAgICAgIGtleTogJ3Nob3VsZENvbXBvbmVudFVwZGF0ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIG5leHRQcm9wcywgbmV4dFN0YXRlKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyKHRoaXMubmFtZSwgJ0ZpZWxkJywgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnByb3BzLnZhbGlkYXRlO1xcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnByb3BzLndhcm47XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm5hbWUgIT09IG5leHRQcm9wcy5uYW1lKSB7XFxuICAgICAgICAgIC8vIHVucmVnaXN0ZXIgb2xkIG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgICAgICAvLyByZWdpc3RlciBuZXcgbmFtZVxcbiAgICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgbmV4dFByb3BzLm5hbWUpLCAnRmllbGQnKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHRoaXMucHJvcHMud2l0aFJlZiwgJ0lmIHlvdSB3YW50IHRvIGFjY2VzcyBnZXRSZW5kZXJlZENvbXBvbmVudCgpLCAnICsgJ3lvdSBtdXN0IHNwZWNpZnkgYSB3aXRoUmVmIHByb3AgdG8gRmllbGQnKTtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFJlbmRlcmVkQ29tcG9uZW50KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbm9ybWFsaXplJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gbm9ybWFsaXplKG5hbWUsIHZhbHVlKSB7XFxuICAgICAgICB2YXIgbm9ybWFsaXplID0gdGhpcy5wcm9wcy5ub3JtYWxpemU7XFxuXFxuICAgICAgICBpZiAoIW5vcm1hbGl6ZSkge1xcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5nZXRWYWx1ZXMoKTtcXG4gICAgICAgIHZhciBwcmV2aW91c1ZhbHVlID0gdGhpcy52YWx1ZTtcXG4gICAgICAgIHZhciBuZXh0VmFsdWVzID0gc2V0SW4ocHJldmlvdXNWYWx1ZXMsIG5hbWUsIHZhbHVlKTtcXG4gICAgICAgIHJldHVybiBub3JtYWxpemUodmFsdWUsIHByZXZpb3VzVmFsdWUsIG5leHRWYWx1ZXMsIHByZXZpb3VzVmFsdWVzKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKENvbm5lY3RlZEZpZWxkLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXFxuICAgICAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLmNvbnRleHQsIHRoaXMucHJvcHMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZGlydHknLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuICF0aGlzLnByaXN0aW5lO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZCAmJiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlKCk7XFxuICAgICAgfVxcbiAgICB9XSk7XFxuXFxuICAgIHJldHVybiBGaWVsZDtcXG4gIH0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG4gIEZpZWxkLnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZy5pc1JlcXVpcmVkLFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUoW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nXSkuaXNSZXF1aXJlZCxcXG4gICAgZm9ybWF0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgbm9ybWFsaXplOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25CbHVyOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25DaGFuZ2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBvbkZvY3VzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25EcmFnU3RhcnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBvbkRyb3A6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwYXJzZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB2YWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5hcnJheU9mKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jKV0pLFxcbiAgICB3YXJuOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmFycmF5T2YoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMpXSksXFxuICAgIHdpdGhSZWY6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sXFxuICB9O1xcbiAgRmllbGQuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY3JlYXRlRmllbGRQcm9wc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMxKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gWydfcmVkdXhGb3JtJ107XFxuXFxudmFyIGNyZWF0ZUNvbm5lY3RlZEZpZWxkID0gZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGVkRmllbGQoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIHZhciBlcnJvciA9IGdldEluKHN5bmNFcnJvcnMsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSBlcnJvciBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgZXJyb3Igc3RydWN0dXJlIHdoZXJlXFxuICAgIC8vIGl0IGNhbiBiZSBzZXQgZGlyZWN0bHksIGl0IG1pZ2h0IG5lZWQgdG8gYmUgdW53cmFwcGVkIGZyb20gdGhlIF9lcnJvciBwcm9wZXJ0eVxcbiAgICByZXR1cm4gZXJyb3IgJiYgZXJyb3IuX2Vycm9yID8gZXJyb3IuX2Vycm9yIDogZXJyb3I7XFxuICB9O1xcblxcbiAgdmFyIGdldFN5bmNXYXJuaW5nID0gZnVuY3Rpb24gZ2V0U3luY1dhcm5pbmcoc3luY1dhcm5pbmdzLCBuYW1lKSB7XFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lKTtcXG4gICAgLy8gQmVjYXVzZSB0aGUgd2FybmluZyBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgd2FybmluZyBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX3dhcm5pbmcgcHJvcGVydHlcXG4gICAgcmV0dXJuIHdhcm5pbmcgJiYgd2FybmluZy5fd2FybmluZyA/IHdhcm5pbmcuX3dhcm5pbmcgOiB3YXJuaW5nO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZCwgX0NvbXBvbmVudCk7XFxuXFxuICAgIGZ1bmN0aW9uIENvbm5lY3RlZEZpZWxkKHByb3BzKSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbm5lY3RlZEZpZWxkKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihDb25uZWN0ZWRGaWVsZCkpLmNhbGwodGhpcywgcHJvcHMpKTtcXG5cXG4gICAgICBfdGhpcy5oYW5kbGVDaGFuZ2UgPSBfdGhpcy5oYW5kbGVDaGFuZ2UuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRm9jdXMgPSBfdGhpcy5oYW5kbGVGb2N1cy5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVCbHVyID0gX3RoaXMuaGFuZGxlQmx1ci5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVEcmFnU3RhcnQgPSBfdGhpcy5oYW5kbGVEcmFnU3RhcnQuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRHJvcCA9IF90aGlzLmhhbmRsZURyb3AuYmluZChfdGhpcyk7XFxuICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuXFxuICAgIF9jcmVhdGVDbGFzcyhDb25uZWN0ZWRGaWVsZCwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHZhciBuZXh0UHJvcHNLZXlzID0gT2JqZWN0LmtleXMobmV4dFByb3BzKTtcXG4gICAgICAgIHZhciB0aGlzUHJvcHNLZXlzID0gT2JqZWN0LmtleXModGhpcy5wcm9wcyk7XFxuICAgICAgICByZXR1cm4gbmV4dFByb3BzS2V5cy5sZW5ndGggIT09IHRoaXNQcm9wc0tleXMubGVuZ3RoIHx8IG5leHRQcm9wc0tleXMuc29tZShmdW5jdGlvbiAocHJvcCkge1xcbiAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczIucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdpc1ByaXN0aW5lJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaXNQcmlzdGluZSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnByaXN0aW5lO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFZhbHVlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVDaGFuZ2UnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcXG4gICAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMubmFtZSxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wcy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wcy5wYXJzZSxcXG4gICAgICAgICAgICBub3JtYWxpemUgPSBfcHJvcHMubm9ybWFsaXplLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlID0gX3Byb3BzLm9uQ2hhbmdlLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlID0gX3Byb3BzLnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xcbiAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XFxuICAgICAgICAgIG9uQ2hhbmdlKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZSBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5jaGFuZ2UobmFtZSwgbmV3VmFsdWUpKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVGb2N1cycsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wczIubmFtZSxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wczIuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgb25Gb2N1cyA9IF9wcm9wczIub25Gb2N1cyxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMi5fcmVkdXhGb3JtO1xcblxcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkZvY3VzKSB7XFxuICAgICAgICAgIG9uRm9jdXMoX2V4dGVuZHMoe30sIGV2ZW50LCB7XFxuICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XFxuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCkge1xcbiAgICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmZvY3VzKG5hbWUpKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVCbHVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMzLm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMzLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIHBhcnNlID0gX3Byb3BzMy5wYXJzZSxcXG4gICAgICAgICAgICBub3JtYWxpemUgPSBfcHJvcHMzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBvbkJsdXIgPSBfcHJvcHMzLm9uQmx1cixcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMy5fcmVkdXhGb3JtLFxcbiAgICAgICAgICAgIF92YWx1ZSA9IF9wcm9wczMuX3ZhbHVlLFxcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSBfcHJvcHMzLnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICAvLyBmb3IgY2hlY2tib3ggYW5kIHJhZGlvLCBpZiB0aGUgdmFsdWUgcHJvcGVydHkgb2YgY2hlY2tib3ggb3IgcmFkaW8gZXF1YWxzXFxuICAgICAgICAvLyB0aGUgdmFsdWUgcGFzc2VkIGJ5IGJsdXIgZXZlbnQsIHRoZW4gZmlyZSBibHVyIGFjdGlvbiB3aXRoIHByZXZpb3VzVmFsdWUuXFxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IF92YWx1ZSAmJiBfdmFsdWUgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZpb3VzVmFsdWU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xcbiAgICAgICAgaWYgKG9uQmx1cikge1xcbiAgICAgICAgICBvbkJsdXIoX2V4dGVuZHMoe30sIGV2ZW50LCB7XFxuICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XFxuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pLCBuZXdWYWx1ZSwgcHJldmlvdXNWYWx1ZSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoIWRlZmF1bHRQcmV2ZW50ZWQpIHtcXG4gICAgICAgICAgLy8gZGlzcGF0Y2ggYmx1ciBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5ibHVyKG5hbWUsIG5ld1ZhbHVlKSk7XFxuXFxuICAgICAgICAgIC8vIGNhbGwgcG9zdC1ibHVyIGNhbGxiYWNrXFxuICAgICAgICAgIGlmIChfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgICBfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUobmFtZSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRHJhZ1N0YXJ0JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRHJhZ1N0YXJ0KGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzNCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPSBfcHJvcHM0Lm9uRHJhZ1N0YXJ0LFxcbiAgICAgICAgICAgIHZhbHVlID0gX3Byb3BzNC52YWx1ZTtcXG5cXG4gICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9ldmVudENvbnN0c19fW1xcXCJhXFxcIiAvKiBkYXRhS2V5ICovXSwgdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xcblxcbiAgICAgICAgaWYgKG9uRHJhZ1N0YXJ0KSB7XFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0KGV2ZW50KTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVEcm9wJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRHJvcChldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczUgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHM1Lm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHM1LmRpc3BhdGNoLFxcbiAgICAgICAgICAgIG9uRHJvcCA9IF9wcm9wczUub25Ecm9wLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM1Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IF9wcm9wczUudmFsdWU7XFxuXFxuICAgICAgICB2YXIgbmV3VmFsdWUgPSBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfX1tcXFwiYVxcXCIgLyogZGF0YUtleSAqL10pO1xcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkRyb3ApIHtcXG4gICAgICAgICAgb25Ecm9wKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZSBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5jaGFuZ2UobmFtZSwgbmV3VmFsdWUpKTtcXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgX3Byb3BzNiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzNi5jb21wb25lbnQsXFxuICAgICAgICAgICAgd2l0aFJlZiA9IF9wcm9wczYud2l0aFJlZixcXG4gICAgICAgICAgICBuYW1lID0gX3Byb3BzNi5uYW1lLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM2Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzNi5ub3JtYWxpemUsXFxuICAgICAgICAgICAgb25CbHVyID0gX3Byb3BzNi5vbkJsdXIsXFxuICAgICAgICAgICAgb25DaGFuZ2UgPSBfcHJvcHM2Lm9uQ2hhbmdlLFxcbiAgICAgICAgICAgIG9uRm9jdXMgPSBfcHJvcHM2Lm9uRm9jdXMsXFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPSBfcHJvcHM2Lm9uRHJhZ1N0YXJ0LFxcbiAgICAgICAgICAgIG9uRHJvcCA9IF9wcm9wczYub25Ecm9wLFxcbiAgICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzNiwgWydjb21wb25lbnQnLCAnd2l0aFJlZicsICduYW1lJywgJ19yZWR1eEZvcm0nLCAnbm9ybWFsaXplJywgJ29uQmx1cicsICdvbkNoYW5nZScsICdvbkZvY3VzJywgJ29uRHJhZ1N0YXJ0JywgJ29uRHJvcCddKTtcXG5cXG4gICAgICAgIHZhciBfY3JlYXRlRmllbGRQcm9wcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHsgZ2V0SW46IGdldEluLCB0b0pTOiB0b0pTIH0sIG5hbWUsIF9leHRlbmRzKHt9LCByZXN0LCB7XFxuICAgICAgICAgIGZvcm06IF9yZWR1eEZvcm0uZm9ybSxcXG4gICAgICAgICAgb25CbHVyOiB0aGlzLmhhbmRsZUJsdXIsXFxuICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZSxcXG4gICAgICAgICAgb25Ecm9wOiB0aGlzLmhhbmRsZURyb3AsXFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0OiB0aGlzLmhhbmRsZURyYWdTdGFydCxcXG4gICAgICAgICAgb25Gb2N1czogdGhpcy5oYW5kbGVGb2N1c1xcbiAgICAgICAgfSkpLFxcbiAgICAgICAgICAgIGN1c3RvbSA9IF9jcmVhdGVGaWVsZFByb3BzLmN1c3RvbSxcXG4gICAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY3JlYXRlRmllbGRQcm9wcywgWydjdXN0b20nXSk7XFxuXFxuICAgICAgICBpZiAod2l0aFJlZikge1xcbiAgICAgICAgICBjdXN0b20ucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnc3RyaW5nJykge1xcbiAgICAgICAgICB2YXIgaW5wdXQgPSBwcm9wcy5pbnB1dCxcXG4gICAgICAgICAgICAgIG1ldGEgPSBwcm9wcy5tZXRhOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXFxuICAgICAgICAgIC8vIGZsYXR0ZW4gaW5wdXQgaW50byBvdGhlciBwcm9wc1xcblxcbiAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKGNvbXBvbmVudCwgX2V4dGVuZHMoe30sIGlucHV0LCBjdXN0b20pKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIGN1c3RvbSkpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gQ29ubmVjdGVkRmllbGQ7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBDb25uZWN0ZWRGaWVsZC5wcm9wVHlwZXMgPSB7XFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBwcm9wczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdFxcbiAgfTtcXG5cXG4gIHZhciBjb25uZWN0b3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X3JlZHV4X19bXFxcImFcXFwiIC8qIGNvbm5lY3QgKi9dKShmdW5jdGlvbiAoc3RhdGUsIG93blByb3BzKSB7XFxuICAgIHZhciBuYW1lID0gb3duUHJvcHMubmFtZSxcXG4gICAgICAgIF9vd25Qcm9wcyRfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX293blByb3BzJF9yZWR1eEZvcm0uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ2luaXRpYWwuJyArIG5hbWUpO1xcbiAgICB2YXIgaW5pdGlhbCA9IGluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5pdGlhbFN0YXRlIDogaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgdmFyIHZhbHVlID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzLicgKyBuYW1lKTtcXG4gICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgIHZhciBzeW5jRXJyb3IgPSBnZXRTeW5jRXJyb3IoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpLCBuYW1lKTtcXG4gICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICB2YXIgcHJpc3RpbmUgPSBkZWVwRXF1YWwodmFsdWUsIGluaXRpYWwpO1xcbiAgICByZXR1cm4ge1xcbiAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICBhc3luY1ZhbGlkYXRpbmc6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycpID09PSBuYW1lLFxcbiAgICAgIGRpcnR5OiAhcHJpc3RpbmUsXFxuICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgIHN0YXRlOiBnZXRJbihmb3JtU3RhdGUsICdmaWVsZHMuJyArIG5hbWUpLFxcbiAgICAgIHN1Ym1pdEVycm9yOiBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRFcnJvcnMuJyArIG5hbWUpLFxcbiAgICAgIHN1Ym1pdEZhaWxlZDogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyksXFxuICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3I6IHN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZzogc3luY1dhcm5pbmcsXFxuICAgICAgdmFsdWU6IHZhbHVlLFxcbiAgICAgIF92YWx1ZTogb3duUHJvcHMudmFsdWUgLy8gc2F2ZSB2YWx1ZSBwYXNzZWQgaW4gKGZvciBjaGVja2JveGVzKVxcbiAgICB9O1xcbiAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgd2l0aFJlZjogdHJ1ZSB9KTtcXG4gIHJldHVybiBjb25uZWN0b3IoQ29ubmVjdGVkRmllbGQpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdGVkRmllbGQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNFdmVudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MSk7XFxuXFxuXFxudmFyIGdldFNlbGVjdGVkVmFsdWVzID0gZnVuY3Rpb24gZ2V0U2VsZWN0ZWRWYWx1ZXMob3B0aW9ucykge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKG9wdGlvbnMpIHtcXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG9wdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XFxuICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnNbaW5kZXhdO1xcbiAgICAgIGlmIChvcHRpb24uc2VsZWN0ZWQpIHtcXG4gICAgICAgIHJlc3VsdC5wdXNoKG9wdGlvbi52YWx1ZSk7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn07XFxuXFxudmFyIGdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoZXZlbnQsIGlzUmVhY3ROYXRpdmUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0V2ZW50X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCkpIHtcXG4gICAgaWYgKCFpc1JlYWN0TmF0aXZlICYmIGV2ZW50Lm5hdGl2ZUV2ZW50ICYmIGV2ZW50Lm5hdGl2ZUV2ZW50LnRleHQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJldHVybiBldmVudC5uYXRpdmVFdmVudC50ZXh0O1xcbiAgICB9XFxuICAgIGlmIChpc1JlYWN0TmF0aXZlICYmIGV2ZW50Lm5hdGl2ZUV2ZW50ICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICByZXR1cm4gZXZlbnQubmF0aXZlRXZlbnQudGV4dDtcXG4gICAgfVxcbiAgICB2YXIgX2V2ZW50JHRhcmdldCA9IGV2ZW50LnRhcmdldCxcXG4gICAgICAgIHR5cGUgPSBfZXZlbnQkdGFyZ2V0LnR5cGUsXFxuICAgICAgICB2YWx1ZSA9IF9ldmVudCR0YXJnZXQudmFsdWUsXFxuICAgICAgICBjaGVja2VkID0gX2V2ZW50JHRhcmdldC5jaGVja2VkLFxcbiAgICAgICAgZmlsZXMgPSBfZXZlbnQkdGFyZ2V0LmZpbGVzLFxcbiAgICAgICAgZGF0YVRyYW5zZmVyID0gZXZlbnQuZGF0YVRyYW5zZmVyO1xcblxcbiAgICBpZiAodHlwZSA9PT0gJ2NoZWNrYm94Jykge1xcbiAgICAgIHJldHVybiBjaGVja2VkO1xcbiAgICB9XFxuICAgIGlmICh0eXBlID09PSAnZmlsZScpIHtcXG4gICAgICByZXR1cm4gZmlsZXMgfHwgZGF0YVRyYW5zZmVyICYmIGRhdGFUcmFuc2Zlci5maWxlcztcXG4gICAgfVxcbiAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdC1tdWx0aXBsZScpIHtcXG4gICAgICByZXR1cm4gZ2V0U2VsZWN0ZWRWYWx1ZXMoZXZlbnQudGFyZ2V0Lm9wdGlvbnMpO1xcbiAgICB9XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBldmVudDtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFZhbHVlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBpc1JlYWN0TmF0aXZlID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnByb2R1Y3QgJiYgd2luZG93Lm5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzUmVhY3ROYXRpdmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGF0YUtleTsgfSk7XFxudmFyIGRhdGFLZXkgPSAndGV4dCc7XFxuXFxuLyoqKi8gfSksXFxuLyogMjMyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciB2YWxpZGF0ZU5hbWVQcm9wID0gZnVuY3Rpb24gdmFsaWRhdGVOYW1lUHJvcChwcm9wKSB7XFxuICBpZiAoIXByb3ApIHtcXG4gICAgcmV0dXJuIG5ldyBFcnJvcignTm8gXFxcIm5hbWVzXFxcIiBwcm9wIHdhcyBzcGVjaWZpZWQgPEZpZWxkcy8+Jyk7XFxuICB9XFxuICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcCkgJiYgIXByb3AuX2lzRmllbGRBcnJheSkge1xcbiAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkIHByb3AgXFxcIm5hbWVzXFxcIiBzdXBwbGllZCB0byA8RmllbGRzLz4uIE11c3QgYmUgZWl0aGVyIGFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgdGhlIGZpZWxkcyBhcnJheSBnZW5lcmF0ZWQgYnkgRmllbGRBcnJheS4nKTtcXG4gIH1cXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZHMgPSBmdW5jdGlvbiBjcmVhdGVGaWVsZHMoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTLFxcbiAgICAgIHNpemUgPSBfcmVmLnNpemU7XFxuXFxuXFxuICB2YXIgQ29ubmVjdGVkRmllbGRzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsLFxcbiAgICBnZXRJbjogZ2V0SW4sXFxuICAgIHRvSlM6IHRvSlMsXFxuICAgIHNpemU6IHNpemVcXG4gIH0pO1xcblxcbiAgdmFyIEZpZWxkcyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZHMsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBGaWVsZHMocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGRzKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGRzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRmllbGRzKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkcyBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkcywgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsX3NoYWxsb3dDb21wYXJlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBuZXh0UHJvcHMsIG5leHRTdGF0ZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgICAgdmFyIGVycm9yID0gdmFsaWRhdGVOYW1lUHJvcCh0aGlzLnByb3BzLm5hbWVzKTtcXG4gICAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xcbiAgICAgICAgdmFyIHJlZ2lzdGVyID0gY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyO1xcblxcbiAgICAgICAgdGhpcy5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiByZWdpc3RlcihuYW1lLCAnRmllbGQnKTtcXG4gICAgICAgIH0pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgaWYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwodGhpcy5wcm9wcy5uYW1lcywgbmV4dFByb3BzLm5hbWVzKSkge1xcbiAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgICAgdmFyIF9jb250ZXh0JF9yZWR1eEZvcm0gPSBjb250ZXh0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgICByZWdpc3RlciA9IF9jb250ZXh0JF9yZWR1eEZvcm0ucmVnaXN0ZXIsXFxuICAgICAgICAgICAgICB1bnJlZ2lzdGVyID0gX2NvbnRleHQkX3JlZHV4Rm9ybS51bnJlZ2lzdGVyO1xcbiAgICAgICAgICAvLyB1bnJlZ2lzdGVyIG9sZCBuYW1lXFxuXFxuICAgICAgICAgIHRoaXMucHJvcHMubmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgIHJldHVybiB1bnJlZ2lzdGVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSkpO1xcbiAgICAgICAgICB9KTtcXG4gICAgICAgICAgLy8gcmVnaXN0ZXIgbmV3IG5hbWVcXG4gICAgICAgICAgbmV4dFByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKSwgJ0ZpZWxkJyk7XFxuICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgIHZhciB1bnJlZ2lzdGVyID0gY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXI7XFxuXFxuICAgICAgICB0aGlzLnByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIHVucmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh0aGlzLnByb3BzLndpdGhSZWYsICdJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZ2V0UmVuZGVyZWRDb21wb25lbnQoKSwgJyArICd5b3UgbXVzdCBzcGVjaWZ5IGEgd2l0aFJlZiBwcm9wIHRvIEZpZWxkcycpO1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0UmVuZGVyZWRDb21wb25lbnQoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG5cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRmllbGRzLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICBuYW1lczogdGhpcy5wcm9wcy5uYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKTtcXG4gICAgICAgICAgfSksXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZXMnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XFxuXFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5uYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5pc0RpcnR5KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncHJpc3RpbmUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuICF0aGlzLmRpcnR5O1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ZhbHVlcycsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZCAmJiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlcygpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gRmllbGRzO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgRmllbGRzLnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZXM6IGZ1bmN0aW9uIG5hbWVzKHByb3BzLCBwcm9wTmFtZSkge1xcbiAgICAgIHJldHVybiB2YWxpZGF0ZU5hbWVQcm9wKHByb3BzW3Byb3BOYW1lXSk7XFxuICAgIH0sXFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBmb3JtYXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwYXJzZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkcy5jb250ZXh0VHlwZXMgPSB7XFxuICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICByZXR1cm4gRmllbGRzO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NCk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgcHJvcHNUb05vdFVwZGF0ZUZvciA9IFsnX3JlZHV4Rm9ybSddO1xcblxcbnZhciBjcmVhdGVDb25uZWN0ZWRGaWVsZHMgPSBmdW5jdGlvbiBjcmVhdGVDb25uZWN0ZWRGaWVsZHMoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTLFxcbiAgICAgIHNpemUgPSBfcmVmLnNpemU7XFxuXFxuXFxuICB2YXIgZ2V0U3luY0Vycm9yID0gZnVuY3Rpb24gZ2V0U3luY0Vycm9yKHN5bmNFcnJvcnMsIG5hbWUpIHtcXG4gICAgdmFyIGVycm9yID0gZ2V0SW4oc3luY0Vycm9ycywgbmFtZSk7XFxuICAgIC8vIEJlY2F1c2UgdGhlIGVycm9yIGZvciB0aGlzIGZpZWxkIG1pZ2h0IG5vdCBiZSBhdCBhIGxldmVsIGluIHRoZSBlcnJvciBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX2Vycm9yIHByb3BlcnR5XFxuICAgIHJldHVybiBlcnJvciAmJiBlcnJvci5fZXJyb3IgPyBlcnJvci5fZXJyb3IgOiBlcnJvcjtcXG4gIH07XFxuXFxuICB2YXIgZ2V0U3luY1dhcm5pbmcgPSBmdW5jdGlvbiBnZXRTeW5jV2FybmluZyhzeW5jV2FybmluZ3MsIG5hbWUpIHtcXG4gICAgdmFyIHdhcm5pbmcgPSBnZXRJbihzeW5jV2FybmluZ3MsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSB3YXJuaW5nIGZvciB0aGlzIGZpZWxkIG1pZ2h0IG5vdCBiZSBhdCBhIGxldmVsIGluIHRoZSB3YXJuaW5nIHN0cnVjdHVyZSB3aGVyZVxcbiAgICAvLyBpdCBjYW4gYmUgc2V0IGRpcmVjdGx5LCBpdCBtaWdodCBuZWVkIHRvIGJlIHVud3JhcHBlZCBmcm9tIHRoZSBfd2FybmluZyBwcm9wZXJ0eVxcbiAgICByZXR1cm4gd2FybmluZyAmJiB3YXJuaW5nLl93YXJuaW5nID8gd2FybmluZy5fd2FybmluZyA6IHdhcm5pbmc7XFxuICB9O1xcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkcyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZHMsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZHMocHJvcHMpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdGVkRmllbGRzKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGRzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ29ubmVjdGVkRmllbGRzKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xcblxcbiAgICAgIF90aGlzLmhhbmRsZUNoYW5nZSA9IF90aGlzLmhhbmRsZUNoYW5nZS5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVGb2N1cyA9IF90aGlzLmhhbmRsZUZvY3VzLmJpbmQoX3RoaXMpO1xcbiAgICAgIF90aGlzLmhhbmRsZUJsdXIgPSBfdGhpcy5oYW5kbGVCbHVyLmJpbmQoX3RoaXMpO1xcblxcbiAgICAgIF90aGlzLm9uQ2hhbmdlRm5zID0gcHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlQ2hhbmdlKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgIH0sIHt9KTtcXG5cXG4gICAgICBfdGhpcy5vbkZvY3VzRm5zID0gcHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUZvY3VzKG5hbWUpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgfSwge30pO1xcblxcbiAgICAgIF90aGlzLm9uQmx1ckZucyA9IHByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUJsdXIobmFtZSwgZXZlbnQpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgfSwge30pO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGRzLCBbe1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICBpZiAodGhpcy5wcm9wcy5uYW1lcyAhPT0gbmV4dFByb3BzLm5hbWVzICYmIChzaXplKHRoaXMucHJvcHMubmFtZXMpICE9PSBzaXplKG5leHRQcm9wcy5uYW1lcykgfHwgbmV4dFByb3BzLm5hbWVzLnNvbWUoZnVuY3Rpb24gKG5leHROYW1lKSB7XFxuICAgICAgICAgIHJldHVybiAhX3RoaXMyLnByb3BzLl9maWVsZHNbbmV4dE5hbWVdO1xcbiAgICAgICAgfSkpKSB7XFxuXFxuICAgICAgICAgIC8vIG5hbWVzIGlzIGNoYW5nZWQuIFRoZSBjYWNoZWQgZXZlbnQgaGFuZGxlcnMgbmVlZCB0byBiZSB1cGRhdGVkXFxuICAgICAgICAgIHRoaXMub25DaGFuZ2VGbnMgPSBuZXh0UHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQ2hhbmdlKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgIH0sIHt9KTtcXG5cXG4gICAgICAgICAgdGhpcy5vbkZvY3VzRm5zID0gbmV4dFByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICAgICAgYWNjW25hbWVdID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5oYW5kbGVGb2N1cyhuYW1lKTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgIH0sIHt9KTtcXG5cXG4gICAgICAgICAgdGhpcy5vbkJsdXJGbnMgPSBuZXh0UHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQmx1cihuYW1lLCBldmVudCk7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgICAgICB9LCB7fSk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XFxuXFxuICAgICAgICB2YXIgbmV4dFByb3BzS2V5cyA9IE9iamVjdC5rZXlzKG5leHRQcm9wcyk7XFxuICAgICAgICB2YXIgdGhpc1Byb3BzS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucHJvcHMpO1xcbiAgICAgICAgcmV0dXJuIG5leHRQcm9wc0tleXMubGVuZ3RoICE9PSB0aGlzUHJvcHNLZXlzLmxlbmd0aCB8fCBuZXh0UHJvcHNLZXlzLnNvbWUoZnVuY3Rpb24gKHByb3ApIHtcXG4gICAgICAgICAgcmV0dXJuICF+cHJvcHNUb05vdFVwZGF0ZUZvci5pbmRleE9mKHByb3ApICYmICFkZWVwRXF1YWwoX3RoaXMzLnByb3BzW3Byb3BdLCBuZXh0UHJvcHNbcHJvcF0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaXNEaXJ0eScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRGlydHkoKSB7XFxuICAgICAgICB2YXIgX2ZpZWxkcyA9IHRoaXMucHJvcHMuX2ZpZWxkcztcXG5cXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhfZmllbGRzKS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiBfZmllbGRzW25hbWVdLmRpcnR5O1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0VmFsdWVzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWVzKCkge1xcbiAgICAgICAgdmFyIF9maWVsZHMgPSB0aGlzLnByb3BzLl9maWVsZHM7XFxuXFxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX2ZpZWxkcykucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgbmFtZSkge1xcbiAgICAgICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uc2V0SW4oYWNjdW11bGF0b3IsIG5hbWUsIF9maWVsZHNbbmFtZV0udmFsdWUpO1xcbiAgICAgICAgfSwge30pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLnJlbmRlcmVkQ29tcG9uZW50O1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2hhbmRsZUNoYW5nZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShuYW1lLCBldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgcGFyc2UgPSBfcHJvcHMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIHsgbmFtZTogbmFtZSwgcGFyc2U6IHBhcnNlLCBub3JtYWxpemU6IG5vcm1hbGl6ZSB9KTtcXG5cXG4gICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uY2hhbmdlKG5hbWUsIHZhbHVlKSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRm9jdXMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhuYW1lKSB7XFxuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMyLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMyLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmZvY3VzKG5hbWUpKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVCbHVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cihuYW1lLCBldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzMy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wczMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzMy5ub3JtYWxpemUsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczMuX3JlZHV4Rm9ybTtcXG5cXG4gICAgICAgIHZhciB2YWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2V2ZW50c19vbkNoYW5nZVZhbHVlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCwgeyBuYW1lOiBuYW1lLCBwYXJzZTogcGFyc2UsIG5vcm1hbGl6ZTogbm9ybWFsaXplIH0pO1xcblxcbiAgICAgICAgLy8gZGlzcGF0Y2ggYmx1ciBhY3Rpb25cXG4gICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uYmx1cihuYW1lLCB2YWx1ZSkpO1xcblxcbiAgICAgICAgLy8gY2FsbCBwb3N0LWJsdXIgY2FsbGJhY2tcXG4gICAgICAgIGlmIChfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgX3JlZHV4Rm9ybS5hc3luY1ZhbGlkYXRlKG5hbWUsIHZhbHVlKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgX3RoaXM0ID0gdGhpcztcXG5cXG4gICAgICAgIHZhciBfcHJvcHM0ID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICBjb21wb25lbnQgPSBfcHJvcHM0LmNvbXBvbmVudCxcXG4gICAgICAgICAgICB3aXRoUmVmID0gX3Byb3BzNC53aXRoUmVmLFxcbiAgICAgICAgICAgIF9maWVsZHMgPSBfcHJvcHM0Ll9maWVsZHMsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczQuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczQsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnX2ZpZWxkcycsICdfcmVkdXhGb3JtJ10pO1xcblxcbiAgICAgICAgdmFyIHNlY3Rpb25QcmVmaXggPSBfcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXg7XFxuXFxuICAgICAgICB2YXIgX09iamVjdCRrZXlzJHJlZHVjZSA9IE9iamVjdC5rZXlzKF9maWVsZHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIG5hbWUpIHtcXG4gICAgICAgICAgdmFyIGNvbm5lY3RlZFByb3BzID0gX2ZpZWxkc1tuYW1lXTtcXG5cXG4gICAgICAgICAgdmFyIF9jcmVhdGVGaWVsZFByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY3JlYXRlRmllbGRQcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoeyBnZXRJbjogZ2V0SW4sIHRvSlM6IHRvSlMgfSwgbmFtZSwgX2V4dGVuZHMoe30sIGNvbm5lY3RlZFByb3BzLCByZXN0LCB7XFxuICAgICAgICAgICAgb25CbHVyOiBfdGhpczQub25CbHVyRm5zW25hbWVdLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBfdGhpczQub25DaGFuZ2VGbnNbbmFtZV0sXFxuICAgICAgICAgICAgb25Gb2N1czogX3RoaXM0Lm9uRm9jdXNGbnNbbmFtZV1cXG4gICAgICAgICAgfSkpLFxcbiAgICAgICAgICAgICAgY3VzdG9tID0gX2NyZWF0ZUZpZWxkUHJvcHMuY3VzdG9tLFxcbiAgICAgICAgICAgICAgZmllbGRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY3JlYXRlRmllbGRQcm9wcywgWydjdXN0b20nXSk7XFxuXFxuICAgICAgICAgIGFjY3VtdWxhdG9yLmN1c3RvbSA9IGN1c3RvbTtcXG4gICAgICAgICAgdmFyIGZpZWxkTmFtZSA9IHNlY3Rpb25QcmVmaXggPyBuYW1lLnJlcGxhY2Uoc2VjdGlvblByZWZpeCArICcuJywgJycpIDogbmFtZTtcXG4gICAgICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBmaWVsZE5hbWUsIGZpZWxkUHJvcHMpO1xcbiAgICAgICAgfSwge30pLFxcbiAgICAgICAgICAgIGN1c3RvbSA9IF9PYmplY3Qka2V5cyRyZWR1Y2UuY3VzdG9tLFxcbiAgICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9PYmplY3Qka2V5cyRyZWR1Y2UsIFsnY3VzdG9tJ10pO1xcblxcbiAgICAgICAgaWYgKHdpdGhSZWYpIHtcXG4gICAgICAgICAgcHJvcHMucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIGN1c3RvbSkpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gQ29ubmVjdGVkRmllbGRzO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgQ29ubmVjdGVkRmllbGRzLnByb3BUeXBlcyA9IHtcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIF9maWVsZHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QuaXNSZXF1aXJlZCxcXG4gICAgcHJvcHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZXMgPSBvd25Qcm9wcy5uYW1lcyxcXG4gICAgICAgIF9vd25Qcm9wcyRfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX293blByb3BzJF9yZWR1eEZvcm0uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgcmV0dXJuIHtcXG4gICAgICBfZmllbGRzOiBuYW1lcy5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBuYW1lKSB7XFxuICAgICAgICB2YXIgaW5pdGlhbFN0YXRlID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbC4nICsgbmFtZSk7XFxuICAgICAgICB2YXIgaW5pdGlhbCA9IGluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5pdGlhbFN0YXRlIDogaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ3ZhbHVlcy4nICsgbmFtZSk7XFxuICAgICAgICB2YXIgc3luY0Vycm9yID0gZ2V0U3luY0Vycm9yKGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNFcnJvcnMnKSwgbmFtZSk7XFxuICAgICAgICB2YXIgc3luY1dhcm5pbmcgPSBnZXRTeW5jV2FybmluZyhnZXRJbihmb3JtU3RhdGUsICdzeW5jV2FybmluZ3MnKSwgbmFtZSk7XFxuICAgICAgICB2YXIgc3VibWl0dGluZyA9IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgICAgIHZhciBwcmlzdGluZSA9IHZhbHVlID09PSBpbml0aWFsO1xcbiAgICAgICAgYWNjdW11bGF0b3JbbmFtZV0gPSB7XFxuICAgICAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY1ZhbGlkYXRpbmcnKSA9PT0gbmFtZSxcXG4gICAgICAgICAgZGlydHk6ICFwcmlzdGluZSxcXG4gICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICAgICAgc3VibWl0RXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEVycm9ycy4nICsgbmFtZSksXFxuICAgICAgICAgIHN1Ym1pdEZhaWxlZDogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyksXFxuICAgICAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgICAgIHN5bmNFcnJvcjogc3luY0Vycm9yLFxcbiAgICAgICAgICBzeW5jV2FybmluZzogc3luY1dhcm5pbmcsXFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICAgICAgX3ZhbHVlOiBvd25Qcm9wcy52YWx1ZSAvLyBzYXZlIHZhbHVlIHBhc3NlZCBpbiAoZm9yIGNoZWNrYm94ZXMpXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xcbiAgICAgIH0sIHt9KVxcbiAgICB9O1xcbiAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgd2l0aFJlZjogdHJ1ZSB9KTtcXG4gIHJldHVybiBjb25uZWN0b3IoQ29ubmVjdGVkRmllbGRzKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUNvbm5lY3RlZEZpZWxkcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRBcnJheV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHRvQXJyYXkgPSBmdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XFxuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XFxufTtcXG5cXG52YXIgd3JhcEVycm9yID0gZnVuY3Rpb24gd3JhcEVycm9yKGZuLCBrZXkpIHtcXG4gIHJldHVybiBmbiAmJiBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciB2YWxpZGF0b3JzID0gdG9BcnJheShmbik7XFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciByZXN1bHQgPSB2YWxpZGF0b3JzW2ldLmFwcGx5KHZhbGlkYXRvcnMsIGFyZ3VtZW50cyk7XFxuICAgICAgaWYgKHJlc3VsdCkge1xcbiAgICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCByZXN1bHQpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfTtcXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZEFycmF5ID0gZnVuY3Rpb24gY3JlYXRlRmllbGRBcnJheShfcmVmMikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYyLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYyLmdldEluLFxcbiAgICAgIHNpemUgPSBfcmVmMi5zaXplO1xcblxcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkQXJyYXkgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Db25uZWN0ZWRGaWVsZEFycmF5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7IGRlZXBFcXVhbDogZGVlcEVxdWFsLCBnZXRJbjogZ2V0SW4sIHNpemU6IHNpemUgfSk7XFxuXFxuICB2YXIgRmllbGRBcnJheSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZEFycmF5LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGRBcnJheShwcm9wcywgY29udGV4dCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGaWVsZEFycmF5KTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGRBcnJheS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkQXJyYXkpKS5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSk7XFxuXFxuICAgICAgaWYgKCFjb250ZXh0Ll9yZWR1eEZvcm0pIHtcXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmllbGRBcnJheSBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkQXJyYXksIFt7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywgbmV4dFByb3BzLCBuZXh0U3RhdGUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxNb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xcblxcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0ucmVnaXN0ZXIodGhpcy5uYW1lLCAnRmllbGRBcnJheScsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIHdyYXBFcnJvcihfdGhpczIucHJvcHMudmFsaWRhdGUsICdfZXJyb3InKTtcXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIHdyYXBFcnJvcihfdGhpczIucHJvcHMud2FybiwgJ193YXJuaW5nJyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm5hbWUgIT09IG5leHRQcm9wcy5uYW1lKSB7XFxuICAgICAgICAgIC8vIHVucmVnaXN0ZXIgb2xkIG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgICAgICAvLyByZWdpc3RlciBuZXcgbmFtZVxcbiAgICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgbmV4dFByb3BzLm5hbWUpLCAnRmllbGRBcnJheScpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS51bnJlZ2lzdGVyKHRoaXMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0UmVuZGVyZWRDb21wb25lbnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZW5kZXJlZENvbXBvbmVudCgpIHtcXG4gICAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0KCkodGhpcy5wcm9wcy53aXRoUmVmLCAnSWYgeW91IHdhbnQgdG8gYWNjZXNzIGdldFJlbmRlcmVkQ29tcG9uZW50KCksICcgKyAneW91IG11c3Qgc3BlY2lmeSBhIHdpdGhSZWYgcHJvcCB0byBGaWVsZEFycmF5Jyk7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRSZW5kZXJlZENvbXBvbmVudCgpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3JlbmRlcicsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRmllbGRBcnJheSwgX2V4dGVuZHMoe30sIHRoaXMucHJvcHMsIHtcXG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxcbiAgICAgICAgICBzeW5jRXJyb3I6IHRoaXMuc3luY0Vycm9yLFxcbiAgICAgICAgICBzeW5jV2FybmluZzogdGhpcy5zeW5jV2FybmluZyxcXG4gICAgICAgICAgX3JlZHV4Rm9ybTogdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgIHJlZjogJ2Nvbm5lY3RlZCdcXG4gICAgICAgIH0pKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICduYW1lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgdGhpcy5wcm9wcy5uYW1lKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS52YWx1ZTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIEZpZWxkQXJyYXk7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBGaWVsZEFycmF5LnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZy5pc1JlcXVpcmVkLFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB2YWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHdhcm46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkQXJyYXkuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkQXJyYXk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGaWVsZEFycmF5KTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21hcFZhbHVlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY3JlYXRlRmllbGRBcnJheVByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzNik7XFxuXFxuXFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHByb3BzVG9Ob3RVcGRhdGVGb3IgPSBbJ19yZWR1eEZvcm0nLCAndmFsdWUnXTtcXG5cXG52YXIgY3JlYXRlQ29ubmVjdGVkRmllbGRBcnJheSA9IGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3RlZEZpZWxkQXJyYXkoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBzaXplID0gX3JlZi5zaXplO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIC8vIEZvciBhbiBhcnJheSwgdGhlIGVycm9yIGNhbiBfT05MWV8gYmUgdW5kZXIgX2Vycm9yLlxcbiAgICAvLyBUaGlzIGlzIHdoeSB0aGlzIGdldFN5bmNFcnJvciBpcyBub3QgdGhlIHNhbWUgYXMgdGhlXFxuICAgIC8vIG9uZSBpbiBGaWVsZC5cXG4gICAgcmV0dXJuIGdldEluKHN5bmNFcnJvcnMsIG5hbWUgKyAnLl9lcnJvcicpO1xcbiAgfTtcXG5cXG4gIHZhciBnZXRTeW5jV2FybmluZyA9IGZ1bmN0aW9uIGdldFN5bmNXYXJuaW5nKHN5bmNXYXJuaW5ncywgbmFtZSkge1xcbiAgICAvLyBGb3IgYW4gYXJyYXksIHRoZSB3YXJuaW5nIGNhbiBfT05MWV8gYmUgdW5kZXIgX3dhcm5pbmcuXFxuICAgIC8vIFRoaXMgaXMgd2h5IHRoaXMgZ2V0U3luY0Vycm9yIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGVcXG4gICAgLy8gb25lIGluIEZpZWxkLlxcbiAgICByZXR1cm4gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lICsgJy5fd2FybmluZycpO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZEFycmF5ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKENvbm5lY3RlZEZpZWxkQXJyYXksIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZEFycmF5KCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb25uZWN0ZWRGaWVsZEFycmF5KTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGRBcnJheS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKENvbm5lY3RlZEZpZWxkQXJyYXkpKS5jYWxsKHRoaXMpKTtcXG5cXG4gICAgICBfdGhpcy5nZXRWYWx1ZSA9IF90aGlzLmdldFZhbHVlLmJpbmQoX3RoaXMpO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGRBcnJheSwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIC8vIFVwZGF0ZSBpZiB0aGUgZWxlbWVudHMgb2YgdGhlIHZhbHVlIGFycmF5IHdhcyB1cGRhdGVkLlxcbiAgICAgICAgdmFyIHRoaXNWYWx1ZSA9IHRoaXMucHJvcHMudmFsdWU7XFxuICAgICAgICB2YXIgbmV4dFZhbHVlID0gbmV4dFByb3BzLnZhbHVlO1xcblxcbiAgICAgICAgaWYgKHRoaXNWYWx1ZSAmJiBuZXh0VmFsdWUpIHtcXG4gICAgICAgICAgaWYgKHRoaXNWYWx1ZS5sZW5ndGggIT09IG5leHRWYWx1ZS5sZW5ndGggfHwgdGhpc1ZhbHVlLmV2ZXJ5KGZ1bmN0aW9uICh2YWwpIHtcXG4gICAgICAgICAgICByZXR1cm4gbmV4dFZhbHVlLnNvbWUoZnVuY3Rpb24gKG5leHQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBkZWVwRXF1YWwodmFsLCBuZXh0KTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgfSkpIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIG5leHRQcm9wc0tleXMgPSBPYmplY3Qua2V5cyhuZXh0UHJvcHMpO1xcbiAgICAgICAgdmFyIHRoaXNQcm9wc0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BzKTtcXG4gICAgICAgIHJldHVybiBuZXh0UHJvcHNLZXlzLmxlbmd0aCAhPT0gdGhpc1Byb3BzS2V5cy5sZW5ndGggfHwgbmV4dFByb3BzS2V5cy5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgIC8vIHVzZWZ1bCB0byBkZWJ1ZyByZXJlbmRlcnNcXG4gICAgICAgICAgLy8gaWYgKCFwbGFpbi5kZWVwRXF1YWwodGhpcy5wcm9wc1sgcHJvcCBdLCBuZXh0UHJvcHNbIHByb3AgXSkpIHtcXG4gICAgICAgICAgLy8gICBjb25zb2xlLmluZm8ocHJvcCwgJ2NoYW5nZWQnLCB0aGlzLnByb3BzWyBwcm9wIF0sICc9PT4nLCBuZXh0UHJvcHNbIHByb3AgXSlcXG4gICAgICAgICAgLy8gfVxcbiAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczIucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRWYWx1ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKGluZGV4KSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZSAmJiBnZXRJbih0aGlzLnByb3BzLnZhbHVlLCBpbmRleCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzLmNvbXBvbmVudCxcXG4gICAgICAgICAgICB3aXRoUmVmID0gX3Byb3BzLndpdGhSZWYsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wcy5uYW1lLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICB2YWxpZGF0ZSA9IF9wcm9wcy52YWxpZGF0ZSxcXG4gICAgICAgICAgICB3YXJuID0gX3Byb3BzLndhcm4sXFxuICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnbmFtZScsICdfcmVkdXhGb3JtJywgJ3ZhbGlkYXRlJywgJ3dhcm4nXSk7XFxuXFxuICAgICAgICB2YXIgcHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19jcmVhdGVGaWVsZEFycmF5UHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGdldEluLCBuYW1lLCBfcmVkdXhGb3JtLmZvcm0sIF9yZWR1eEZvcm0uc2VjdGlvblByZWZpeCwgdGhpcy5nZXRWYWx1ZSwgcmVzdCk7XFxuICAgICAgICBpZiAod2l0aFJlZikge1xcbiAgICAgICAgICBwcm9wcy5yZWYgPSAncmVuZGVyZWRDb21wb25lbnQnO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShjb21wb25lbnQsIHByb3BzKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIENvbm5lY3RlZEZpZWxkQXJyYXk7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBDb25uZWN0ZWRGaWVsZEFycmF5LnByb3BUeXBlcyA9IHtcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgQ29ubmVjdGVkRmllbGRBcnJheS5jb250ZXh0VHlwZXMgPSB7XFxuICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZSA9IG93blByb3BzLm5hbWUsXFxuICAgICAgICBfb3duUHJvcHMkX3JlZHV4Rm9ybSA9IG93blByb3BzLl9yZWR1eEZvcm0sXFxuICAgICAgICBpbml0aWFsVmFsdWVzID0gX293blByb3BzJF9yZWR1eEZvcm0uaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9vd25Qcm9wcyRfcmVkdXhGb3JtLmdldEZvcm1TdGF0ZTtcXG5cXG4gICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgIHZhciBpbml0aWFsID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbC4nICsgbmFtZSkgfHwgaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgdmFyIHZhbHVlID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzLicgKyBuYW1lKTtcXG4gICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgIHZhciBzeW5jRXJyb3IgPSBnZXRTeW5jRXJyb3IoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpLCBuYW1lKTtcXG4gICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICB2YXIgcHJpc3RpbmUgPSBkZWVwRXF1YWwodmFsdWUsIGluaXRpYWwpO1xcbiAgICByZXR1cm4ge1xcbiAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lICsgJy5fZXJyb3InKSxcXG4gICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICBzdWJtaXRFcnJvcjogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RXJyb3JzLicgKyBuYW1lICsgJy5fZXJyb3InKSxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEZhaWxlZCcpLFxcbiAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgc3luY0Vycm9yOiBzeW5jRXJyb3IsXFxuICAgICAgc3luY1dhcm5pbmc6IHN5bmNXYXJuaW5nLFxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICBsZW5ndGg6IHNpemUodmFsdWUpXFxuICAgIH07XFxuICB9LCBmdW5jdGlvbiAoZGlzcGF0Y2gsIG93blByb3BzKSB7XFxuICAgIHZhciBuYW1lID0gb3duUHJvcHMubmFtZSxcXG4gICAgICAgIF9yZWR1eEZvcm0gPSBvd25Qcm9wcy5fcmVkdXhGb3JtO1xcbiAgICB2YXIgYXJyYXlJbnNlcnQgPSBfcmVkdXhGb3JtLmFycmF5SW5zZXJ0LFxcbiAgICAgICAgYXJyYXlNb3ZlID0gX3JlZHV4Rm9ybS5hcnJheU1vdmUsXFxuICAgICAgICBhcnJheVBvcCA9IF9yZWR1eEZvcm0uYXJyYXlQb3AsXFxuICAgICAgICBhcnJheVB1c2ggPSBfcmVkdXhGb3JtLmFycmF5UHVzaCxcXG4gICAgICAgIGFycmF5UmVtb3ZlID0gX3JlZHV4Rm9ybS5hcnJheVJlbW92ZSxcXG4gICAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3JlZHV4Rm9ybS5hcnJheVJlbW92ZUFsbCxcXG4gICAgICAgIGFycmF5U2hpZnQgPSBfcmVkdXhGb3JtLmFycmF5U2hpZnQsXFxuICAgICAgICBhcnJheVNwbGljZSA9IF9yZWR1eEZvcm0uYXJyYXlTcGxpY2UsXFxuICAgICAgICBhcnJheVN3YXAgPSBfcmVkdXhGb3JtLmFycmF5U3dhcCxcXG4gICAgICAgIGFycmF5VW5zaGlmdCA9IF9yZWR1eEZvcm0uYXJyYXlVbnNoaWZ0O1xcblxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgICAgYXJyYXlJbnNlcnQ6IGFycmF5SW5zZXJ0LFxcbiAgICAgIGFycmF5TW92ZTogYXJyYXlNb3ZlLFxcbiAgICAgIGFycmF5UG9wOiBhcnJheVBvcCxcXG4gICAgICBhcnJheVB1c2g6IGFycmF5UHVzaCxcXG4gICAgICBhcnJheVJlbW92ZTogYXJyYXlSZW1vdmUsXFxuICAgICAgYXJyYXlSZW1vdmVBbGw6IGFycmF5UmVtb3ZlQWxsLFxcbiAgICAgIGFycmF5U2hpZnQ6IGFycmF5U2hpZnQsXFxuICAgICAgYXJyYXlTcGxpY2U6IGFycmF5U3BsaWNlLFxcbiAgICAgIGFycmF5U3dhcDogYXJyYXlTd2FwLFxcbiAgICAgIGFycmF5VW5zaGlmdDogYXJyYXlVbnNoaWZ0XFxuICAgIH0sIGZ1bmN0aW9uIChhY3Rpb25DcmVhdG9yKSB7XFxuICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYWN0aW9uQ3JlYXRvci5iaW5kKG51bGwsIG5hbWUpLCBkaXNwYXRjaCk7XFxuICAgIH0pO1xcbiAgfSwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICByZXR1cm4gY29ubmVjdG9yKENvbm5lY3RlZEZpZWxkQXJyYXkpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdGVkRmllbGRBcnJheSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG52YXIgY3JlYXRlRmllbGRBcnJheVByb3BzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRBcnJheVByb3BzKGdldEluLCBuYW1lLCBmb3JtLCBzZWN0aW9uUHJlZml4LCBnZXRWYWx1ZSwgX3JlZikge1xcbiAgdmFyIGFycmF5SW5zZXJ0ID0gX3JlZi5hcnJheUluc2VydCxcXG4gICAgICBhcnJheU1vdmUgPSBfcmVmLmFycmF5TW92ZSxcXG4gICAgICBhcnJheVBvcCA9IF9yZWYuYXJyYXlQb3AsXFxuICAgICAgYXJyYXlQdXNoID0gX3JlZi5hcnJheVB1c2gsXFxuICAgICAgYXJyYXlSZW1vdmUgPSBfcmVmLmFycmF5UmVtb3ZlLFxcbiAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3JlZi5hcnJheVJlbW92ZUFsbCxcXG4gICAgICBhcnJheVNoaWZ0ID0gX3JlZi5hcnJheVNoaWZ0LFxcbiAgICAgIGFycmF5U3BsaWNlID0gX3JlZi5hcnJheVNwbGljZSxcXG4gICAgICBhcnJheVN3YXAgPSBfcmVmLmFycmF5U3dhcCxcXG4gICAgICBhcnJheVVuc2hpZnQgPSBfcmVmLmFycmF5VW5zaGlmdCxcXG4gICAgICBhc3luY0Vycm9yID0gX3JlZi5hc3luY0Vycm9yLFxcbiAgICAgIGRpcnR5ID0gX3JlZi5kaXJ0eSxcXG4gICAgICBsZW5ndGggPSBfcmVmLmxlbmd0aCxcXG4gICAgICBwcmlzdGluZSA9IF9yZWYucHJpc3RpbmUsXFxuICAgICAgc3VibWl0RXJyb3IgPSBfcmVmLnN1Ym1pdEVycm9yLFxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcXG4gICAgICBzdWJtaXRGYWlsZWQgPSBfcmVmLnN1Ym1pdEZhaWxlZCxcXG4gICAgICBzdWJtaXR0aW5nID0gX3JlZi5zdWJtaXR0aW5nLFxcbiAgICAgIHN5bmNFcnJvciA9IF9yZWYuc3luY0Vycm9yLFxcbiAgICAgIHN5bmNXYXJuaW5nID0gX3JlZi5zeW5jV2FybmluZyxcXG4gICAgICB2YWx1ZSA9IF9yZWYudmFsdWUsXFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWydhcnJheUluc2VydCcsICdhcnJheU1vdmUnLCAnYXJyYXlQb3AnLCAnYXJyYXlQdXNoJywgJ2FycmF5UmVtb3ZlJywgJ2FycmF5UmVtb3ZlQWxsJywgJ2FycmF5U2hpZnQnLCAnYXJyYXlTcGxpY2UnLCAnYXJyYXlTd2FwJywgJ2FycmF5VW5zaGlmdCcsICdhc3luY0Vycm9yJywgJ2RpcnR5JywgJ2xlbmd0aCcsICdwcmlzdGluZScsICdzdWJtaXRFcnJvcicsICdzdGF0ZScsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0dGluZycsICdzeW5jRXJyb3InLCAnc3luY1dhcm5pbmcnLCAndmFsdWUnLCAncHJvcHMnXSk7XFxuXFxuICB2YXIgZXJyb3IgPSBzeW5jRXJyb3IgfHwgYXN5bmNFcnJvciB8fCBzdWJtaXRFcnJvcjtcXG4gIHZhciB3YXJuaW5nID0gc3luY1dhcm5pbmc7XFxuICB2YXIgZmllbGROYW1lID0gc2VjdGlvblByZWZpeCA/IG5hbWUucmVwbGFjZShzZWN0aW9uUHJlZml4ICsgJy4nLCAnJykgOiBuYW1lO1xcbiAgdmFyIGZpbmFsUHJvcHMgPSBfZXh0ZW5kcyh7XFxuICAgIGZpZWxkczoge1xcbiAgICAgIF9pc0ZpZWxkQXJyYXk6IHRydWUsXFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFjaykge1xcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGZpZWxkTmFtZSArICdbJyArIGluZGV4ICsgJ10nLCBpbmRleCwgZmluYWxQcm9wcy5maWVsZHMpO1xcbiAgICAgICAgfSk7XFxuICAgICAgfSxcXG4gICAgICBnZXQ6IGdldFZhbHVlLFxcbiAgICAgIGdldEFsbDogZnVuY3Rpb24gZ2V0QWxsKCkge1xcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICAgIH0sXFxuICAgICAgaW5zZXJ0OiBhcnJheUluc2VydCxcXG4gICAgICBsZW5ndGg6IGxlbmd0aCxcXG4gICAgICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFjaykge1xcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCBbXSkubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZmllbGROYW1lICsgJ1snICsgaW5kZXggKyAnXScsIGluZGV4LCBmaW5hbFByb3BzLmZpZWxkcyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9LFxcbiAgICAgIG1vdmU6IGFycmF5TW92ZSxcXG4gICAgICBuYW1lOiBuYW1lLFxcbiAgICAgIHBvcDogZnVuY3Rpb24gcG9wKCkge1xcbiAgICAgICAgYXJyYXlQb3AoKTtcXG4gICAgICAgIHJldHVybiBnZXRJbih2YWx1ZSwgbGVuZ3RoIC0gMSk7XFxuICAgICAgfSxcXG4gICAgICBwdXNoOiBhcnJheVB1c2gsXFxuICAgICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2ssIGluaXRpYWwpIHtcXG4gICAgICAgIHJldHVybiAodmFsdWUgfHwgW10pLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIGl0ZW0sIGluZGV4KSB7XFxuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhhY2N1bXVsYXRvciwgZmllbGROYW1lICsgJ1snICsgaW5kZXggKyAnXScsIGluZGV4LCBmaW5hbFByb3BzLmZpZWxkcyk7XFxuICAgICAgICB9LCBpbml0aWFsKTtcXG4gICAgICB9LFxcbiAgICAgIHJlbW92ZTogYXJyYXlSZW1vdmUsXFxuICAgICAgcmVtb3ZlQWxsOiBhcnJheVJlbW92ZUFsbCxcXG4gICAgICBzaGlmdDogZnVuY3Rpb24gc2hpZnQoKSB7XFxuICAgICAgICBhcnJheVNoaWZ0KCk7XFxuICAgICAgICByZXR1cm4gZ2V0SW4odmFsdWUsIDApO1xcbiAgICAgIH0sXFxuICAgICAgc3dhcDogYXJyYXlTd2FwLFxcbiAgICAgIHVuc2hpZnQ6IGFycmF5VW5zaGlmdFxcbiAgICB9LFxcbiAgICBtZXRhOiB7XFxuICAgICAgZGlydHk6IGRpcnR5LFxcbiAgICAgIGVycm9yOiBlcnJvcixcXG4gICAgICBmb3JtOiBmb3JtLFxcbiAgICAgIHdhcm5pbmc6IHdhcm5pbmcsXFxuICAgICAgaW52YWxpZDogISFlcnJvcixcXG4gICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IHN1Ym1pdEZhaWxlZCxcXG4gICAgICB0b3VjaGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3RvdWNoZWQnKSksXFxuICAgICAgdmFsaWQ6ICFlcnJvclxcbiAgICB9XFxuICB9LCBwcm9wcywgcmVzdCk7XFxuICByZXR1cm4gZmluYWxQcm9wcztcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUZpZWxkQXJyYXlQcm9wcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcblxcbnZhciBjcmVhdGVGb3JtVmFsdWVTZWxlY3RvciA9IGZ1bmN0aW9uIGNyZWF0ZUZvcm1WYWx1ZVNlbGVjdG9yKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcblxcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaW52YXJpYW50X19fZGVmYXVsdCgpKGZvcm0sICdGb3JtIHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkJyk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICAgICAgZmllbGRzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gICAgICB9XFxuXFxuICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fX2RlZmF1bHQoKShmaWVsZHMubGVuZ3RoLCAnTm8gZmllbGRzIHNwZWNpZmllZCcpO1xcbiAgICAgIHJldHVybiBmaWVsZHMubGVuZ3RoID09PSAxID9cXG4gICAgICAvLyBvbmx5IHNlbGVjdGluZyBvbmUgZmllbGQsIHNvIHJldHVybiBpdHMgdmFsdWVcXG4gICAgICBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMuJyArIGZpZWxkc1swXSkgOlxcbiAgICAgIC8vIHNlbGVjdGluZyBtYW55IGZpZWxkcywgc28gcmV0dXJuIGFuIG9iamVjdCBvZiBmaWVsZCB2YWx1ZXNcXG4gICAgICBmaWVsZHMucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgZmllbGQpIHtcXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLnZhbHVlcy4nICsgZmllbGQpO1xcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBhY2N1bXVsYXRvciA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBmaWVsZCwgdmFsdWUpO1xcbiAgICAgIH0sIHt9KTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGb3JtVmFsdWVTZWxlY3Rvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuXFxuXFxudmFyIGNyZWF0ZVZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZVZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChjb25maWcpIHtcXG4gICAgdmFyIF9wcm9wJGdldEZvcm1TdGF0ZSRjbyA9IF9leHRlbmRzKHtcXG4gICAgICBwcm9wOiAndmFsdWVzJyxcXG4gICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICAgIH1cXG4gICAgfSwgY29uZmlnKSxcXG4gICAgICAgIGZvcm0gPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28uZm9ybSxcXG4gICAgICAgIHByb3AgPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28ucHJvcCxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9wcm9wJGdldEZvcm1TdGF0ZSRjby5nZXRGb3JtU3RhdGU7XFxuXFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X3JlZHV4X19bXFxcImFcXFwiIC8qIGNvbm5lY3QgKi9dKShmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wLCBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMnKSk7XFxuICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICByZXR1cm4ge307XFxuICAgIH0gLy8gaWdub3JlIGRpc3BhdGNoXFxuICAgICk7XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlVmFsdWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtTmFtZXMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtTmFtZXMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBrZXlzID0gX3JlZi5rZXlzO1xcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGtleXMoZ2V0Rm9ybVN0YXRlKHN0YXRlKSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybU5hbWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtVmFsdWVzID0gZnVuY3Rpb24gY3JlYXRlR2V0Rm9ybVZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtVmFsdWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1Jbml0aWFsVmFsdWVzKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLmluaXRpYWwnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtU3luY0Vycm9ycyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5zeW5jRXJyb3JzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5hc3luY0Vycm9ycycpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN5bmNXYXJuaW5ncyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1TeW5jV2FybmluZ3MoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3luY1dhcm5pbmdzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN5bmNXYXJuaW5ncyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN1Ym1pdEVycm9ycyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1TdWJtaXRFcnJvcnMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3VibWl0RXJyb3JzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN1Ym1pdEVycm9ycyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ByaXN0aW5lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNEaXJ0eSA9IGZ1bmN0aW9uIGNyZWF0ZUlzRGlydHkoc3RydWN0dXJlKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0sIGdldEZvcm1TdGF0ZSkge1xcbiAgICB2YXIgaXNQcmlzdGluZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzUHJpc3RpbmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSkoZm9ybSwgZ2V0Rm9ybVN0YXRlKTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiAhaXNQcmlzdGluZShzdGF0ZSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSXNEaXJ0eSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ZhbGlkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNJbnZhbGlkID0gZnVuY3Rpb24gY3JlYXRlSXNJbnZhbGlkKHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtLCBnZXRGb3JtU3RhdGUpIHtcXG4gICAgdmFyIGlzVmFsaWQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpKGZvcm0sIGdldEZvcm1TdGF0ZSk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gIWlzVmFsaWQoc3RhdGUpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzSW52YWxpZCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSXNTdWJtaXR0aW5nID0gZnVuY3Rpb24gY3JlYXRlSXNTdWJtaXR0aW5nKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0dGluZycpIHx8IGZhbHNlO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzU3VibWl0dGluZyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkID0gZnVuY3Rpb24gY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0U3VjY2VlZGVkJykgfHwgZmFsc2U7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVIYXNTdWJtaXRGYWlsZWQgPSBmdW5jdGlvbiBjcmVhdGVIYXNTdWJtaXRGYWlsZWQoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgICByZXR1cm4gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5zdWJtaXRGYWlsZWQnKSB8fCBmYWxzZTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVIYXNTdWJtaXRGYWlsZWQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI1MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG52YXIgRm9ybSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICBfaW5oZXJpdHMoRm9ybSwgX0NvbXBvbmVudCk7XFxuXFxuICBmdW5jdGlvbiBGb3JtKHByb3BzLCBjb250ZXh0KSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtKTtcXG5cXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZvcm0uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybSBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICB9XFxuICAgIHJldHVybiBfdGhpcztcXG4gIH1cXG5cXG4gIF9jcmVhdGVDbGFzcyhGb3JtLCBbe1xcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVySW5uZXJPblN1Ym1pdCh0aGlzLnByb3BzLm9uU3VibWl0KTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6ICdyZW5kZXInLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgnZm9ybScsIHRoaXMucHJvcHMpO1xcbiAgICB9XFxuICB9XSk7XFxuXFxuICByZXR1cm4gRm9ybTtcXG59KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuRm9ybS5wcm9wVHlwZXMgPSB7XFxuICBvblN1Ym1pdDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMuaXNSZXF1aXJlZFxcbn07XFxuRm9ybS5jb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChGb3JtKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG52YXIgRm9ybVNlY3Rpb24gPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgX2luaGVyaXRzKEZvcm1TZWN0aW9uLCBfQ29tcG9uZW50KTtcXG5cXG4gIGZ1bmN0aW9uIEZvcm1TZWN0aW9uKHByb3BzLCBjb250ZXh0KSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtU2VjdGlvbik7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGb3JtU2VjdGlvbi5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZvcm1TZWN0aW9uKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybVNlY3Rpb24gbXVzdCBiZSBpbnNpZGUgYSBjb21wb25lbnQgZGVjb3JhdGVkIHdpdGggcmVkdXhGb3JtKCknKTtcXG4gICAgfVxcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICBfY3JlYXRlQ2xhc3MoRm9ybVNlY3Rpb24sIFt7XFxuICAgIGtleTogJ2dldENoaWxkQ29udGV4dCcsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQsXFxuICAgICAgICAgIG5hbWUgPSB0aGlzLnByb3BzLm5hbWU7XFxuXFxuICAgICAgcmV0dXJuIHtcXG4gICAgICAgIF9yZWR1eEZvcm06IF9leHRlbmRzKHt9LCBjb250ZXh0Ll9yZWR1eEZvcm0sIHtcXG4gICAgICAgICAgc2VjdGlvblByZWZpeDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKVxcbiAgICAgICAgfSlcXG4gICAgICB9O1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogJ3JlbmRlcicsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgIGNoaWxkcmVuID0gX3Byb3BzLmNoaWxkcmVuLFxcbiAgICAgICAgICBuYW1lID0gX3Byb3BzLm5hbWUsXFxuICAgICAgICAgIGNvbXBvbmVudCA9IF9wcm9wcy5jb21wb25lbnQsXFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzLCBbJ2NoaWxkcmVuJywgJ25hbWUnLCAnY29tcG9uZW50J10pO1xcblxcbiAgICAgIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XFxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XFxuICAgICAgfVxcblxcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXFxuICAgICAgfSkpO1xcbiAgICB9XFxuICB9XSk7XFxuXFxuICByZXR1cm4gRm9ybVNlY3Rpb247XFxufShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbkZvcm1TZWN0aW9uLnByb3BUeXBlcyA9IHtcXG4gIG5hbWU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKVxcbn07XFxuXFxuRm9ybVNlY3Rpb24uZGVmYXVsdFByb3BzID0ge1xcbiAgY29tcG9uZW50OiAnZGl2J1xcbn07XFxuXFxuRm9ybVNlY3Rpb24uY2hpbGRDb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LmlzUmVxdWlyZWRcXG59O1xcblxcbkZvcm1TZWN0aW9uLmNvbnRleHRUeXBlcyA9IHtcXG4gIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKEZvcm1TZWN0aW9uKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcblxcbnZhciBhbnkgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYW55LFxcbiAgICBib29sID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgIGZ1bmMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgc2hhcGUgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc2hhcGUsXFxuICAgIHN0cmluZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcsXFxuICAgIG9uZU9mVHlwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUsXFxuICAgIG9iamVjdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3Q7XFxuXFxuXFxudmFyIHByb3BUeXBlcyA9IHtcXG4gIC8vIFN0YXRlOlxcbiAgYW55VG91Y2hlZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFueSBvZiB0aGUgZmllbGRzIGhhdmUgYmVlbiBtYXJrZWQgYXMgdG91Y2hlZFxcbiAgYXN5bmNWYWxpZGF0aW5nOiBvbmVPZlR5cGUoW2Jvb2wsIHN0cmluZ10pLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgYXN5bmMgdmFsaWRhdGlvbiBpcyBydW5uaW5nLCBhIHN0cmluZyBpZiBhIGZpZWxkIHRyaWdnZXJlZCBhc3luYyB2YWxpZGF0aW9uXFxuICBkaXJ0eTogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFueSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIGluaXRpYWxWYWx1ZXNcXG4gIGVycm9yOiBhbnksIC8vIGZvcm0td2lkZSBlcnJvciBmcm9tICdfZXJyb3InIGtleSBpbiB2YWxpZGF0aW9uIHJlc3VsdFxcbiAgZm9ybTogc3RyaW5nLmlzUmVxdWlyZWQsIC8vIHRoZSBuYW1lIG9mIHRoZSBmb3JtXFxuICBpbnZhbGlkOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlcmUgYXJlIGFueSB2YWxpZGF0aW9uIGVycm9yc1xcbiAgaW5pdGlhbGl6ZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSBoYXMgYmVlbiBpbml0aWFsaXplZFxcbiAgaW5pdGlhbFZhbHVlczogb2JqZWN0LCAvLyB0aGUgaW5pdGlhbFZhbHVlcyBvYmplY3QgcGFzc2VkIHRvIHJlZHV4Rm9ybVxcbiAgcHJpc3RpbmU6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyBpbml0aWFsVmFsdWVzXFxuICBwdXJlOiBib29sLmlzUmVxdWlyZWQsIC8vIGlmIHRydWUsIGltcGxlbWVudHMgc2hvdWxkQ29tcG9uZW50VXBkYXRlXFxuICBzdWJtaXR0aW5nOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlIGZvcm0gaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3VibWl0dGVkXFxuICBzdWJtaXRGYWlsZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSB3YXMgc3VibWl0dGVkIGFuZCBmYWlsZWQgZm9yIGFueSByZWFzb25cXG4gIHN1Ym1pdFN1Y2NlZWRlZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZSBmb3JtIHdhcyBzdWNjZXNzZnVsbHkgc3VibWl0dGVkXFxuICB2YWxpZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZXJlIGFyZSBubyB2YWxpZGF0aW9uIGVycm9yc1xcbiAgd2FybmluZzogYW55LCAvLyBmb3JtLXdpZGUgd2FybmluZyBmcm9tICdfd2FybmluZycga2V5IGluIHZhbGlkYXRpb24gcmVzdWx0XFxuICAvLyBBY3Rpb25zOlxcbiAgYXJyYXk6IHNoYXBlKHtcXG4gICAgaW5zZXJ0OiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIGluc2VydCBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gICAgbW92ZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBtb3ZlIGEgdmFsdWUgd2l0aGluIGFuIGFycmF5IGZpZWxkXFxuICAgIHBvcDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBwb3AgYSB2YWx1ZSBvZmYgb2YgYW4gYXJyYXkgZmllbGRcXG4gICAgcHVzaDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBwdXNoIGEgdmFsdWUgb250byBhbiBhcnJheSBmaWVsZFxcbiAgICByZW1vdmU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGEgdmFsdWUgZnJvbSBhbiBhcnJheSBmaWVsZFxcbiAgICByZW1vdmVBbGw6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGFsbCB0aGUgdmFsdWVzIGZyb20gYW4gYXJyYXkgZmllbGRcXG4gICAgc2hpZnQ6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gc2hpZnQgYSB2YWx1ZSBvdXQgb2YgYW4gYXJyYXkgZmllbGRcXG4gICAgc3BsaWNlOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIHNwbGljZSBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gICAgc3dhcDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzd2FwIHZhbHVlcyBpbiBhbiBhcnJheSBmaWVsZFxcbiAgICB1bnNoaWZ0OiBmdW5jLmlzUmVxdWlyZWQgLy8gZnVuY3Rpb24gdG8gdW5zaGlmdCBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gIH0pLFxcbiAgYXN5bmNWYWxpZGF0ZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byB0cmlnZ2VyIGFzeW5jIHZhbGlkYXRpb25cXG4gIGF1dG9maWxsOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBzZXQgYSB2YWx1ZSBvZiBhIGZpZWxkIGFuZCBtYXJrIGl0IGFzIGF1dG9maWxsZWRcXG4gIGJsdXI6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIG1hcmsgYSBmaWVsZCBhcyBibHVycmVkXFxuICBjaGFuZ2U6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBmaWVsZFxcbiAgY2xlYXJBc3luY0Vycm9yOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBjbGVhciB0aGUgYXN5bmMgZXJyb3Igb2YgYSBmaWVsZFxcbiAgZGVzdHJveTogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gZGVzdHJveSB0aGUgZm9ybSdzIGRhdGEgaW4gUmVkdXhcXG4gIGRpc3BhdGNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIHRoZSBSZWR1eCBkaXNwYXRjaCBhY3Rpb25cXG4gIGhhbmRsZVN1Ym1pdDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzdWJtaXQgdGhlIGZvcm1cXG4gIGluaXRpYWxpemU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGluaXRpYWxpemUgZm9ybSBkYXRhXFxuICByZXNldDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gcmVzZXQgdGhlIGZvcm0gZGF0YSB0byBwcmV2aW91c2x5IGluaXRpYWxpemVkIHZhbHVlc1xcbiAgdG91Y2g6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIG1hcmsgZmllbGRzIGFzIHRvdWNoZWRcXG4gIHN1Ym1pdDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gdHJpZ2dlciBhIHN1Ym1pc3Npb24gb2YgdGhlIHNwZWNpZmllZCBmb3JtXFxuICB1bnRvdWNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBtYXJrIGZpZWxkcyBhcyB1bnRvdWNoZWRcXG5cXG4gIC8vIHRyaWdnZXJTdWJtaXRcXG4gIHRyaWdnZXJTdWJtaXQ6IGJvb2wsIC8vIGlmIHRydWUsIHN1Ym1pdHMgdGhlIGZvcm0gb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1xcbiAgY2xlYXJTdWJtaXQ6IGZ1bmMuaXNSZXF1aXJlZCAvLyBjYWxsZWQgYmVmb3JlIGEgdHJpZ2dlcmVkIHN1Ym1pdCwgYnkgZGVmYXVsdCBjbGVhcnMgdHJpZ2dlclN1Ym1pdFxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAocHJvcFR5cGVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBwbGF0Zm9ybTY7XFxuXFxuLyoqKi8gfSksXFxuLyogMjU1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XFxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxcbiAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xcbiAgICB9XFxuICAgIHJldHVybiB0O1xcbn07XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciB1dWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTYpO1xcbnZhciByZWR1eF9mb3JtXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcXG52YXIgaGVscF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgVGV4dElucHV0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFRleHRJbnB1dCwgX3N1cGVyKTtcXG4gICAgZnVuY3Rpb24gVGV4dElucHV0KHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnJlbmRlclRleHQgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5wcm9wcywgbGFiZWwgPSBfYS5sYWJlbCwgZGlzYWJsZWQgPSBfYS5kaXNhYmxlZCwgYXV0b2ZvY3VzID0gX2EuYXV0b2ZvY3VzLCBoZWxwID0gX2EuaGVscCwgY29udGFpbmVyQ2xhc3MgPSBfYS5jb250YWluZXJDbGFzcywgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3MsIHR5cGUgPSBfYS50eXBlLCBzdGVwID0gX2Euc3RlcCwgcmFuZG9tR2VuZXJhdG9yID0gX2EucmFuZG9tR2VuZXJhdG9yLCBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLCBjb2xsYXBzZUVycm9yU3BhY2UgPSBfYS5jb2xsYXBzZUVycm9yU3BhY2U7XFxuICAgICAgICAgICAgdmFyIGlucHV0ID0gZmllbGQuaW5wdXQsIG1ldGEgPSBmaWVsZC5tZXRhO1xcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQnOiBtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yXFxuICAgICAgICAgICAgICAgIH0pIH0sXFxuICAgICAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgICAgICBoZWxwICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoaGVscF8xLmRlZmF1bHQsIHsgdGV4dDogaGVscCB9KSkgOiBudWxsLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJpbnB1dFxcXCIsIF9fYXNzaWduKHt9LCBpbnB1dCwgeyBrZXk6IGlucHV0Lm5hbWUsIHR5cGU6IHR5cGUgfHwgJ3RleHQnLCBzdGVwOiAhdHlwZSB8fCB0eXBlICE9PSAnbnVtYmVyJyA/IHVuZGVmaW5lZCA6IHN0ZXAsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgZGlzYWJsZWQ6IGRpc2FibGVkLCBhdXRvRm9jdXM6IGF1dG9mb2N1cywgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWNvbnRyb2wgaW5wdXQtYmxvY2snLCBpbnB1dENsYXNzLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2J0bi1wcmVmaXgnOiByYW5kb21HZW5lcmF0b3JcXG4gICAgICAgICAgICAgICAgICAgIH0pIH0pKSxcXG4gICAgICAgICAgICAgICAgcmFuZG9tR2VuZXJhdG9yID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogXFxcImJ0biBidG4taW5mbyBpbnB1dC1zdWZmaXhcXFwiLCBvbkNsaWNrOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gX3RoaXMuZ2VuZXJhdGVDbGllbnRTZWNyZXQoZmllbGQpOyB9IH0sXFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJmYXMgZmEtcmFuZG9tXFxcIiB9KSkpIDogbnVsbCxcXG4gICAgICAgICAgICAgICAgKG1ldGEudG91Y2hlZCAmJiAhIW1ldGEuZXJyb3IpID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwicFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidmFsaWRhdGlvbi1lcnJvci1tZXNzYWdlXFxcIiB9LCBtZXRhLmVycm9yKSA6IChjb2xsYXBzZUVycm9yU3BhY2UgPyBudWxsIDogUmVhY3QuY3JlYXRlRWxlbWVudChcXFwicFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidmFsaWRhdGlvbi1lcnJvci1tZXNzYWdlXFxcIiB9LCBcXFwiXFxcXHUwMEEwXFxcIikpKSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuZ2VuZXJhdGVDbGllbnRTZWNyZXQgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICBmaWVsZC5pbnB1dC5vbkNoYW5nZSh1dWlkLnYxKCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5zdGF0ZSA9IHt9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFRleHRJbnB1dC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgbmFtZSA9IF9hLm5hbWUsIGxhYmVsID0gX2EubGFiZWwsIGZvcm1hdCA9IF9hLmZvcm1hdCwgbm9ybWFsaXplID0gX2Eubm9ybWFsaXplLCBwYXJzZSA9IF9hLnBhcnNlLCB2YWxpZGF0ZSA9IF9hLnZhbGlkYXRlLCB3YXJuID0gX2Eud2FybjtcXG4gICAgICAgIHZhciBiYXNlRmllbGRQcm9wcyA9IHtcXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxcbiAgICAgICAgICAgIGZvcm1hdDogZm9ybWF0LFxcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogbm9ybWFsaXplLFxcbiAgICAgICAgICAgIHBhcnNlOiBwYXJzZSxcXG4gICAgICAgICAgICB2YWxpZGF0ZTogdmFsaWRhdGUsXFxuICAgICAgICAgICAgd2Fybjogd2FyblxcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZCwgX19hc3NpZ24oe30sIGJhc2VGaWVsZFByb3BzLCB7IGNvbXBvbmVudDogdGhpcy5yZW5kZXJUZXh0IH0pKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIFRleHRJbnB1dDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFRleHRJbnB1dDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHYxID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTcpO1xcbnZhciB2NCA9IF9fd2VicGFja19yZXF1aXJlX18oMjU4KTtcXG5cXG52YXIgdXVpZCA9IHY0O1xcbnV1aWQudjEgPSB2MTtcXG51dWlkLnY0ID0gdjQ7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB1dWlkO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI1NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG52YXIgcm5nID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nik7XFxudmFyIGJ5dGVzVG9VdWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nyk7XFxuXFxuLy8gKipgdjEoKWAgLSBHZW5lcmF0ZSB0aW1lLWJhc2VkIFVVSUQqKlxcbi8vXFxuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcXG4vLyBhbmQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3V1aWQuaHRtbFxcblxcbnZhciBfbm9kZUlkO1xcbnZhciBfY2xvY2tzZXE7XFxuXFxuLy8gUHJldmlvdXMgdXVpZCBjcmVhdGlvbiB0aW1lXFxudmFyIF9sYXN0TVNlY3MgPSAwO1xcbnZhciBfbGFzdE5TZWNzID0gMDtcXG5cXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Jyb29mYS9ub2RlLXV1aWQgZm9yIEFQSSBkZXRhaWxzXFxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcXG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xcbiAgdmFyIGIgPSBidWYgfHwgW107XFxuXFxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcXG4gIHZhciBub2RlID0gb3B0aW9ucy5ub2RlIHx8IF9ub2RlSWQ7XFxuICB2YXIgY2xvY2tzZXEgPSBvcHRpb25zLmNsb2Nrc2VxICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmNsb2Nrc2VxIDogX2Nsb2Nrc2VxO1xcblxcbiAgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XFxuICAvLyBzcGVjaWZpZWQuICBXZSBkbyB0aGlzIGxhemlseSB0byBtaW5pbWl6ZSBpc3N1ZXMgcmVsYXRlZCB0byBpbnN1ZmZpY2llbnRcXG4gIC8vIHN5c3RlbSBlbnRyb3B5LiAgU2VlICMxODlcXG4gIGlmIChub2RlID09IG51bGwgfHwgY2xvY2tzZXEgPT0gbnVsbCkge1xcbiAgICB2YXIgc2VlZEJ5dGVzID0gcm5nKCk7XFxuICAgIGlmIChub2RlID09IG51bGwpIHtcXG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcXG4gICAgICBub2RlID0gX25vZGVJZCA9IFtcXG4gICAgICAgIHNlZWRCeXRlc1swXSB8IDB4MDEsXFxuICAgICAgICBzZWVkQnl0ZXNbMV0sIHNlZWRCeXRlc1syXSwgc2VlZEJ5dGVzWzNdLCBzZWVkQnl0ZXNbNF0sIHNlZWRCeXRlc1s1XVxcbiAgICAgIF07XFxuICAgIH1cXG4gICAgaWYgKGNsb2Nrc2VxID09IG51bGwpIHtcXG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcXG4gICAgfVxcbiAgfVxcblxcbiAgLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcXG4gIC8vICgxNTgyLTEwLTE1IDAwOjAwKS4gIEpTTnVtYmVycyBhcmVuJ3QgcHJlY2lzZSBlbm91Z2ggZm9yIHRoaXMsIHNvXFxuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXFxuICB2YXIgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogbmV3IERhdGUoKS5nZXRUaW1lKCk7XFxuXFxuICAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXFxuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xcbiAgdmFyIG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxO1xcblxcbiAgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxcbiAgdmFyIGR0ID0gKG1zZWNzIC0gX2xhc3RNU2VjcykgKyAobnNlY3MgLSBfbGFzdE5TZWNzKS8xMDAwMDtcXG5cXG4gIC8vIFBlciA0LjIuMS4yLCBCdW1wIGNsb2Nrc2VxIG9uIGNsb2NrIHJlZ3Jlc3Npb25cXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XFxuICAgIGNsb2Nrc2VxID0gY2xvY2tzZXEgKyAxICYgMHgzZmZmO1xcbiAgfVxcblxcbiAgLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcXG4gIC8vIHRpbWUgaW50ZXJ2YWxcXG4gIGlmICgoZHQgPCAwIHx8IG1zZWNzID4gX2xhc3RNU2VjcykgJiYgb3B0aW9ucy5uc2VjcyA9PT0gdW5kZWZpbmVkKSB7XFxuICAgIG5zZWNzID0gMDtcXG4gIH1cXG5cXG4gIC8vIFBlciA0LjIuMS4yIFRocm93IGVycm9yIGlmIHRvbyBtYW55IHV1aWRzIGFyZSByZXF1ZXN0ZWRcXG4gIGlmIChuc2VjcyA+PSAxMDAwMCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3V1aWQudjEoKTogQ2FuXFxcXCd0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlYycpO1xcbiAgfVxcblxcbiAgX2xhc3RNU2VjcyA9IG1zZWNzO1xcbiAgX2xhc3ROU2VjcyA9IG5zZWNzO1xcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7XFxuXFxuICAvLyBQZXIgNC4xLjQgLSBDb252ZXJ0IGZyb20gdW5peCBlcG9jaCB0byBHcmVnb3JpYW4gZXBvY2hcXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwO1xcblxcbiAgLy8gYHRpbWVfbG93YFxcbiAgdmFyIHRsID0gKChtc2VjcyAmIDB4ZmZmZmZmZikgKiAxMDAwMCArIG5zZWNzKSAlIDB4MTAwMDAwMDAwO1xcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcXG4gIGJbaSsrXSA9IHRsID4+PiAxNiAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCA+Pj4gOCAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCAmIDB4ZmY7XFxuXFxuICAvLyBgdGltZV9taWRgXFxuICB2YXIgdG1oID0gKG1zZWNzIC8gMHgxMDAwMDAwMDAgKiAxMDAwMCkgJiAweGZmZmZmZmY7XFxuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xcbiAgYltpKytdID0gdG1oICYgMHhmZjtcXG5cXG4gIC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXFxuICBiW2krK10gPSB0bWggPj4+IDI0ICYgMHhmIHwgMHgxMDsgLy8gaW5jbHVkZSB2ZXJzaW9uXFxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjtcXG5cXG4gIC8vIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYCAoUGVyIDQuMi4yIC0gaW5jbHVkZSB2YXJpYW50KVxcbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwO1xcblxcbiAgLy8gYGNsb2NrX3NlcV9sb3dgXFxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7XFxuXFxuICAvLyBgbm9kZWBcXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgNjsgKytuKSB7XFxuICAgIGJbaSArIG5dID0gbm9kZVtuXTtcXG4gIH1cXG5cXG4gIHJldHVybiBidWYgPyBidWYgOiBieXRlc1RvVXVpZChiKTtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB2MTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHJuZyA9IF9fd2VicGFja19yZXF1aXJlX18oODYpO1xcbnZhciBieXRlc1RvVXVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oODcpO1xcblxcbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcXG5cXG4gIGlmICh0eXBlb2Yob3B0aW9ucykgPT0gJ3N0cmluZycpIHtcXG4gICAgYnVmID0gb3B0aW9ucyA9PT0gJ2JpbmFyeScgPyBuZXcgQXJyYXkoMTYpIDogbnVsbDtcXG4gICAgb3B0aW9ucyA9IG51bGw7XFxuICB9XFxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcXG5cXG4gIHZhciBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcXG5cXG4gIC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcXG4gIHJuZHNbNl0gPSAocm5kc1s2XSAmIDB4MGYpIHwgMHg0MDtcXG4gIHJuZHNbOF0gPSAocm5kc1s4XSAmIDB4M2YpIHwgMHg4MDtcXG5cXG4gIC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxcbiAgaWYgKGJ1Zikge1xcbiAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgMTY7ICsraWkpIHtcXG4gICAgICBidWZbaSArIGlpXSA9IHJuZHNbaWldO1xcbiAgICB9XFxuICB9XFxuXFxuICByZXR1cm4gYnVmIHx8IGJ5dGVzVG9VdWlkKHJuZHMpO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IHY0O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI1OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XFxuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcXG4gICAgICAgICAgICB0W3BdID0gc1twXTtcXG4gICAgfVxcbiAgICByZXR1cm4gdDtcXG59O1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgcmVkdXhfZm9ybV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgaGVscF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XFxudmFyIFNlbGVjdElucHV0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFNlbGVjdElucHV0LCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBTZWxlY3RJbnB1dChwcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5yZW5kZXJTZWxlY3QgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5wcm9wcywgbGFiZWwgPSBfYS5sYWJlbCwgb3B0aW9ucyA9IF9hLm9wdGlvbnMsIGRpc2FibGVkID0gX2EuZGlzYWJsZWQsIGhlbHAgPSBfYS5oZWxwLCBjb250YWluZXJDbGFzcyA9IF9hLmNvbnRhaW5lckNsYXNzLCBpbnB1dENsYXNzID0gX2EuaW5wdXRDbGFzcywgaGlkZUVtcHR5T3B0aW9uID0gX2EuaGlkZUVtcHR5T3B0aW9uLCBjb2xsYXBzZUVycm9yU3BhY2UgPSBfYS5jb2xsYXBzZUVycm9yU3BhY2U7XFxuICAgICAgICAgICAgdmFyIGlucHV0ID0gZmllbGQuaW5wdXQsIG1ldGEgPSBmaWVsZC5tZXRhO1xcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQnOiBtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yXFxuICAgICAgICAgICAgICAgIH0pIH0sXFxuICAgICAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgICAgICBoZWxwICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoaGVscF8xLmRlZmF1bHQsIHsgdGV4dDogaGVscCB9KSkgOiBudWxsLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzZWxlY3RcXFwiLCBfX2Fzc2lnbih7fSwgaW5wdXQsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWNvbnRyb2wnLCBpbnB1dENsYXNzKSwgZGlzYWJsZWQ6IGRpc2FibGVkIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgaGlkZUVtcHR5T3B0aW9uID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcIm9wdGlvblxcXCIsIHsgdmFsdWU6IFxcXCJcXFwiIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdCwgaWR4KSB7IHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJvcHRpb25cXFwiLCB7IGtleTogaWR4LCB2YWx1ZTogb3B0LnZhbHVlLCBkaXNhYmxlZDogb3B0LmRpc2FibGVkIH0sIG9wdC5sYWJlbCB8fCBvcHQudmFsdWUpOyB9KSksXFxuICAgICAgICAgICAgICAgIChtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yKSA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgbWV0YS5lcnJvcikgOiAoY29sbGFwc2VFcnJvclNwYWNlID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgXFxcIlxcXFx1MDBBMFxcXCIpKSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0ge307XFxuICAgICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG4gICAgU2VsZWN0SW5wdXQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgIHZhciBfYSA9IHRoaXMucHJvcHMsIG9wdGlvbnMgPSBfYS5vcHRpb25zLCBuYW1lID0gX2EubmFtZSwgZm9ybWF0ID0gX2EuZm9ybWF0LCBub3JtYWxpemUgPSBfYS5ub3JtYWxpemUsIHBhcnNlID0gX2EucGFyc2UsIHZhbGlkYXRlID0gX2EudmFsaWRhdGUsIHdhcm4gPSBfYS53YXJuLCBjb250YWluZXJDbGFzcyA9IF9hLmNvbnRhaW5lckNsYXNzLCBoZWxwID0gX2EuaGVscCwgbGFiZWwgPSBfYS5sYWJlbCwgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3M7XFxuICAgICAgICB2YXIgYmFzZUZpZWxkUHJvcHMgPSB7XFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcXG4gICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcXG4gICAgICAgICAgICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBwYXJzZTogcGFyc2UsXFxuICAgICAgICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlLFxcbiAgICAgICAgICAgIHdhcm46IHdhcm5cXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZCwgX19hc3NpZ24oe30sIGJhc2VGaWVsZFByb3BzLCB7IGNvbXBvbmVudDogdGhpcy5yZW5kZXJTZWxlY3QgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1ncm91cCcsIGNvbnRhaW5lckNsYXNzKSB9LFxcbiAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICBsYWJlbCxcXG4gICAgICAgICAgICAgICAgaGVscCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KGhlbHBfMS5kZWZhdWx0LCB7IHRleHQ6IGhlbHAgfSkpIDogbnVsbCxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzZWxlY3RcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1jb250cm9sJywgaW5wdXRDbGFzcyksIGRpc2FibGVkOiB0cnVlIH0pKSk7XFxuICAgIH07XFxuICAgIHJldHVybiBTZWxlY3RJbnB1dDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFNlbGVjdElucHV0O1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI2MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciBjbGFzc05hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XFxudmFyIHNwaW5uZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYxKTtcXG52YXIgVG9nZ2xlUGFuZWwgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xcbiAgICBfX2V4dGVuZHMoVG9nZ2xlUGFuZWwsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFRvZ2dsZVBhbmVsKHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnRvZ2dsZVBhbmVsQ29udGVudCA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy50b2dnbGFibGUgIT09IGZhbHNlKSB7XFxuICAgICAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcXG4gICAgICAgICAgICAgICAgICAgIG9wZW5lZDogIV90aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMudG9nZ2xlQ2FsbGJhY2spIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcm9wcy50b2dnbGVDYWxsYmFjayhfdGhpcy5zdGF0ZS5vcGVuZWQpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7XFxuICAgICAgICAgICAgb3BlbmVkOiBfdGhpcy5wcm9wcy5kZWZhdWx0T3BlbmVkXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFRvZ2dsZVBhbmVsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgdGl0bGVTcGlubmVyID0gdGhpcy5wcm9wcy5zaG93U3Bpbm5lciA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInNwaW5uZXItY29udGFpbmVyXFxcIiB9LFxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoc3Bpbm5lcl8xLmRlZmF1bHQsIG51bGwpKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIGxDdXN0b21Db250cm9scyA9IHRoaXMucHJvcHMubGVmdEN1c3RvbUNvbnRyb2xzID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtaGVhZGluZy1jb250cm9sc1xcXCIgfSwgdGhpcy5wcm9wcy5sZWZ0Q3VzdG9tQ29udHJvbHMpKSA6IG51bGw7XFxuICAgICAgICB2YXIgckN1c3RvbUNvbnRyb2xzID0gdGhpcy5wcm9wcy5yaWdodEN1c3RvbUNvbnRyb2xzID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtaGVhZGluZy1jb250cm9sc1xcXCIsIHN0eWxlOiB7IHJpZ2h0OiAwIH0gfSwgdGhpcy5wcm9wcy5yaWdodEN1c3RvbUNvbnRyb2xzKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIGNhbmNlbEJ0biA9ICh0aGlzLnByb3BzLmNhbmNlbEJ0biAmJiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5sYWJlbCAmJiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5hY3Rpb24pID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnYnRuJywgdGhpcy5wcm9wcy5jYW5jZWxCdG4uY3NzQ2xhc3MsIHtcXG4gICAgICAgICAgICAgICAgJ2J0bi1mb250IGJ0bi10cmFucyc6ICF0aGlzLnByb3BzLmNhbmNlbEJ0bi5jc3NDbGFzc1xcbiAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5hY3Rpb24gfSwgdGhpcy5wcm9wcy5jYW5jZWxCdG4ubGFiZWwpKSA6IG51bGw7XFxuICAgICAgICB2YXIgc3VibWl0QnRuID0gKHRoaXMucHJvcHMuc3VibWl0QnRuICYmIHRoaXMucHJvcHMuc3VibWl0QnRuLmxhYmVsICYmIHRoaXMucHJvcHMuc3VibWl0QnRuLmFjdGlvbikgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiYnV0dG9uXFxcIiwgeyB0eXBlOiBcXFwiYnV0dG9uXFxcIiwgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdidG4gcHVsbC1yaWdodCcsIHRoaXMucHJvcHMuc3VibWl0QnRuLmNzc0NsYXNzLCB7XFxuICAgICAgICAgICAgICAgICdidG4tc3VjY2Vzcyc6ICF0aGlzLnByb3BzLnN1Ym1pdEJ0bi5jc3NDbGFzc1xcbiAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnByb3BzLnN1Ym1pdEJ0bi5hY3Rpb24gfSwgdGhpcy5wcm9wcy5zdWJtaXRCdG4ubGFiZWwpKSA6IG51bGw7XFxuICAgICAgICB2YXIgcGFuZWxGb290ZXIgPSAoY2FuY2VsQnRuIHx8IHN1Ym1pdEJ0bikgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJwYW5lbC1mb290ZXJcXFwiIH0sXFxuICAgICAgICAgICAgY2FuY2VsQnRuLFxcbiAgICAgICAgICAgIHN1Ym1pdEJ0bikpIDogbnVsbDtcXG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0XFxcIiwgc3R5bGU6IHRoaXMucHJvcHMuY3VzdG9tU3R5bGUgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcyhcXFwicGFuZWwtaGVhZGluZyBcXFwiICsgdGhpcy5wcm9wcy5oZWFkZXJDdXN0b21DU1MsIHtcXG4gICAgICAgICAgICAgICAgICAgICdjbGljay1wb2ludGVyJzogdGhpcy5wcm9wcy50b2dnbGFibGUgIT09IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgJ2hpZGRlbic6ICEhdGhpcy5wcm9wcy5oaWRlVGl0bGVcXG4gICAgICAgICAgICAgICAgfSksIG9uQ2xpY2s6IHRoaXMudG9nZ2xlUGFuZWxDb250ZW50IH0sXFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImgzXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ3BhbmVsLXRpdGxlJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdoYXMtc3Bpbm5lcic6IHRoaXMucHJvcHMuc2hvd1NwaW5uZXJcXG4gICAgICAgICAgICAgICAgICAgIH0pIH0sIHRoaXMucHJvcHMucGFuZWxUaXRsZSksXFxuICAgICAgICAgICAgICAgIHRpdGxlU3Bpbm5lcixcXG4gICAgICAgICAgICAgICAgbEN1c3RvbUNvbnRyb2xzLFxcbiAgICAgICAgICAgICAgICByQ3VzdG9tQ29udHJvbHMsXFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdhY3Rpb25zJywgeyAnaGlkZGVuJzogdGhpcy5wcm9wcy50b2dnbGFibGUgPT09IGZhbHNlIH0pIH0sXFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2ZhcycsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZXZyb24tZG93bic6ICF0aGlzLnN0YXRlLm9wZW5lZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZXZyb24tdXAnOiB0aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIH0pKSksXFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ3BhbmVsLWJvZHknLCB7XFxuICAgICAgICAgICAgICAgICAgICAnaGlkZGVuJzogIXRoaXMuc3RhdGUub3BlbmVkXFxuICAgICAgICAgICAgICAgIH0pIH0sIHRoaXMucHJvcHMuY2hpbGRyZW4pLFxcbiAgICAgICAgICAgIHBhbmVsRm9vdGVyKSk7XFxuICAgIH07XFxuICAgIFRvZ2dsZVBhbmVsLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gKG5leHRQcm9wcykge1xcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVmYXVsdE9wZW5lZCAhPT0gbmV4dFByb3BzLmRlZmF1bHRPcGVuZWQpIHtcXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcXG4gICAgICAgICAgICAgICAgb3BlbmVkOiBuZXh0UHJvcHMuZGVmYXVsdE9wZW5lZFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9O1xcbiAgICByZXR1cm4gVG9nZ2xlUGFuZWw7XFxufShSZWFjdC5Db21wb25lbnQpKTtcXG5leHBvcnRzLmRlZmF1bHQgPSBUb2dnbGVQYW5lbDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XFxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcXG4gICAgfTtcXG59KSgpO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgc3Bpbm5lcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjIpO1xcbnZhciBTcGlubmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFNwaW5uZXIsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFNwaW5uZXIocHJvcHMpIHtcXG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgfVxcbiAgICBTcGlubmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX2EgPSB0aGlzLnByb3BzLCB0b3AgPSBfYS50b3AsIGJvdHRvbSA9IF9hLmJvdHRvbSwgcmlnaHQgPSBfYS5yaWdodCwgbGVmdCA9IF9hLmxlZnQsIHNpemUgPSBfYS5zaXplO1xcbiAgICAgICAgdmFyIHNwaW5uZXJTdHlsZSA9IHtcXG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcXG4gICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxcbiAgICAgICAgICAgIG1hcmdpbjogJ2F1dG8nLFxcbiAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXFxuICAgICAgICAgICAgdG9wOiB0b3AsXFxuICAgICAgICAgICAgYm90dG9tOiBib3R0b20sXFxuICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0LFxcbiAgICAgICAgICAgIGxlZnQ6IGxlZnRcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiAnc3Bpbm5lcicsIHN0eWxlOiBzcGlubmVyU3R5bGUgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJpbWdcXFwiLCB7IHNyYzogc3Bpbm5lcl8xLnNwaW5uZXIsIGFsdDogJ0xvYWRpbmcuLi4nLCB3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IDMyLCBoZWlnaHQ6IHRoaXMucHJvcHMuc2l6ZSB8fCAzMiB9KSkpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gU3Bpbm5lcjtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFNwaW5uZXI7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbmV4cG9ydHMuc3Bpbm5lciA9ICdkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhRQUJBQVBJQUFQeWxiZjJtYnYyNmovM09yLzdpMFA3dDR2MjdrQUFBQUNIL0MwNUZWRk5EUVZCRk1pNHdBd0VBQUFBaC9ob2lRM0psWVhSbFpDQjNhWFJvSUVOb2FXMXdiSGt1WTI5dElnQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NrbXF2Zmlxd2J2L25pS01aR21XUzZabUcraCs0aW1iNldvVDdhdkhjMS9mcXB6T3hldkpma0NNY0FnREdIMktaQkRBZkJXZnFLaFVTYTJDcnRnUmNvdnJla1BPTUUxTHJpelA0UEI0Ky9iR3NYTnB2WHAvNXBON1RIMUdmMENCUTROUUFHMFdoenRwYWlTRk40NVdrSkVDa3phVlJKZVJtaXVjWDU1cW9GTm5UWmlTYkcyaXFhcVpFN0t6dExXMnQ3aTBCYnU4dmI2OXVRd0J3OFRGeHNVTHY4cS93UXZIejhmSnk5TUZ6UXJRMk1QUzFNcldBTm5ZMjl5KzN1RFE0dU84NWViUkN1bk0xdXp0QU8vazhmTEk3dlhxOS9qYSt2dXE5Zk9IN3QwNmZ3RUtwanRJRU9BK2h2Z1Vqb01vVHlJM2l1d3NVc05vVG5yak5JN2dQQzREbVUxa3Q0RVJ2YWxjeWJKbGc0QzdITmFUYVpEbVFub3diVTdVZVJGblFKNGJnWDcwK1pEb1RLRWpqZGFFS1ZEcFRhWklUenJkQ1hWcVQ2dEJxMWJGT2xScnpxand2UDRFYTA5c1VhNUp6UjVGZTFKdFRiWmh2MjUxKy9RcjNMSnk3ZEtscWpmdjJMbCtpMjUxU2JpdzRRZ0pBQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTbG1xdmZncXdydi9uaktNWkdtV1M2Wm1HK2grNGltYjZXb1g3YXZIYzEvZnFwek94ZXZKZmtDTWNBZ0RHSDJLWkJEQWZCV2ZxS2hVU2EyQ3J0Z1Jjb3ZyZWtQT01FMUxyaXpQNFBCNCsvYkdzWE5wdlhwLzVwTjdUSDFHZjBDQlE0TlFBRzBXaHp0cGFpU0ZONDVXa0pFRGt6YVZSSmVSbWl1Y1g1NXFvRk5uVFppU2JHMmlxYXFaRTdLenRMVzJ0N2kwakc2NUN3Sy93TUhDd2FZc3ZRckR5Y1BGWE1mS3o3L01Hc2NBME0vU2pkVFd5dGk4enR2THJHVFUxZURDM1dYZjVzRG81T3ZFNG5UYTc5SHhldlAwN2Zqdit1cjg5b0QycmV2WGkxNjlSYnZjR1NTWXk2QUFocmdjUXJ3bGtaekZpeGd6TnRoVmhuR2pnZ0FnUTRvY0tWS2ZSd0FrVTVJMG1SQ2x5cGNCV0RMNkNGT2x6Rll1YTY0RWFBamh6Snc2Uy9LazVCTm4wSjFGeHlXVmQzVGtUYVZOaFM2OWR6SnF5S2RNcmNZY3VtbHFRSzFidmZhc3FoWHJQYkJtdjVibEdrb3NVYlJzcDVDMW1yWW5YTGRkNTBiVnlMZXZYMWtKQUFBaCtRUUpDZ0FBQUN3QUFBQUFRQUJBQUFBRC93aTYzUDR3U2xtcXZmaXF6TE1pWUNpTzR0S2QxWVoySCttTzVzcXBNdGErZUZ4cndHNER1S0RPVjZBUmIwSFMwR2RrQXBPdTVhNDVmVUpoMUZwV2hyeUNwTm9lTVdYMWZyY3JOS3JyQlhQRlkvYlZuWVlmeTJiNjJ1NDBsOVFuZ0N4NGJZSXpmRlYrSVhxQmlHR0taNDV2WTJTUUJJeURsRVdFYzRZZWtuV1dFNk9rcGFhbnFLbW1tcW9NQTYrd3NiS3htSWV0QUxPNXM3V2Z0N3Evcjd3L3ZzQzZ3anpFeGJ1ZXc2M0t1Y2NXdHdyUHk2Qjd5ZFhCek1qTzJyRFJaTm5hNFp2ajFlWFR1Ti9iMTQzbnorblQ3TzJzOC9UeThNcjUzdXo4cXZRRy9Fc1ZVSjNCZ3dnVE9yQVhvS0hEaHhBZktqQkFzYUxGaXhibFJkd1ljWE1peG84WE5YSWNHY0FqeUpNaVNXNDBlZkpqU3BVUVdiWU15VTBhQUpnckFjd0UrUkpuUTVrN0tmYjBDVFRvVUp4RmR4NkZtWFRtVXBWTld6NGxHUlZsVFRJK1krb01TdFBkb0t3U3QzS3RPSFZrVlo1WE40RjFlTlpsV2dWcmY0b2RhNkFzeDdZWTdlYWtTMWFoMzcrQUp5UUFBQ0g1QkFrS0FBQUFMQUFBQUFCQUFFQUFBQVAvQ0xyYy9qQktXYXE5K0tyTTgrNWdzWVRnUjNyQXlZMHFacmJWQzdOd25OWTJidCs0M1BvcVdnMTRJcEtFTTk1UW1XVCtuRUZvMFJpaWxxUkhhMGU3d2xhNUtKM0lleVZ2elYweDhxbEdvOXd1dUVadVdVZmJiWHBPQjQ3cngzaDhmWE9CUFlOMWY0YzdFNHlOam8rUWtaS01lWk1BQkppWm1wdWFkbE9XbDV5aW01NVpvS09vbUtWZnA2bWpxMldXcnErS1k2MnpwTFdnQ3JpY3NHZTN2YXE2dThLZHhNSEN2MTNKdmN0dnNzYkRpY1hTQk05KzBkTFljODI0M0lqZXMrQ0xrOWJYeU5yRzVMYnF5cnZ3OGZMekVnSDI5L2o1K0FvQy9mNy9BUDhwR0VDd29NR0RCaGZvVzZpUFg4Q0hBQWNpbkhoUUljT0xBUnhDM0NpUmlxSkhpeGdYYXR6NHNLUEhpU0JENWh0Sk1pS0FreDhWcUJRSm9DVkVrekFUeXB5NXNxYk5nRGh6RWt6Sk02UFBud0pmQ3EyNHM2Zzlsa2lEQ2lYS0UrcFBxVG1wenJScUV5dE1yU3E1dHZSNkVteElzU1RKeGdUZzlCNWFqa3FYRmpTTDhlM051SElIMEwxb3R5UmV1WHNaOWdYNmQybGdta2hkNXAzYjFPbGd4WXYxMHB0TXVmS2pCQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTbG1xdmZpcXpQUHVZTEdFNEVkNndNbU5LbWEyMVF1emNKeldObTdmdU56Nktsb05lQ0tTaERQZVVKbGsvcHhCYU5FWW9wYWtSMnRIdThKV3VTaWR5SHNsYjgxZE1mS3BScVBjTHJoR2JsbEgyMjE2VGdlTzY4ZDRmSDF6Z1QyRGRYK0hPeE9Nalk2UGtKR1NqQUdWbHBlWWw1TU1lWm1lbVp0MlV3Q2ZwWldoaW1Pa3BwK29pUXFzcmFpZHNhQ3pncXUxbXJlR3VicW52RXUrdjY2MHY4Q2h4c2ZGdU1lV3pMM095SnZLeE1GTjBnSFF3dG5iMk5MZVQ4TzY0VkhqdGVXanJ1dnM3ZTRMQXZIeTgvVHpDZ1A0K2ZyNytnb0Uvd0FEQ2d3SXI1NUJldmY0S2R6bmI2QkRnUVVQU2t5NHNHTERoeGdqU2pSSXNZYWl3b3NZSFdyY2lCQ0FSNHNBUW1aVVFQSmd4NVA5VXFvVXliSmx2WmN3OFlHY0NYQ2tUUUU0Yys3a1NjQ256YUF3aC9JMDJoTHBTYVV6bVpKMDZoR3FTcWticWFJa0NySG1UM2xhRjFvTmlYV2l5WndNWlhMOVY5YmxXYlQ1eHE0RThOWGVXN2dENUQ1c3kvRXVYTDAwNmRhTkYvYWoyclY4Yi9wRkMzamd1OGVRSXpOS0FBQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NobXF2Zmlxd3J2LzNnYU8zNUtkbVVpdTZqcWFhQnkwYmduVUpDeWZOTTcxUHQwT0E4UVZhOEtoNWVoaXNoVEsxTTFubzlvQVVlTFUrdHR5azFGbnptc0ZLOFV2TXRVOFJJUGMxNnhHSGFRYm9mSUtQR1JINHZON0hZRmRXSGt6ZlUySVQ0V0FpbU5jZ245eWd3V1ViRHVXam1tTWs1cHZubGNUb3FPa3BhYW5xS0lDcTZ5dHJxMnBESkNFcjdXdnNRdXpsUXEydmF1NG1RQyt2Y0NnZk1MRHRjVzZDOG5Ld015OHpxN0xzODNUc05EVzB0aS8ycERYM1FMVjROemQ1Ri9tMk9obDZ0UHNhKzdPOEhYSTR2UjM5dWZmNmZyci9PMzh2UU1ZVCtBOGd2V0tLVnpJc09HQ0FSQWpTcHdvVVFHQml4Z3phc3dZakh1aVI0b1dONHJVMlBHanlRRWhSNm9zZWRKalNwVWlXYmFjK0JJbVNXT1JBTXgwQ2NEbVNKazdJZGIwZVJGbzBLRkVqZTVFNmxQcFRLWTJuYmFFQ2xQcVNhb3JjUklLU3JNbjBadlJkSEtOaVBXbjFsMWl4NkwwK2hXalZaTmxZNTU5cUhadFc0NXpGZFMxZTdkbzNyUmo0MjRNNXJDdzRjTVJFZ0FBSWZrRUNRb0FBQUFzQUFBQUFFQUFRQUFBQS84SXV0eitNRW9wcXIzNHFzQzcvNTVTakdScGxrdW1aaHZvZnVJcG0rbHFDKzJyeDNOZjM2cWN6c1hyeVg1QWpIQUlBeGg5aW1RUXdId1ZuNmlvVkVtdGdxN1lFWEtMNjNwRHpqQk5TNjRzeitEd2VQdjJ4ckZ6YWIxNmYrYVRlMHg5Um45QWdVT0RVQUJ0Rm9jN2FXb2toVGVPVnBDUkJaTTJsVVNYa1pvcm5GK2VhcUJUWjAyWWtteHRvcW1xbVJPeXM3UzF0cmU0dEFPN3ZMMit2YmtNc0xFQXY4YS93UXZEQzhmTnU4bUpNOHpPeDlDa2NnclUxZERMMmRySTNMRFQzOERocXVQa3orYVk2T25XM2NYcHZPL2kzdklEOU9mMjh2bnMrKzdyUHYwajEwOWd2SHNGU3czOGxoRGJRWDRCRlQ0RW1BemVQWFVWNjFuYnlMRjNvMGNHQkVLS0hFbHlaTFFqMS9Bb0tNbXk1TWtUTDljQWFFa3paTXdzOEdyU3ZMa3FwMDZXUE1XazlMUHlwOHVoaEpBcU1ucTBtMCttSW9QR2VncVZnTlNyUmF0YVZTcU5LOHFaV3JjNjFSaFdiRDJxVUxHaVphcVdiTmkyK3NCcWhldFBibFc2QnN2aWxhalhLMHkvTWo4S0hrdzRRZ0lBSWZrRUNRb0FBQUFzQUFBQUFFQUFRQUFBQS84SXV0eitNRW81cXIzNEtzRzcvNTRTakdScGxrdW1aaHZvZnVJcG0rbHFEKzJyeDNOZjM2cWN6c1hyeVg1QWpIQUlBeGg5aW1RUXdId1ZuNmlvVkVtdGdxN1lFWEtMNjNwRHpqQk5TNjRzeitEd2VQdjJ4ckZ6YWIxNmYrYVRlMHg5Um45QWdVT0RVQUJ0Rm9jN2FXb2toVGVPVnBDUkFaTTJsVVNYa1pvcm5GK2VhcUJUWjAyWWtteHRvcW1xbVJPeXM3UzF0cmU0dEFTN3ZMMit2YmtNQmNQRXhjYkZDNy9LdjhFTHg4L0h5Y3ZUQk0wSzBOakQwdFRLMWdEWjJOdmN2dDdnME9ManZPWG0wUXJwek5iczdRRHY1UEh5eU83MTZ2ZjQydnI3cXZYemgrN2RPbjhGQ3FZN1NCRGdQb2I0Rkk2REtFOGlONHJzTEZMRGFFNTM0elNPNER3dUE1bE5aTGVCRWIycFhNbXlaUU9FLzJBbS9BYlRXVTJhQ0svZHhObFFwczZjUDN2ZTlCazBKVkdpUEkwTzNYbDBLZENrRmFGbWxOcXhhTlNtVDdFS3plcDBhME9xSWNHV0ZCdk82bFN0S2NtZVUvdk1iRlcyN2RCR2hXdk1iVmlrY3M4eTdhcVVLOUM4YjEwS0hrdzRRZ0lBT3c9PSc7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Bpbm5lci5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIG1kNV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjQpO1xcbnZhciBiYXNlNjQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2Nyk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgd29yZGluZ3NfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjY5KTtcXG52YXIgQ29uZmlnXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3MCk7XFxudmFyIERhdGFfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjcxKTtcXG5leHBvcnRzLkVNQUlMX1JFR0VYID0gL15cXFxcUytAXFxcXFMrXFxcXC5cXFxcUyskLztcXG5leHBvcnRzLkNPTE9SX0NPREVfUkVHRVggPSAvXiMoW0EtRmEtZjAtOV17Nn18W0EtRmEtZjAtOV17M30pJC87XFxuZXhwb3J0cy5TQ09QRV9LRVlXT1JEX1JFR0VYID0gL15bYS16QS1aMC05LV9+QCTCo3zigqzCpcKnJl0rJC87XFxuZXhwb3J0cy5NQVBfUFJPUEVSVFlfS0VZX1JFR0VYID0gL15bYS16QS1aMC05LV9dKyQvO1xcbmV4cG9ydHMuWE1MX1RBR19SRUdFWCA9IC9eW2EtekEtWl86XVthLXpBLVowLTlfOlxcXFwtXFxcXC5dKiQvO1xcbmV4cG9ydHMuSFRUUFNfVVJMX1JFR0VYID0gL2h0dHBzOlxcXFwvXFxcXC8od3d3XFxcXC4pP1stYS16QS1aMC05QDolLl9cXFxcK34jPV17MiwyNTZ9XFxcXC5bYS16XXsyLDZ9XFxcXGIoWy1hLXpBLVowLTlAOiVfXFxcXCsufiM/JlxcXFwvPV0qKS87XFxuZnVuY3Rpb24gZ2V0V29yZGluZ3Mod29yZGluZ3MsIGxvY2FsZSkge1xcbiAgICB2YXIgY29tYmluZWRXb3JkaW5ncyA9IGRlZXBDb3B5KHdvcmRpbmdzXzEuTVVMVElMQU5HVUFHRV9XT1JESU5HUywgd29yZGluZ3MpO1xcbiAgICB2YXIgcmVzID0gT2JqZWN0LmtleXMoY29tYmluZWRXb3JkaW5ncykucmVkdWNlKGZ1bmN0aW9uIChkaWMsIGtleSkge1xcbiAgICAgICAgZGljW2tleV0gPSBjb21iaW5lZFdvcmRpbmdzW2tleV1bbG9jYWxlXTtcXG4gICAgICAgIHJldHVybiBkaWM7XFxuICAgIH0sIHt9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRXb3JkaW5ncyA9IGdldFdvcmRpbmdzO1xcbmZ1bmN0aW9uIGNvbXBpbGVXb3JkaW5ncyh3b3JkaW5ncywgbG9jYWxlKSB7XFxuICAgIGxvY2FsZSA9IGxvY2FsZSB8fCBcXFwiZW4tVVNcXFwiO1xcbiAgICB2YXIgcmVzID0gT2JqZWN0LmtleXMod29yZGluZ3MpLnJlZHVjZShmdW5jdGlvbiAoZGljLCBrZXkpIHtcXG4gICAgICAgIGRpY1trZXldID0gd29yZGluZ3Nba2V5XVtsb2NhbGVdO1xcbiAgICAgICAgcmV0dXJuIGRpYztcXG4gICAgfSwge30pO1xcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmNvbXBpbGVXb3JkaW5ncyA9IGNvbXBpbGVXb3JkaW5ncztcXG5mdW5jdGlvbiBnZXRHcmF2YXRhclVybChlbWFpbCkge1xcbiAgICB2YXIgYmFzZVVybCA9ICdodHRwczovL3NlY3VyZS5ncmF2YXRhci5jb20vYXZhdGFyLyc7XFxuICAgIHZhciBxdWVyeVBhcmFtcyA9ICc/cz0yMDAmZD1tbSc7XFxuICAgIHJldHVybiBiYXNlVXJsICsgbWQ1XzEuZGVmYXVsdChlbWFpbC50cmltKCkudG9Mb3dlckNhc2UoKSkgKyBxdWVyeVBhcmFtcztcXG59XFxuZXhwb3J0cy5nZXRHcmF2YXRhclVybCA9IGdldEdyYXZhdGFyVXJsO1xcbmZ1bmN0aW9uIGlzVmFsaWRQYXNzd29yZChwYXNzd29yZCkge1xcbiAgICB2YXIgbWluTWF4TGVuZ3RoID0gL15bXFxcXHNcXFxcU117OCwzMn0kLywgdXBwZXIgPSAvW0EtWl0vLCBsb3dlciA9IC9bYS16XS8sIG51bWJlciA9IC9bMC05XS8sIGNvdW50ID0gMDtcXG4gICAgaWYgKG1pbk1heExlbmd0aC50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgaWYgKHVwcGVyLnRlc3QocGFzc3dvcmQpKSB7XFxuICAgICAgICAgICAgY291bnQrKztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChsb3dlci50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgICAgIGNvdW50Kys7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobnVtYmVyLnRlc3QocGFzc3dvcmQpKSB7XFxuICAgICAgICAgICAgY291bnQrKztcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gY291bnQgPj0gMjtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkUGFzc3dvcmQgPSBpc1ZhbGlkUGFzc3dvcmQ7XFxuZnVuY3Rpb24gaXNWYWxpZEVtYWlsKGVtYWlsKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkVNQUlMX1JFR0VYLnRlc3QoZW1haWwpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRFbWFpbCA9IGlzVmFsaWRFbWFpbDtcXG5mdW5jdGlvbiBpc1ZhbGlkQ29sb3JDb2RlKGNvbG9yKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkNPTE9SX0NPREVfUkVHRVgudGVzdChjb2xvcik7XFxufVxcbmV4cG9ydHMuaXNWYWxpZENvbG9yQ29kZSA9IGlzVmFsaWRDb2xvckNvZGU7XFxuZnVuY3Rpb24gaXNOb3RFbXB0eSh2YWx1ZSkge1xcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID4gMDtcXG59XFxuZXhwb3J0cy5pc05vdEVtcHR5ID0gaXNOb3RFbXB0eTtcXG5mdW5jdGlvbiBpc1ZhbGlkU2NvcGVLZXl3b3JkKHZhbHVlKSB7XFxuICAgIHJldHVybiBleHBvcnRzLlNDT1BFX0tFWVdPUkRfUkVHRVgudGVzdCh2YWx1ZSk7XFxufVxcbmV4cG9ydHMuaXNWYWxpZFNjb3BlS2V5d29yZCA9IGlzVmFsaWRTY29wZUtleXdvcmQ7XFxuZnVuY3Rpb24gaXNWYWxpZEtleUNoYXIodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuTUFQX1BST1BFUlRZX0tFWV9SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkS2V5Q2hhciA9IGlzVmFsaWRLZXlDaGFyO1xcbmZ1bmN0aW9uIGlzVmFsaWRYTUxUYWcodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuWE1MX1RBR19SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkWE1MVGFnID0gaXNWYWxpZFhNTFRhZztcXG5mdW5jdGlvbiBpc1ZhbGlkSHR0cHNVcmwodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuSFRUUFNfVVJMX1JFR0VYLnRlc3QodmFsdWUpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRIdHRwc1VybCA9IGlzVmFsaWRIdHRwc1VybDtcXG5mdW5jdGlvbiBlc2NhcGVYbWwoeG1sKSB7XFxuICAgIHJldHVybiB4bWwucmVwbGFjZSgvWzw+JidcXFwiXS9nLCBmdW5jdGlvbiAoYykge1xcbiAgICAgICAgc3dpdGNoIChjKSB7XFxuICAgICAgICAgICAgY2FzZSAnPCc6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJmx0JztcXG4gICAgICAgICAgICBjYXNlICc+JzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmZ3QnO1xcbiAgICAgICAgICAgIGNhc2UgJyYnOlxcbiAgICAgICAgICAgICAgICByZXR1cm4gJyZhbXAnO1xcbiAgICAgICAgICAgIGNhc2UgJ1xcXFwnJzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmYXBvcyc7XFxuICAgICAgICAgICAgY2FzZSAnXFxcIic6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJnF1b3QnO1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuZXhwb3J0cy5lc2NhcGVYbWwgPSBlc2NhcGVYbWw7XFxuZnVuY3Rpb24gdXRmOEpTT05fdG9fYjY0VVJJKGpzb24pIHtcXG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChiYXNlNjQuZW5jb2RlKGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoanNvbikpKSkpO1xcbn1cXG5leHBvcnRzLnV0ZjhKU09OX3RvX2I2NFVSSSA9IHV0ZjhKU09OX3RvX2I2NFVSSTtcXG5mdW5jdGlvbiBVUkliNjRfdG9fdXRmOEpTT04oc3RyKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGJhc2U2NC5kZWNvZGUoZGVjb2RlVVJJQ29tcG9uZW50KHN0cikpKSkpO1xcbiAgICB9XFxuICAgIGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgY29uc29sZS5sb2coJ0pTT04gcGFyc2luZyBlcnJvcjogJywgZXJyb3IpO1xcbiAgICAgICAgcmV0dXJuIHt9O1xcbiAgICB9XFxufVxcbmV4cG9ydHMuVVJJYjY0X3RvX3V0ZjhKU09OID0gVVJJYjY0X3RvX3V0ZjhKU09OO1xcbmZ1bmN0aW9uIGFycmF5TWluKGFycikge1xcbiAgICByZXR1cm4gYXJyLnJlZHVjZShmdW5jdGlvbiAocHJldiwgbmV4dCkge1xcbiAgICAgICAgcmV0dXJuIChwcmV2IDwgbmV4dCA/IHByZXYgOiBuZXh0KTtcXG4gICAgfSk7XFxufVxcbmV4cG9ydHMuYXJyYXlNaW4gPSBhcnJheU1pbjtcXG5mdW5jdGlvbiBhcnJheU1heChhcnIpIHtcXG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIG5leHQpIHtcXG4gICAgICAgIHJldHVybiAocHJldiA+IG5leHQgPyBwcmV2IDogbmV4dCk7XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmFycmF5TWF4ID0gYXJyYXlNYXg7XFxuZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xcbiAgICBpZiAoIXNpemUpIHtcXG4gICAgICAgIHJldHVybiAnMCBCJztcXG4gICAgfVxcbiAgICB2YXIgayA9IDEwMDA7XFxuICAgIHZhciBzaXplcyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQiddO1xcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZyhrKSk7XFxuICAgIHZhciB1bml0ID0gaSA8IDUgPyBzaXplc1tpXSA6IHNpemVzWzRdO1xcbiAgICByZXR1cm4gKHNpemUgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgxKSArICcgJyArIHVuaXQ7XFxufVxcbmV4cG9ydHMuZm9ybWF0RmlsZVNpemUgPSBmb3JtYXRGaWxlU2l6ZTtcXG5mdW5jdGlvbiBnZXRRdWVyeVBhcmFtcyhzZWFyY2hTdHJpbmcpIHtcXG4gICAgaWYgKCFzZWFyY2hTdHJpbmcpIHtcXG4gICAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbiAgICB2YXIgcXVlcnlTdHJpbmdQYXJhbXMgPSBzZWFyY2hTdHJpbmcuc3Vic3RyKDEpLnNwbGl0KCcmJyk7XFxuICAgIHZhciBxdWVyeVBhcmFtcyA9IHF1ZXJ5U3RyaW5nUGFyYW1zLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBxdWVyeVN0clBhcmFtKSB7XFxuICAgICAgICB2YXIga2V5VmFsdWUgPSBxdWVyeVN0clBhcmFtLnNwbGl0KCc9Jyk7XFxuICAgICAgICBpZiAoa2V5VmFsdWUubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICAgICAgYWNjW2tleVZhbHVlWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlWYWx1ZVsxXSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICB9LCB7fSk7XFxuICAgIHJldHVybiBxdWVyeVBhcmFtcztcXG59XFxuZXhwb3J0cy5nZXRRdWVyeVBhcmFtcyA9IGdldFF1ZXJ5UGFyYW1zO1xcbmZ1bmN0aW9uIGFkZFF1ZXJ5UGFyYW0odXJpLCBrZXksIHZhbHVlKSB7XFxuICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xcbiAgICBsaW5rLmhyZWYgPSB1cmk7XFxuICAgIGlmIChsaW5rLnNlYXJjaCkge1xcbiAgICAgICAgbGluay5zZWFyY2ggKz0gKCcmJyArIGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgICBsaW5rLnNlYXJjaCA9ICgnPycgKyBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xcbiAgICB9XFxuICAgIHJldHVybiBsaW5rO1xcbn1cXG5leHBvcnRzLmFkZFF1ZXJ5UGFyYW0gPSBhZGRRdWVyeVBhcmFtO1xcbmZ1bmN0aW9uIG9yZGVyQXNjKG9iamVjdCkge1xcbiAgICB2YXIgcmVzdWx0ID0ge307XFxuICAgIE9iamVjdC5rZXlzKG9iamVjdCkuc29ydCgpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcXG4gICAgfSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcbmV4cG9ydHMub3JkZXJBc2MgPSBvcmRlckFzYztcXG5mdW5jdGlvbiBvcmRlckRlc2Mob2JqZWN0KSB7XFxuICAgIHZhciByZXN1bHQgPSB7fTtcXG4gICAgT2JqZWN0LmtleXMob2JqZWN0KS5zb3J0KCkucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcXG4gICAgfSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcbmV4cG9ydHMub3JkZXJEZXNjID0gb3JkZXJEZXNjO1xcbmZ1bmN0aW9uIHNhdmVEYXRhQXNKU09ORmlsZShkYXRhLCBmaWxlTmFtZSwgZXh0ZW5zaW9uKSB7XFxuICAgIHZhciBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgJ1xcXFx0Jyk7XFxuICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2pzb25dLCB7XFxuICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vanNvbidcXG4gICAgfSk7XFxuICAgIHRyaWdnZXJEYXRhRG93bmxvYWQoYmxvYiwgZmlsZU5hbWUgKyBcXFwiX1xcXCIgKyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3Vic3RyKDAsIDE5KSArIChleHRlbnNpb24gfHwgJy5qc29uJykpO1xcbn1cXG5leHBvcnRzLnNhdmVEYXRhQXNKU09ORmlsZSA9IHNhdmVEYXRhQXNKU09ORmlsZTtcXG5mdW5jdGlvbiBkb3dubG9hZERhdGFGaWxlKGJhc2U2NERhdGFTdHJpbmcsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkge1xcbiAgICB2YXIgYjY0U3RyaW5nID0gJ2RhdGE6JyArIGNvbnRlbnRUeXBlICsgJztiYXNlNjQsJyArIGJhc2U2NERhdGFTdHJpbmc7XFxuICAgIHRyaWdnZXJEYXRhRG93bmxvYWQoYjY0U3RyaW5nLCBmaWxlTmFtZSwgdHJ1ZSk7XFxufVxcbmV4cG9ydHMuZG93bmxvYWREYXRhRmlsZSA9IGRvd25sb2FkRGF0YUZpbGU7XFxuZnVuY3Rpb24gdHJpZ2dlckRhdGFEb3dubG9hZChkYXRhLCBmaWxlTmFtZSwgZGF0YVVybCkge1xcbiAgICB2YXIgdXJsID0gZGF0YVVybCA/IGRhdGEgOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGRhdGEpO1xcbiAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcXG4gICAgbGluay5ocmVmID0gdXJsO1xcbiAgICBsaW5rWydkb3dubG9hZCddID0gZmlsZU5hbWU7XFxuICAgIGxpbmsuY2xpY2soKTtcXG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xcbn1cXG5mdW5jdGlvbiBoYXNSZXF1aXJlZFJlc291cmNlKGFwcEVuZHBvaW50cywgYXBwSW5zdGFuY2VOYW1lLCBmZWF0dXJlSWQpIHtcXG4gICAgaWYgKGFwcEVuZHBvaW50cyAmJiBhcHBFbmRwb2ludHNbYXBwSW5zdGFuY2VOYW1lXSkge1xcbiAgICAgICAgaWYgKGFwcEVuZHBvaW50c1thcHBJbnN0YW5jZU5hbWVdW2ZlYXR1cmVJZF0pIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZmFsc2U7XFxufVxcbmV4cG9ydHMuaGFzUmVxdWlyZWRSZXNvdXJjZSA9IGhhc1JlcXVpcmVkUmVzb3VyY2U7XFxuZnVuY3Rpb24gcmVwbGFjZVRlbXBsYXRlVmlld05hbWUodGVtcGxhdGVkSHRtbCwgdmlld05hbWUpIHtcXG4gICAgcmV0dXJuIHRlbXBsYXRlZEh0bWwucmVwbGFjZSgve3tWSUVXTkFNRX19L2csIHZpZXdOYW1lKTtcXG59XFxuZXhwb3J0cy5yZXBsYWNlVGVtcGxhdGVWaWV3TmFtZSA9IHJlcGxhY2VUZW1wbGF0ZVZpZXdOYW1lO1xcbmZ1bmN0aW9uIHJlcGxhY2VUZW1wbGF0ZUZsYWdzKHRlbXBsYXRlZEh0bWwsIGxvY2FsZSkge1xcbiAgICB2YXIgZmxhZ3NSZWdleCA9IC97e0ZMQUdTXFxcXD0oLiopfX0vZztcXG4gICAgdmFyIG1hdGNoUmVzID0gZmxhZ3NSZWdleC5leGVjKHRlbXBsYXRlZEh0bWwpO1xcbiAgICBpZiAobWF0Y2hSZXMgJiYgbWF0Y2hSZXMubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICB2YXIgZmxhZ3MgPSBtYXRjaFJlc1sxXS5zcGxpdCgnLCcpO1xcbiAgICAgICAgdmFyIGZsYWdzSHRtbCA9ICcnO1xcbiAgICAgICAgZm9yICh2YXIgZmxhZ05hbWUgaW4gRGF0YV8xLmZsYWdzRGVmKSB7XFxuICAgICAgICAgICAgdmFyIGZsYWdEZWYgPSBEYXRhXzEuZmxhZ3NEZWZbZmxhZ05hbWVdO1xcbiAgICAgICAgICAgIGlmIChmbGFnTmFtZSAhPT0gJ2V1bnJlYWQnKSB7XFxuICAgICAgICAgICAgICAgIGlmICgoZmxhZ0RlZi5pbnZlcnNlZCAmJiBmbGFncy5pbmRleE9mKGZsYWdOYW1lKSA9PT0gLTEpIHx8ICghZmxhZ0RlZi5pbnZlcnNlZCAmJiBmbGFncy5pbmRleE9mKGZsYWdOYW1lKSAhPT0gLTEpKSB7XFxuICAgICAgICAgICAgICAgICAgICBmbGFnc0h0bWwgKz0gJzxzcGFuIGNsYXNzPVxcXCJmYS1mdyByaWdodC1zcGFjZWQgdGV4dC14bGFyZ2UgJyArIGZsYWdEZWYuaWNvbkNvbG9yICsgJyAnICsgZmxhZ0RlZi5pY29uU2hhcGUgKyAnXFxcIiB0aXRsZT1cXFwiJyArIGZsYWdEZWYuZmxhZ0xhYmVsW2xvY2FsZV0gKyAnXFxcIj48L3NwYW4+JztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sLnJlcGxhY2UoZmxhZ3NSZWdleCwgZmxhZ3NIdG1sKTtcXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sO1xcbiAgICB9XFxufVxcbmV4cG9ydHMucmVwbGFjZVRlbXBsYXRlRmxhZ3MgPSByZXBsYWNlVGVtcGxhdGVGbGFncztcXG5mdW5jdGlvbiBnZXRTdHlsZURlZihzdHlsZUNvbmYpIHtcXG4gICAgdmFyIHN0eWxlcyA9IHN0eWxlQ29uZi5zcGxpdCgnLCcpO1xcbiAgICB2YXIgcmVzID0ge1xcbiAgICAgICAgaWNvbjogbnVsbCxcXG4gICAgICAgIGJ0bjogbnVsbCxcXG4gICAgICAgIGNvbG9yOiBudWxsXFxuICAgIH07XFxuICAgIHN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdHlsZSkge1xcbiAgICAgICAgaWYgKHN0eWxlLmluZGV4T2YoJ2ljb246JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmljb24gPSBzdHlsZS5yZXBsYWNlKCdpY29uOicsICcnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChzdHlsZS5pbmRleE9mKCdidG46JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmJ0biA9IHN0eWxlLnJlcGxhY2UoJ2J0bjonLCAnJyk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoc3R5bGUuaW5kZXhPZignY29sb3I6JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmNvbG9yID0gc3R5bGUucmVwbGFjZSgnY29sb3I6JywgJycpO1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRTdHlsZURlZiA9IGdldFN0eWxlRGVmO1xcbmZ1bmN0aW9uIGdldEFjY2VwdExhbmd1YWdlSGVhZGVyKGxvY2FsZSkge1xcbiAgICB2YXIgbm90U2VsZWN0ZWQgPSBDb25maWdfMS5BVkFJTEFCTEVfTEFOR1VBR0VTLmZpbHRlcihmdW5jdGlvbiAobGFuZ3VhZ2UsIGlkeCkge1xcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlLmxvY2FsZSAhPT0gbG9jYWxlICYmIGlkeCA8IDM7XFxuICAgIH0pLm1hcChmdW5jdGlvbiAobGFuZ3VhZ2UsIGlkeCkge1xcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlLmxvY2FsZS5zdWJzdHIoMCwgMikudG9Mb3dlckNhc2UoKSArICc7cT0nICsgKDAuOCAtIChpZHggLyAxMCkpLnRvU3RyaW5nKCk7XFxuICAgIH0pO1xcbiAgICByZXR1cm4gbG9jYWxlLnN1YnN0cigwLCAyKS50b0xvd2VyQ2FzZSgpICsgJywnICsgbm90U2VsZWN0ZWQuam9pbignLCcpO1xcbn1cXG5leHBvcnRzLmdldEFjY2VwdExhbmd1YWdlSGVhZGVyID0gZ2V0QWNjZXB0TGFuZ3VhZ2VIZWFkZXI7XFxuZnVuY3Rpb24gZ2V0STE4bkxhYmVsKGxvY2FsZSwgbGFiZWxNYXAsIG5vUmVnaW9uLCB1cHBlcikge1xcbiAgICB2YXIgcmVzID0gbnVsbDtcXG4gICAgdmFyIGxhbmd1YWdlID0gbG9jYWxlO1xcbiAgICBpZiAobm9SZWdpb24pIHtcXG4gICAgICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3Vic3RyKDAsIDIpO1xcbiAgICB9XFxuICAgIGlmICh1cHBlcikge1xcbiAgICAgICAgbGFuZ3VhZ2UgPSBsYW5ndWFnZS50b1VwcGVyQ2FzZSgpO1xcbiAgICB9XFxuICAgIGlmIChsYWJlbE1hcCkge1xcbiAgICAgICAgaWYgKGxhYmVsTWFwW2xhbmd1YWdlXSkge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwW2xhbmd1YWdlXTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghcmVzICYmIGxhbmd1YWdlICE9PSAnRU4nKSB7XFxuICAgICAgICAgICAgcmVzID0gbGFiZWxNYXBbJ0VOJ107XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXJlcyAmJiBsYW5ndWFnZSAhPT0gJ2VuJykge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwWydlbiddO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFyZXMgJiYgbGFuZ3VhZ2UgIT09ICdlbi1VUycpIHtcXG4gICAgICAgICAgICByZXMgPSBsYWJlbE1hcFsnZW4tVVMnXTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmdldEkxOG5MYWJlbCA9IGdldEkxOG5MYWJlbDtcXG5mdW5jdGlvbiBnZXRKU1RyZWVEYXRhKG9yZ1RyZWVEYXRhLCBvcGVuZWROb2Rlcykge1xcbiAgICByZXR1cm4gb3JnVHJlZURhdGEgPyB7XFxuICAgICAgICBpZDogb3JnVHJlZURhdGEuaWQsXFxuICAgICAgICB0ZXh0OiBvcmdUcmVlRGF0YS5pZCA9PT0gJzAnID8gJycgOiBvcmdUcmVlRGF0YS5lbGVtZW50TmFtZSxcXG4gICAgICAgIGRhdGE6IHtcXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogb3JnVHJlZURhdGEuZGVzY3JpcHRpb24sXFxuICAgICAgICAgICAgcHJvcGVydGllc01hcDogb3JnVHJlZURhdGEucHJvcGVydGllc01hcCxcXG4gICAgICAgICAgICBwYXJlbnRJZDogb3JnVHJlZURhdGEucGFyZW50SWQsXFxuICAgICAgICAgICAgY2hpbGROYW1lczogb3JnVHJlZURhdGEuY2hpbGRyZW4gPyBvcmdUcmVlRGF0YS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiBjaGlsZC5lbGVtZW50TmFtZTsgfSkgOiBbXVxcbiAgICAgICAgfSxcXG4gICAgICAgIGNoaWxkcmVuOiBvcmdUcmVlRGF0YS5jaGlsZHJlbiA/IG9yZ1RyZWVEYXRhLmNoaWxkcmVuLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcXG4gICAgICAgICAgICByZXR1cm4gZ2V0SlNUcmVlRGF0YShjaGlsZCwgb3BlbmVkTm9kZXMpO1xcbiAgICAgICAgfSkgOiBudWxsLFxcbiAgICAgICAgaWNvbjogY2xhc3NOYW1lcygnZmFzIGZhLWZ3Jywge1xcbiAgICAgICAgICAgICdmYS10aC1sYXJnZSBmb250LWNvbG9yLWxpZ2h0ZXInOiBvcmdUcmVlRGF0YS5pZCAhPT0gJzAnLFxcbiAgICAgICAgICAgICdmYS10ZXJtaW5hbCBibGFjay1jb2xvcic6IG9yZ1RyZWVEYXRhLmlkID09PSAnMCcsXFxuICAgICAgICB9KSxcXG4gICAgICAgIHN0YXRlOiB7XFxuICAgICAgICAgICAgb3BlbmVkOiBvcGVuZWROb2RlcyA/IG9wZW5lZE5vZGVzLmluZGV4T2Yob3JnVHJlZURhdGEuaWQpICE9PSAtMSA6IGZhbHNlLFxcbiAgICAgICAgICAgIGRpc2FibGVkOiBvcmdUcmVlRGF0YS5pZCA9PT0gJy0xJ1xcbiAgICAgICAgfVxcbiAgICB9IDogbnVsbDtcXG59XFxuZXhwb3J0cy5nZXRKU1RyZWVEYXRhID0gZ2V0SlNUcmVlRGF0YTtcXG5mdW5jdGlvbiBsb2FkVG9vbHRpcHMoZWxlbWVudCkge1xcbiAgICBpZiAoIU1vZGVybml6ci50b3VjaGV2ZW50cykge1xcbiAgICAgICAgdmFyICRlbGVtZW50VG9vbHRpcHNfMSA9ICQoZWxlbWVudCkuZmluZCgnW2RhdGEtdG9nZ2xlPVxcXCJ0b29sdGlwXFxcIl0nKTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHNfMS50b29sdGlwKHtcXG4gICAgICAgICAgICBjb250YWluZXI6ICdib2R5JyxcXG4gICAgICAgICAgICBwbGFjZW1lbnQ6ICdhdXRvIHRvcCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgJGVsZW1lbnRUb29sdGlwc18xLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICAkZWxlbWVudFRvb2x0aXBzXzEudG9vbHRpcCgnaGlkZScpO1xcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuZXhwb3J0cy5sb2FkVG9vbHRpcHMgPSBsb2FkVG9vbHRpcHM7XFxuZnVuY3Rpb24gdW5sb2FkVG9vbHRpcHMoZWxlbWVudCkge1xcbiAgICBpZiAoIU1vZGVybml6ci50b3VjaGV2ZW50cykge1xcbiAgICAgICAgdmFyICRlbGVtZW50VG9vbHRpcHMgPSAkKGVsZW1lbnQpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cXFwidG9vbHRpcFxcXCJdJyk7XFxuICAgICAgICAkZWxlbWVudFRvb2x0aXBzLnRvb2x0aXAoJ2hpZGUnKTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHMudG9vbHRpcCgnZGVzdHJveScpO1xcbiAgICAgICAgJCgnZGl2LnRvb2x0aXAnKS5yZW1vdmUoKTtcXG4gICAgfVxcbn1cXG5leHBvcnRzLnVubG9hZFRvb2x0aXBzID0gdW5sb2FkVG9vbHRpcHM7XFxuZnVuY3Rpb24gZ3JvdXBCeVByb3BlcnR5KGxpc3QsIHByb3BlcnR5TmFtZSkge1xcbiAgICByZXR1cm4gbGlzdC5yZWR1Y2UoZnVuY3Rpb24gKGdyb3VwZWQsIGl0ZW0pIHtcXG4gICAgICAgIHZhciBrZXkgPSBpdGVtW3Byb3BlcnR5TmFtZV07XFxuICAgICAgICBncm91cGVkW2tleV0gPSBncm91cGVkW2tleV0gfHwgW107XFxuICAgICAgICBncm91cGVkW2tleV0ucHVzaChpdGVtKTtcXG4gICAgICAgIHJldHVybiBncm91cGVkO1xcbiAgICB9LCB7fSk7XFxufVxcbmV4cG9ydHMuZ3JvdXBCeVByb3BlcnR5ID0gZ3JvdXBCeVByb3BlcnR5O1xcbmZ1bmN0aW9uIGFkZFZhbFRvQXJyYXlOb0R1cChhcnJheSwgdmFsdWUpIHtcXG4gICAgaWYgKGFycmF5LmluZGV4T2YodmFsdWUpID09PSAtMSkge1xcbiAgICAgICAgcmV0dXJuIGFycmF5LmNvbmNhdCh2YWx1ZSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGFycmF5LnNsaWNlKCk7XFxufVxcbmV4cG9ydHMuYWRkVmFsVG9BcnJheU5vRHVwID0gYWRkVmFsVG9BcnJheU5vRHVwO1xcbmZ1bmN0aW9uIHJlbW92ZVZhbEZyb21BcnJheU5vRHVwKGFycmF5LCB2YWx1ZSkge1xcbiAgICByZXR1cm4gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBlbGVtZW50ICE9PSB2YWx1ZTsgfSk7XFxufVxcbmV4cG9ydHMucmVtb3ZlVmFsRnJvbUFycmF5Tm9EdXAgPSByZW1vdmVWYWxGcm9tQXJyYXlOb0R1cDtcXG5mdW5jdGlvbiBnZXROZXN0ZWRWYWx1ZShvYmosIGtleVBhdGgpIHtcXG4gICAgaWYgKCFvYmopIHtcXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICAgIH1cXG4gICAgdmFyIHByb3BzID0ga2V5UGF0aC5zcGxpdCgnLicpO1xcbiAgICBpZiAocHJvcHMubGVuZ3RoID09PSAxKSB7XFxuICAgICAgICByZXR1cm4gb2JqW3Byb3BzWzBdXTtcXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICAgIHJldHVybiBnZXROZXN0ZWRWYWx1ZShvYmpbcHJvcHNbMF1dLCBwcm9wcy5zbGljZSgxKS5qb2luKCcuJykpO1xcbiAgICB9XFxufVxcbmV4cG9ydHMuZ2V0TmVzdGVkVmFsdWUgPSBnZXROZXN0ZWRWYWx1ZTtcXG5mdW5jdGlvbiBmaWx0ZXJDb2xsZWN0aW9uKGNvbGxlY3Rpb24sIHByb3BlcnRpZXMsIHNlYXJjaFN0cmluZykge1xcbiAgICB2YXIgc2VhcmNoRWxlbWVudHMgPSBzZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpO1xcbiAgICB2YXIgZmlsdGVyZWRDb2xsZWN0aW9uID0gc2VhcmNoU3RyaW5nID8gY29sbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcXG4gICAgICAgIHZhciBkYXRhID0gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XFxuICAgICAgICAgICAgaWYgKHByb3BlcnR5LnNwbGl0KCcuJykubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TmVzdGVkVmFsdWUoaXRlbSwgcHJvcGVydHkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bcHJvcGVydHldO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLmpvaW4oKS50b0xvd2VyQ2FzZSgpO1xcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBzZWFyY2hFbGVtZW50cy5tYXAoZnVuY3Rpb24gKHNlYXJjaCkgeyByZXR1cm4gZGF0YS5pbmRleE9mKHNlYXJjaCkgIT09IC0xOyB9KTtcXG4gICAgICAgIHJldHVybiBtYXRjaGVzLmZpbHRlcihmdW5jdGlvbiAobWF0Y2hlZCkgeyByZXR1cm4gIW1hdGNoZWQ7IH0pLmxlbmd0aCA9PT0gMDtcXG4gICAgfSkgOiBjb2xsZWN0aW9uO1xcbiAgICByZXR1cm4gZmlsdGVyZWRDb2xsZWN0aW9uO1xcbn1cXG5leHBvcnRzLmZpbHRlckNvbGxlY3Rpb24gPSBmaWx0ZXJDb2xsZWN0aW9uO1xcbmZ1bmN0aW9uIGJhc2U2NERlY29kZShlbmNvZGVkRGF0YSkge1xcbiAgICByZXR1cm4gYmFzZTY0LmRlY29kZShlbmNvZGVkRGF0YSk7XFxufVxcbmV4cG9ydHMuYmFzZTY0RGVjb2RlID0gYmFzZTY0RGVjb2RlO1xcbmZ1bmN0aW9uIGRlZXBDb3B5KGRhdGEsIGV4dGVuc2lvbnMpIHtcXG4gICAgcmV0dXJuICFleHRlbnNpb25zID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhIHx8IHt9KSkgOiAkLmV4dGVuZCh7fSwgZGF0YSwgZXh0ZW5zaW9ucyk7XFxufVxcbmV4cG9ydHMuZGVlcENvcHkgPSBkZWVwQ29weTtcXG5mdW5jdGlvbiBoYW5kbGVEdXBsaWNhdGVOYW1lRnJvbUFycmF5KG5hbWUsIGNvbnRhaW5lcikge1xcbiAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcXG4gICAgdmFyIHJlcyA9IG5hbWU7XFxuICAgIHZhciBpZHggPSAxO1xcbiAgICB3aGlsZSAoY29udGFpbmVyLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIHJlcyA9PT0gYzsgfSkpIHtcXG4gICAgICAgIGlmIChmaXJzdFRpbWUpIHtcXG4gICAgICAgICAgICByZXMgPSByZXMuY29uY2F0KFxcXCJfXFxcIiArIGlkeCk7XFxuICAgICAgICB9XFxuICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICByZXMgPSByZXMucmVwbGFjZSgvX1tcXFxcZF0rJC8sIFxcXCJfXFxcIiArIGlkeCk7XFxuICAgICAgICB9XFxuICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcXG4gICAgICAgIGlkeCsrO1xcbiAgICB9XFxuICAgIHJldHVybiByZXM7XFxufVxcbmV4cG9ydHMuaGFuZGxlRHVwbGljYXRlTmFtZUZyb21BcnJheSA9IGhhbmRsZUR1cGxpY2F0ZU5hbWVGcm9tQXJyYXk7XFxuZnVuY3Rpb24gZGF0ZUJ5TG9jYWxUb1N0cmluZyhsb2NhbGUsIGRhdGUsIG9wdGlvbnMpIHtcXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgZGVlcENvcHkoe1xcbiAgICAgICAgbW9udGg6ICdudW1lcmljJyxcXG4gICAgICAgIGRheTogJ251bWVyaWMnLFxcbiAgICAgICAgeWVhcjogJ251bWVyaWMnLFxcbiAgICAgICAgaG91cjogJ251bWVyaWMnLFxcbiAgICAgICAgbWludXRlOiAnbnVtZXJpYydcXG4gICAgfSwgb3B0aW9ucykpO1xcbn1cXG5leHBvcnRzLmRhdGVCeUxvY2FsVG9TdHJpbmcgPSBkYXRlQnlMb2NhbFRvU3RyaW5nO1xcbmZ1bmN0aW9uIGdldEl0ZW1zQnlJZHgoY29sbGVjdGlvbiwgaW5kZXhlcykge1xcbiAgICByZXR1cm4gaW5kZXhlcy5tYXAoZnVuY3Rpb24gKGlkeCkgeyByZXR1cm4gY29sbGVjdGlvbltpZHhdOyB9KTtcXG59XFxuZXhwb3J0cy5nZXRJdGVtc0J5SWR4ID0gZ2V0SXRlbXNCeUlkeDtcXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAodGV4dCkge1xcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bLVtcXFxcXXt9KCkqKz8uLFxcXFxcXFxcXiR8I10vZywgJ1xcXFxcXFxcJCYnKTtcXG59XFxuZXhwb3J0cy5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjY0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbihmdW5jdGlvbigpe1xcbiAgdmFyIGNyeXB0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjUpLFxcbiAgICAgIHV0ZjggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg5KS51dGY4LFxcbiAgICAgIGlzQnVmZmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjYpLFxcbiAgICAgIGJpbiA9IF9fd2VicGFja19yZXF1aXJlX18oODkpLmJpbixcXG5cXG4gIC8vIFRoZSBjb3JlXFxuICBtZDUgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xcbiAgICAvLyBDb252ZXJ0IHRvIGJ5dGUgYXJyYXlcXG4gICAgaWYgKG1lc3NhZ2UuY29uc3RydWN0b3IgPT0gU3RyaW5nKVxcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RpbmcgPT09ICdiaW5hcnknKVxcbiAgICAgICAgbWVzc2FnZSA9IGJpbi5zdHJpbmdUb0J5dGVzKG1lc3NhZ2UpO1xcbiAgICAgIGVsc2VcXG4gICAgICAgIG1lc3NhZ2UgPSB1dGY4LnN0cmluZ1RvQnl0ZXMobWVzc2FnZSk7XFxuICAgIGVsc2UgaWYgKGlzQnVmZmVyKG1lc3NhZ2UpKVxcbiAgICAgIG1lc3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtZXNzYWdlLCAwKTtcXG4gICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZSkpXFxuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9TdHJpbmcoKTtcXG4gICAgLy8gZWxzZSwgYXNzdW1lIGJ5dGUgYXJyYXkgYWxyZWFkeVxcblxcbiAgICB2YXIgbSA9IGNyeXB0LmJ5dGVzVG9Xb3JkcyhtZXNzYWdlKSxcXG4gICAgICAgIGwgPSBtZXNzYWdlLmxlbmd0aCAqIDgsXFxuICAgICAgICBhID0gIDE3MzI1ODQxOTMsXFxuICAgICAgICBiID0gLTI3MTczMzg3OSxcXG4gICAgICAgIGMgPSAtMTczMjU4NDE5NCxcXG4gICAgICAgIGQgPSAgMjcxNzMzODc4O1xcblxcbiAgICAvLyBTd2FwIGVuZGlhblxcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcXG4gICAgICBtW2ldID0gKChtW2ldIDw8ICA4KSB8IChtW2ldID4+PiAyNCkpICYgMHgwMEZGMDBGRiB8XFxuICAgICAgICAgICAgICgobVtpXSA8PCAyNCkgfCAobVtpXSA+Pj4gIDgpKSAmIDB4RkYwMEZGMDA7XFxuICAgIH1cXG5cXG4gICAgLy8gUGFkZGluZ1xcbiAgICBtW2wgPj4+IDVdIHw9IDB4ODAgPDwgKGwgJSAzMik7XFxuICAgIG1bKCgobCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBsO1xcblxcbiAgICAvLyBNZXRob2Qgc2hvcnRjdXRzXFxuICAgIHZhciBGRiA9IG1kNS5fZmYsXFxuICAgICAgICBHRyA9IG1kNS5fZ2csXFxuICAgICAgICBISCA9IG1kNS5faGgsXFxuICAgICAgICBJSSA9IG1kNS5faWk7XFxuXFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkgKz0gMTYpIHtcXG5cXG4gICAgICB2YXIgYWEgPSBhLFxcbiAgICAgICAgICBiYiA9IGIsXFxuICAgICAgICAgIGNjID0gYyxcXG4gICAgICAgICAgZGQgPSBkO1xcblxcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDBdLCAgNywgLTY4MDg3NjkzNik7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcXG4gICAgICBjID0gRkYoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTcsICA2MDYxMDU4MTkpO1xcbiAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBtW2krIDNdLCAyMiwgLTEwNDQ1MjUzMzApO1xcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDRdLCAgNywgLTE3NjQxODg5Nyk7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgNV0sIDEyLCAgMTIwMDA4MDQyNik7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsgN10sIDIyLCAtNDU3MDU5ODMpO1xcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDhdLCAgNywgIDE3NzAwMzU0MTYpO1xcbiAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW2krIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xcbiAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBtW2krMTBdLCAxNywgLTQyMDYzKTtcXG4gICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtpKzExXSwgMjIsIC0xOTkwNDA0MTYyKTtcXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKzEyXSwgIDcsICAxODA0NjAzNjgyKTtcXG4gICAgICBkID0gRkYoZCwgYSwgYiwgYywgbVtpKzEzXSwgMTIsIC00MDM0MTEwMSk7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsxNV0sIDIyLCAgMTIzNjUzNTMyOSk7XFxuXFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgMV0sICA1LCAtMTY1Nzk2NTEwKTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyA2XSwgIDksIC0xMDY5NTAxNjMyKTtcXG4gICAgICBjID0gR0coYywgZCwgYSwgYiwgbVtpKzExXSwgMTQsICA2NDM3MTc3MTMpO1xcbiAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBtW2krIDBdLCAyMCwgLTM3Mzg5NzMwMik7XFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgNV0sICA1LCAtNzAxNTU4NjkxKTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKzEwXSwgIDksICAzODAxNjA4Myk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsxNV0sIDE0LCAtNjYwNDc4MzM1KTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyA0XSwgMjAsIC00MDU1Mzc4NDgpO1xcbiAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBtW2krIDldLCAgNSwgIDU2ODQ0NjQzOCk7XFxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsxNF0sICA5LCAtMTAxOTgwMzY5MCk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsgM10sIDE0LCAtMTg3MzYzOTYxKTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyA4XSwgMjAsICAxMTYzNTMxNTAxKTtcXG4gICAgICBhID0gR0coYSwgYiwgYywgZCwgbVtpKzEzXSwgIDUsIC0xNDQ0NjgxNDY3KTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyAyXSwgIDksIC01MTQwMzc4NCk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsgN10sIDE0LCAgMTczNTMyODQ3Myk7XFxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsxMl0sIDIwLCAtMTkyNjYwNzczNCk7XFxuXFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgNV0sICA0LCAtMzc4NTU4KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcXG4gICAgICBjID0gSEgoYywgZCwgYSwgYiwgbVtpKzExXSwgMTYsICAxODM5MDMwNTYyKTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzE0XSwgMjMsIC0zNTMwOTU1Nik7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgMV0sICA0LCAtMTUzMDk5MjA2MCk7XFxuICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1baSsgNF0sIDExLCAgMTI3Mjg5MzM1Myk7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgN10sIDE2LCAtMTU1NDk3NjMyKTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcXG4gICAgICBhID0gSEgoYSwgYiwgYywgZCwgbVtpKzEzXSwgIDQsICA2ODEyNzkxNzQpO1xcbiAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBtW2krIDBdLCAxMSwgLTM1ODUzNzIyMik7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgM10sIDE2LCAtNzIyNTIxOTc5KTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKyA2XSwgMjMsICA3NjAyOTE4OSk7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgOV0sICA0LCAtNjQwMzY0NDg3KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKzEyXSwgMTEsIC00MjE4MTU4MzUpO1xcbiAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBtW2krMTVdLCAxNiwgIDUzMDc0MjUyMCk7XFxuICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1baSsgMl0sIDIzLCAtOTk1MzM4NjUxKTtcXG5cXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyAwXSwgIDYsIC0xOTg2MzA4NDQpO1xcbiAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBtW2krIDddLCAxMCwgIDExMjY4OTE0MTUpO1xcbiAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBtW2krMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDVdLCAyMSwgLTU3NDM0MDU1KTtcXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKzEyXSwgIDYsICAxNzAwNDg1NTcxKTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKzEwXSwgMTUsIC0xMDUxNTIzKTtcXG4gICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtpKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyA4XSwgIDYsICAxODczMzEzMzU5KTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKzE1XSwgMTAsIC0zMDYxMTc0NCk7XFxuICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIG1baSsgNl0sIDE1LCAtMTU2MDE5ODM4MCk7XFxuICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIG1baSsxM10sIDIxLCAgMTMwOTE1MTY0OSk7XFxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsgNF0sICA2LCAtMTQ1NTIzMDcwKTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKzExXSwgMTAsIC0xMTIwMjEwMzc5KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTUsICA3MTg3ODcyNTkpO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDldLCAyMSwgLTM0MzQ4NTU1MSk7XFxuXFxuICAgICAgYSA9IChhICsgYWEpID4+PiAwO1xcbiAgICAgIGIgPSAoYiArIGJiKSA+Pj4gMDtcXG4gICAgICBjID0gKGMgKyBjYykgPj4+IDA7XFxuICAgICAgZCA9IChkICsgZGQpID4+PiAwO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBjcnlwdC5lbmRpYW4oW2EsIGIsIGMsIGRdKTtcXG4gIH07XFxuXFxuICAvLyBBdXhpbGlhcnkgZnVuY3Rpb25zXFxuICBtZDUuX2ZmICA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XFxuICAgIHZhciBuID0gYSArIChiICYgYyB8IH5iICYgZCkgKyAoeCA+Pj4gMCkgKyB0O1xcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xcbiAgfTtcXG4gIG1kNS5fZ2cgID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcXG4gICAgdmFyIG4gPSBhICsgKGIgJiBkIHwgYyAmIH5kKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcbiAgbWQ1Ll9oaCAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYiBeIGMgXiBkKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcbiAgbWQ1Ll9paSAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYyBeIChiIHwgfmQpKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcblxcbiAgLy8gUGFja2FnZSBwcml2YXRlIGJsb2Nrc2l6ZVxcbiAgbWQ1Ll9ibG9ja3NpemUgPSAxNjtcXG4gIG1kNS5fZGlnZXN0c2l6ZSA9IDE2O1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xcbiAgICBpZiAobWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2UgPT09IG51bGwpXFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50ICcgKyBtZXNzYWdlKTtcXG5cXG4gICAgdmFyIGRpZ2VzdGJ5dGVzID0gY3J5cHQud29yZHNUb0J5dGVzKG1kNShtZXNzYWdlLCBvcHRpb25zKSk7XFxuICAgIHJldHVybiBvcHRpb25zICYmIG9wdGlvbnMuYXNCeXRlcyA/IGRpZ2VzdGJ5dGVzIDpcXG4gICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5hc1N0cmluZyA/IGJpbi5ieXRlc1RvU3RyaW5nKGRpZ2VzdGJ5dGVzKSA6XFxuICAgICAgICBjcnlwdC5ieXRlc1RvSGV4KGRpZ2VzdGJ5dGVzKTtcXG4gIH07XFxuXFxufSkoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuKGZ1bmN0aW9uKCkge1xcbiAgdmFyIGJhc2U2NG1hcFxcbiAgICAgID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLFxcblxcbiAgY3J5cHQgPSB7XFxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIGxlZnRcXG4gICAgcm90bDogZnVuY3Rpb24obiwgYikge1xcbiAgICAgIHJldHVybiAobiA8PCBiKSB8IChuID4+PiAoMzIgLSBiKSk7XFxuICAgIH0sXFxuXFxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIHJpZ2h0XFxuICAgIHJvdHI6IGZ1bmN0aW9uKG4sIGIpIHtcXG4gICAgICByZXR1cm4gKG4gPDwgKDMyIC0gYikpIHwgKG4gPj4+IGIpO1xcbiAgICB9LFxcblxcbiAgICAvLyBTd2FwIGJpZy1lbmRpYW4gdG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYVxcbiAgICBlbmRpYW46IGZ1bmN0aW9uKG4pIHtcXG4gICAgICAvLyBJZiBudW1iZXIgZ2l2ZW4sIHN3YXAgZW5kaWFuXFxuICAgICAgaWYgKG4uY29uc3RydWN0b3IgPT0gTnVtYmVyKSB7XFxuICAgICAgICByZXR1cm4gY3J5cHQucm90bChuLCA4KSAmIDB4MDBGRjAwRkYgfCBjcnlwdC5yb3RsKG4sIDI0KSAmIDB4RkYwMEZGMDA7XFxuICAgICAgfVxcblxcbiAgICAgIC8vIEVsc2UsIGFzc3VtZSBhcnJheSBhbmQgc3dhcCBhbGwgaXRlbXNcXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG4ubGVuZ3RoOyBpKyspXFxuICAgICAgICBuW2ldID0gY3J5cHQuZW5kaWFuKG5baV0pO1xcbiAgICAgIHJldHVybiBuO1xcbiAgICB9LFxcblxcbiAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBhbnkgbGVuZ3RoIG9mIHJhbmRvbSBieXRlc1xcbiAgICByYW5kb21CeXRlczogZnVuY3Rpb24obikge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW107IG4gPiAwOyBuLS0pXFxuICAgICAgICBieXRlcy5wdXNoKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NikpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYmlnLWVuZGlhbiAzMi1iaXQgd29yZHNcXG4gICAgYnl0ZXNUb1dvcmRzOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIHdvcmRzID0gW10sIGkgPSAwLCBiID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrLCBiICs9IDgpXFxuICAgICAgICB3b3Jkc1tiID4+PiA1XSB8PSBieXRlc1tpXSA8PCAoMjQgLSBiICUgMzIpO1xcbiAgICAgIHJldHVybiB3b3JkcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBiaWctZW5kaWFuIDMyLWJpdCB3b3JkcyB0byBhIGJ5dGUgYXJyYXlcXG4gICAgd29yZHNUb0J5dGVzOiBmdW5jdGlvbih3b3Jkcykge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW10sIGIgPSAwOyBiIDwgd29yZHMubGVuZ3RoICogMzI7IGIgKz0gOClcXG4gICAgICAgIGJ5dGVzLnB1c2goKHdvcmRzW2IgPj4+IDVdID4+PiAoMjQgLSBiICUgMzIpKSAmIDB4RkYpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBoZXggc3RyaW5nXFxuICAgIGJ5dGVzVG9IZXg6IGZ1bmN0aW9uKGJ5dGVzKSB7XFxuICAgICAgZm9yICh2YXIgaGV4ID0gW10sIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSA+Pj4gNCkudG9TdHJpbmcoMTYpKTtcXG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSAmIDB4RikudG9TdHJpbmcoMTYpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGhleC5qb2luKCcnKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGhleCBzdHJpbmcgdG8gYSBieXRlIGFycmF5XFxuICAgIGhleFRvQnl0ZXM6IGZ1bmN0aW9uKGhleCkge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW10sIGMgPSAwOyBjIDwgaGV4Lmxlbmd0aDsgYyArPSAyKVxcbiAgICAgICAgYnl0ZXMucHVzaChwYXJzZUludChoZXguc3Vic3RyKGMsIDIpLCAxNikpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBiYXNlLTY0IHN0cmluZ1xcbiAgICBieXRlc1RvQmFzZTY0OiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIGJhc2U2NCA9IFtdLCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAzKSB7XFxuICAgICAgICB2YXIgdHJpcGxldCA9IChieXRlc1tpXSA8PCAxNikgfCAoYnl0ZXNbaSArIDFdIDw8IDgpIHwgYnl0ZXNbaSArIDJdO1xcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspXFxuICAgICAgICAgIGlmIChpICogOCArIGogKiA2IDw9IGJ5dGVzLmxlbmd0aCAqIDgpXFxuICAgICAgICAgICAgYmFzZTY0LnB1c2goYmFzZTY0bWFwLmNoYXJBdCgodHJpcGxldCA+Pj4gNiAqICgzIC0gaikpICYgMHgzRikpO1xcbiAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgYmFzZTY0LnB1c2goJz0nKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJhc2U2NC5qb2luKCcnKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJhc2UtNjQgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBiYXNlNjRUb0J5dGVzOiBmdW5jdGlvbihiYXNlNjQpIHtcXG4gICAgICAvLyBSZW1vdmUgbm9uLWJhc2UtNjQgY2hhcmFjdGVyc1xcbiAgICAgIGJhc2U2NCA9IGJhc2U2NC5yZXBsYWNlKC9bXkEtWjAtOStcXFxcL10vaWcsICcnKTtcXG5cXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMCwgaW1vZDQgPSAwOyBpIDwgYmFzZTY0Lmxlbmd0aDtcXG4gICAgICAgICAgaW1vZDQgPSArK2kgJSA0KSB7XFxuICAgICAgICBpZiAoaW1vZDQgPT0gMCkgY29udGludWU7XFxuICAgICAgICBieXRlcy5wdXNoKCgoYmFzZTY0bWFwLmluZGV4T2YoYmFzZTY0LmNoYXJBdChpIC0gMSkpXFxuICAgICAgICAgICAgJiAoTWF0aC5wb3coMiwgLTIgKiBpbW9kNCArIDgpIC0gMSkpIDw8IChpbW9kNCAqIDIpKVxcbiAgICAgICAgICAgIHwgKGJhc2U2NG1hcC5pbmRleE9mKGJhc2U2NC5jaGFyQXQoaSkpID4+PiAoNiAtIGltb2Q0ICogMikpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJ5dGVzO1xcbiAgICB9XFxuICB9O1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBjcnlwdDtcXG59KSgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI2NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vKiFcXG4gKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyXFxuICpcXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxcbiAqIEBsaWNlbnNlICBNSVRcXG4gKi9cXG5cXG4vLyBUaGUgX2lzQnVmZmVyIGNoZWNrIGlzIGZvciBTYWZhcmkgNS03IHN1cHBvcnQsIGJlY2F1c2UgaXQncyBtaXNzaW5nXFxuLy8gT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseVxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIChpc0J1ZmZlcihvYmopIHx8IGlzU2xvd0J1ZmZlcihvYmopIHx8ICEhb2JqLl9pc0J1ZmZlcilcXG59XFxuXFxuZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xcbiAgcmV0dXJuICEhb2JqLmNvbnN0cnVjdG9yICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcXG59XFxuXFxuLy8gRm9yIE5vZGUgdjAuMTAgc3VwcG9ydC4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseS5cXG5mdW5jdGlvbiBpc1Nsb3dCdWZmZXIgKG9iaikge1xcbiAgcmV0dXJuIHR5cGVvZiBvYmoucmVhZEZsb2F0TEUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zbGljZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0J1ZmZlcihvYmouc2xpY2UoMCwgMCkpXFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDI2NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlLCBnbG9iYWwpIHt2YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyohIGh0dHA6Ly9tdGhzLmJlL2Jhc2U2NCB2MC4xLjAgYnkgQG1hdGhpYXMgfCBNSVQgbGljZW5zZSAqL1xcbjsoZnVuY3Rpb24ocm9vdCkge1xcblxcblxcdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlcyBgZXhwb3J0c2AuXFxuXFx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cztcXG5cXG5cXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC5cXG5cXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXFxuXFx0XFx0bW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMgJiYgbW9kdWxlO1xcblxcblxcdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgLCBmcm9tIE5vZGUuanMgb3IgQnJvd3NlcmlmaWVkIGNvZGUsIGFuZCB1c2VcXG5cXHQvLyBpdCBhcyBgcm9vdGAuXFxuXFx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcXG5cXHRpZiAoZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwpIHtcXG5cXHRcXHRyb290ID0gZnJlZUdsb2JhbDtcXG5cXHR9XFxuXFxuXFx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuXFxuXFx0dmFyIEludmFsaWRDaGFyYWN0ZXJFcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcXG5cXHRcXHR0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xcblxcdH07XFxuXFx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcjtcXG5cXHRJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcXG5cXG5cXHR2YXIgZXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XFxuXFx0XFx0Ly8gTm90ZTogdGhlIGVycm9yIG1lc3NhZ2VzIHVzZWQgdGhyb3VnaG91dCB0aGlzIGZpbGUgbWF0Y2ggdGhvc2UgdXNlZCBieVxcblxcdFxcdC8vIHRoZSBuYXRpdmUgYGF0b2JgL2BidG9hYCBpbXBsZW1lbnRhdGlvbiBpbiBDaHJvbWl1bS5cXG5cXHRcXHR0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yKG1lc3NhZ2UpO1xcblxcdH07XFxuXFxuXFx0dmFyIFRBQkxFID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xcblxcdC8vIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvY29tbW9uLW1pY3Jvc3ludGF4ZXMuaHRtbCNzcGFjZS1jaGFyYWN0ZXJcXG5cXHR2YXIgUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyA9IC9bXFxcXHRcXFxcblxcXFxmXFxcXHIgXS9nO1xcblxcblxcdC8vIGBkZWNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYXRvYmAgYXMgZGVzY3JpYmVkIGluIHRoZVxcblxcdC8vIEhUTUwgU3RhbmRhcmQuIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYXRvYlxcblxcdC8vIFRoZSBvcHRpbWl6ZWQgYmFzZTY0LWRlY29kaW5nIGFsZ29yaXRobSB1c2VkIGlzIGJhc2VkIG9uIEBhdGvigJlzIGV4Y2VsbGVudFxcblxcdC8vIGltcGxlbWVudGF0aW9uLiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9hdGsvMTAyMDM5NlxcblxcdHZhciBkZWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xcblxcdFxcdGlucHV0ID0gU3RyaW5nKGlucHV0KVxcblxcdFxcdFxcdC5yZXBsYWNlKFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMsICcnKTtcXG5cXHRcXHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xcblxcdFxcdGlmIChsZW5ndGggJSA0ID09IDApIHtcXG5cXHRcXHRcXHRpbnB1dCA9IGlucHV0LnJlcGxhY2UoLz09PyQvLCAnJyk7XFxuXFx0XFx0XFx0bGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xcblxcdFxcdH1cXG5cXHRcXHRpZiAoXFxuXFx0XFx0XFx0bGVuZ3RoICUgNCA9PSAxIHx8XFxuXFx0XFx0XFx0Ly8gaHR0cDovL3doYXR3Zy5vcmcvQyNhbHBoYW51bWVyaWMtYXNjaWktY2hhcmFjdGVyc1xcblxcdFxcdFxcdC9bXithLXpBLVowLTkvXS8udGVzdChpbnB1dClcXG5cXHRcXHQpIHtcXG5cXHRcXHRcXHRlcnJvcihcXG5cXHRcXHRcXHRcXHQnSW52YWxpZCBjaGFyYWN0ZXI6IHRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuJ1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBiaXRDb3VudGVyID0gMDtcXG5cXHRcXHR2YXIgYml0U3RvcmFnZTtcXG5cXHRcXHR2YXIgYnVmZmVyO1xcblxcdFxcdHZhciBvdXRwdXQgPSAnJztcXG5cXHRcXHR2YXIgcG9zaXRpb24gPSAtMTtcXG5cXHRcXHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xcblxcdFxcdFxcdGJ1ZmZlciA9IFRBQkxFLmluZGV4T2YoaW5wdXQuY2hhckF0KHBvc2l0aW9uKSk7XFxuXFx0XFx0XFx0Yml0U3RvcmFnZSA9IGJpdENvdW50ZXIgJSA0ID8gYml0U3RvcmFnZSAqIDY0ICsgYnVmZmVyIDogYnVmZmVyO1xcblxcdFxcdFxcdC8vIFVubGVzcyB0aGlzIGlzIHRoZSBmaXJzdCBvZiBhIGdyb3VwIG9mIDQgY2hhcmFjdGVyc+KAplxcblxcdFxcdFxcdGlmIChiaXRDb3VudGVyKysgJSA0KSB7XFxuXFx0XFx0XFx0XFx0Ly8g4oCmY29udmVydCB0aGUgZmlyc3QgOCBiaXRzIHRvIGEgc2luZ2xlIEFTQ0lJIGNoYXJhY3Rlci5cXG5cXHRcXHRcXHRcXHRvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShcXG5cXHRcXHRcXHRcXHRcXHQweEZGICYgYml0U3RvcmFnZSA+PiAoLTIgKiBiaXRDb3VudGVyICYgNilcXG5cXHRcXHRcXHRcXHQpO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0XFx0cmV0dXJuIG91dHB1dDtcXG5cXHR9O1xcblxcblxcdC8vIGBlbmNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYnRvYWAgYXMgZGVzY3JpYmVkIGluIHRoZVxcblxcdC8vIEhUTUwgU3RhbmRhcmQ6IGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYnRvYVxcblxcdHZhciBlbmNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xcblxcdFxcdGlucHV0ID0gU3RyaW5nKGlucHV0KTtcXG5cXHRcXHRpZiAoL1teXFxcXDAtXFxcXHhGRl0vLnRlc3QoaW5wdXQpKSB7XFxuXFx0XFx0XFx0Ly8gTm90ZTogbm8gbmVlZCB0byBzcGVjaWFsLWNhc2UgYXN0cmFsIHN5bWJvbHMgaGVyZSwgYXMgc3Vycm9nYXRlcyBhcmVcXG5cXHRcXHRcXHQvLyBtYXRjaGVkLCBhbmQgdGhlIGlucHV0IGlzIHN1cHBvc2VkIHRvIG9ubHkgY29udGFpbiBBU0NJSSBhbnl3YXkuXFxuXFx0XFx0XFx0ZXJyb3IoXFxuXFx0XFx0XFx0XFx0J1RoZSBzdHJpbmcgdG8gYmUgZW5jb2RlZCBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgb2YgdGhlICcgK1xcblxcdFxcdFxcdFxcdCdMYXRpbjEgcmFuZ2UuJ1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBwYWRkaW5nID0gaW5wdXQubGVuZ3RoICUgMztcXG5cXHRcXHR2YXIgb3V0cHV0ID0gJyc7XFxuXFx0XFx0dmFyIHBvc2l0aW9uID0gLTE7XFxuXFx0XFx0dmFyIGE7XFxuXFx0XFx0dmFyIGI7XFxuXFx0XFx0dmFyIGM7XFxuXFx0XFx0dmFyIGQ7XFxuXFx0XFx0dmFyIGJ1ZmZlcjtcXG5cXHRcXHQvLyBNYWtlIHN1cmUgYW55IHBhZGRpbmcgaXMgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBsb29wLlxcblxcdFxcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGggLSBwYWRkaW5nO1xcblxcblxcdFxcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XFxuXFx0XFx0XFx0Ly8gUmVhZCB0aHJlZSBieXRlcywgaS5lLiAyNCBiaXRzLlxcblxcdFxcdFxcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCAxNjtcXG5cXHRcXHRcXHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKSA8PCA4O1xcblxcdFxcdFxcdGMgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xcblxcdFxcdFxcdGJ1ZmZlciA9IGEgKyBiICsgYztcXG5cXHRcXHRcXHQvLyBUdXJuIHRoZSAyNCBiaXRzIGludG8gZm91ciBjaHVua3Mgb2YgNiBiaXRzIGVhY2gsIGFuZCBhcHBlbmQgdGhlXFxuXFx0XFx0XFx0Ly8gbWF0Y2hpbmcgY2hhcmFjdGVyIGZvciBlYWNoIG9mIHRoZW0gdG8gdGhlIG91dHB1dC5cXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTggJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMiAmIDB4M0YpICtcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDYgJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciAmIDB4M0YpXFxuXFx0XFx0XFx0KTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKHBhZGRpbmcgPT0gMikge1xcblxcdFxcdFxcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCA4O1xcblxcdFxcdFxcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xcblxcdFxcdFxcdGJ1ZmZlciA9IGEgKyBiO1xcblxcdFxcdFxcdG91dHB1dCArPSAoXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMCkgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyID4+IDQpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDIpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdCc9J1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fSBlbHNlIGlmIChwYWRkaW5nID09IDEpIHtcXG5cXHRcXHRcXHRidWZmZXIgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDQpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdCc9PSdcXG5cXHRcXHRcXHQpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRyZXR1cm4gb3V0cHV0O1xcblxcdH07XFxuXFxuXFx0dmFyIGJhc2U2NCA9IHtcXG5cXHRcXHQnZW5jb2RlJzogZW5jb2RlLFxcblxcdFxcdCdkZWNvZGUnOiBkZWNvZGUsXFxuXFx0XFx0J3ZlcnNpb24nOiAnMC4xLjAnXFxuXFx0fTtcXG5cXG5cXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcXG5cXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XFxuXFx0aWYgKFxcblxcdFxcdHRydWVcXG5cXHQpIHtcXG5cXHRcXHQhKF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gKGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdHJldHVybiBiYXNlNjQ7XFxuXFx0XFx0fSkuY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fLCBleHBvcnRzLCBtb2R1bGUpLFxcblxcdFxcdFxcdFxcdF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fICE9PSB1bmRlZmluZWQgJiYgKG1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18pKTtcXG5cXHR9XFx0ZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgIWZyZWVFeHBvcnRzLm5vZGVUeXBlKSB7XFxuXFx0XFx0aWYgKGZyZWVNb2R1bGUpIHsgLy8gaW4gTm9kZS5qcyBvciBSaW5nb0pTIHYwLjguMCtcXG5cXHRcXHRcXHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBiYXNlNjQ7XFxuXFx0XFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cXG5cXHRcXHRcXHRmb3IgKHZhciBrZXkgaW4gYmFzZTY0KSB7XFxuXFx0XFx0XFx0XFx0YmFzZTY0Lmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBiYXNlNjRba2V5XSk7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9IGVsc2UgeyAvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXFxuXFx0XFx0cm9vdC5iYXNlNjQgPSBiYXNlNjQ7XFxuXFx0fVxcblxcbn0odGhpcykpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2OCkobW9kdWxlKSwgX193ZWJwYWNrX3JlcXVpcmVfXygyOCkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDI2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xcblxcdGlmKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XFxuXFx0XFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XFxuXFx0XFx0bW9kdWxlLnBhdGhzID0gW107XFxuXFx0XFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XFxuXFx0XFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImxvYWRlZFxcXCIsIHtcXG5cXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcblxcdFxcdFxcdGdldDogZnVuY3Rpb24oKSB7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIG1vZHVsZS5sO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9KTtcXG5cXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcXFwiaWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUuaTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XFxuXFx0fVxcblxcdHJldHVybiBtb2R1bGU7XFxufTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5NVUxUSUxBTkdVQUdFX1dPUkRJTkdTID0ge1xcbiAgICBzYXZlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2F2ZScsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZXInXFxuICAgIH0sXFxuICAgIHNhdmVDaGFuZ2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2F2ZSBjaGFuZ2VzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnJlZ2lzdHJlciBtb2RpZmljYXRpb25zJ1xcbiAgICB9LFxcbiAgICBjYW5jZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYW5jZWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXInXFxuICAgIH0sXFxuICAgIGVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsJ1xcbiAgICB9LFxcbiAgICBzdWJtaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdWJtaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGlkZXInXFxuICAgIH0sXFxuICAgIGNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maXJtJyxcXG4gICAgICAgICdmci1GUic6ICdDb25maXJtZXInXFxuICAgIH0sXFxuICAgIGRlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RlbGV0ZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyJ1xcbiAgICB9LFxcbiAgICBlbmFibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW5hYmxlZCcsXFxuICAgICAgICAnZnItRlInOiAnQWN0aWYnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGVybWlzc2lvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Blcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBkZXNjcmlwdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rlc2NyaXB0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXNjcmlwdGlvbidcXG4gICAgfSxcXG4gICAgbmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSdcXG4gICAgfSxcXG4gICAgbm9EYXRhRm91bmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBkYXRhIGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUgZG9ubsOpZSdcXG4gICAgfSxcXG4gICAgZmlyc3RuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmlyc3QgbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqW5vbSdcXG4gICAgfSxcXG4gICAgbG9hZGluZ0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9hZGluZyBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyIGRlIGNoYXJnZW1lbnQnXFxuICAgIH0sXFxuICAgIGRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscydcXG4gICAgfSxcXG4gICAgbGFzdG5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IG5hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSdcXG4gICAgfSxcXG4gICAgZXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyJ1xcbiAgICB9LFxcbiAgICByZWdpc3Rlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZ2lzdGVyJyxcXG4gICAgICAgICdmci1GUic6ICdTXFxcXCdlbnJlZ2lzdHJlcidcXG4gICAgfSxcXG4gICAgaW5zdGFuY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnN0YW5jZScsXFxuICAgICAgICAnZnItRlInOiAnSW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICB0aXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RpdGxlJyxcXG4gICAgICAgICdmci1GUic6ICdUaXRyZSdcXG4gICAgfSxcXG4gICAgdXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyJ1xcbiAgICB9LFxcbiAgICBtcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01yLicsXFxuICAgICAgICAnZnItRlInOiAnTS4nXFxuICAgIH0sXFxuICAgIG1yczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01ycy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01tZSdcXG4gICAgfSxcXG4gICAgbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNcy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lbGxlJ1xcbiAgICB9LFxcbiAgICBwcm9mOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvZi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ByJ1xcbiAgICB9LFxcbiAgICBkcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RyLicsXFxuICAgICAgICAnZnItRlInOiAnRHInXFxuICAgIH0sXFxuICAgIHNhbHV0YXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTYWx1dGF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTYWx1dGF0aW9uJ1xcbiAgICB9LFxcbiAgICBjb21wYW55OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29tcGFueScsXFxuICAgICAgICAnZnItRlInOiAnU29jacOpdMOpJ1xcbiAgICB9LFxcbiAgICBjb21wYW55TmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbXBhbnkgbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnTm9tIGRlIGxhIHNvY2nDqXTDqSdcXG4gICAgfSxcXG4gICAgYWRkcmVzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZHJlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FkcmVzc2UnXFxuICAgIH0sXFxuICAgIGNpdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdWaWxsZSdcXG4gICAgfSxcXG4gICAgc3RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnw4l0YXQnXFxuICAgIH0sXFxuICAgIGNvdW50cnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb3VudHJ5JyxcXG4gICAgICAgICdmci1GUic6ICdQYXlzJ1xcbiAgICB9LFxcbiAgICB6aXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdaaXAnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvZGUgcG9zdGFsJ1xcbiAgICB9LFxcbiAgICBwaG9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bob25lJyxcXG4gICAgICAgICdmci1GUic6ICdUw6lsw6lwaG9uZSdcXG4gICAgfSxcXG4gICAgbW9iaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9iaWxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2JpbGUnXFxuICAgIH0sXFxuICAgIHdlYnNpdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXZWJzaXRlJyxcXG4gICAgICAgICdmci1GUic6ICdTaXRlIHdlYidcXG4gICAgfSxcXG4gICAgc3RhcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnRMOpbWFycmVyJ1xcbiAgICB9LFxcbiAgICBzdG9wOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RvcCcsXFxuICAgICAgICAnZnItRlInOiAnQXJyw6p0ZXInXFxuICAgIH0sXFxuICAgIHJlc2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1LDqWluaXRpYWxpc2VyJ1xcbiAgICB9LFxcbiAgICBlZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlcidcXG4gICAgfSxcXG4gICAgY3JlYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXInXFxuICAgIH0sXFxuICAgIGFjdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBY3Rpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdBY3Rpb25zJ1xcbiAgICB9LFxcbiAgICBpbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5mbycsXFxuICAgICAgICAnZnItRlInOiAnSW5mbydcXG4gICAgfSxcXG4gICAgc2VhcmNoUGxhY2Vob2xkZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWFyY2guLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hlcmNoZXIuLi4nXFxuICAgIH0sXFxuICAgIGtleToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0tleScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqSdcXG4gICAgfSxcXG4gICAgdmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWYWx1ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyJ1xcbiAgICB9LFxcbiAgICBmaWVsZFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVxdWlyZWQgZmllbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wIG9ibGlnYXRvaXJlJ1xcbiAgICB9LFxcbiAgICBzaG93RGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgZGV0YWlscycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIGNsb3NlRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlIGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Zlcm1lciBsZXMgZMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIHNlYXJjaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCcsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlcidcXG4gICAgfSxcXG4gICAgYWRtaW5pc3RyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZG1pbmlzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQWRtaW5pc3RyYXRpb24nXFxuICAgIH0sXFxuICAgIGl0ZW1DcmVhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBjcmVhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnQgY3LDqcOpJ1xcbiAgICB9LFxcbiAgICBpdGVtVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gdXBkYXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG1vZGlmacOpJ1xcbiAgICB9LFxcbiAgICBpdGVtUmVuYW1lZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVuYW1lZCcsXFxuICAgICAgICAnZnItRlInOiAnTm9tIGRlIGxcXFxcJ8OpbMOpbWVudCBtb2RpZmnDqSdcXG4gICAgfSxcXG4gICAgaXRlbURlbGV0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBzdXBwcmltw6knXFxuICAgIH0sXFxuICAgIGNvbmZpcm1EZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGl0ZW1zSW1wb3J0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtcyBpbXBvcnRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50cyBpbXBvcnTDqXMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1JdGVtc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlc2UgaXRlbXM/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgY2VzIMOpbMOpbWVudHMgPydcXG4gICAgfSxcXG4gICAgaXRlbXNEZWxldGVJbXBvc3NpYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGNhblxcXFwndCBkZWxldGUgdGhlc2UgaXRlbXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9zc2libGUgZGUgc3VwcHJpbWVyIGNlcyDDqWzDqW1lbnRzJ1xcbiAgICB9LFxcbiAgICB3YXJuaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2FybmluZycsXFxuICAgICAgICAnZnItRlInOiAnQXR0ZW50aW9uJ1xcbiAgICB9LFxcbiAgICBleHBvcnRKU09OOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IGFzIEpTT04nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4cG9ydGVyIChKU09OKSdcXG4gICAgfSxcXG4gICAgcHJvZmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Byb2ZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb2ZpbCdcXG4gICAgfSxcXG4gICAgdGFyZ2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGFyZ2V0JyxcXG4gICAgICAgICdmci1GUic6ICdDaWJsZSdcXG4gICAgfSxcXG4gICAgYnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdieScsXFxuICAgICAgICAnZnItRlInOiAncGFyJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkRW1haWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGVtYWlsJyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZE51bWJlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ011c3QgYmUgYSBudW1iZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RvaXQgw6p0cmUgdW4gbm9tYnJlJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBodHRwcyB1cmwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VybCBodHRwcyBpbnZhbGlkJ1xcbiAgICB9LFxcbiAgICBzdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2VzcycsXFxuICAgICAgICAnZnItRlInOiAnU3VjY8OocydcXG4gICAgfSxcXG4gICAgdGFiTGlzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xpc3QgKHt0b3RhbH0pJyxcXG4gICAgICAgICdmci1GUic6ICdMaXN0ZSAoe3RvdGFsfSknXFxuICAgIH0sXFxuICAgIHRhYkVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IC0ge25hbWV9JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICB0YWJBZGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgLSBOZXcgaXRlbScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciAtIE5vdXZlbCDDqWzDqW1lbnQnXFxuICAgIH0sXFxuICAgIHRhYlJ1bjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1biAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnRXjDqWN1dGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICB0YWJWaWV3OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgLSB7bmFtZX0nXFxuICAgIH0sXFxuICAgIHNlbGVjdEFsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdG91dCdcXG4gICAgfSxcXG4gICAgdW5zZWxlY3RBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVbnNlbGVjdCBhbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXPDqWxlY3Rpb25uZXIgdG91dCdcXG4gICAgfSxcXG4gICAgYWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyJ1xcbiAgICB9LFxcbiAgICBpbXBvcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbXBvcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyJ1xcbiAgICB9LFxcbiAgICBleHBvcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBvcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4cG9ydGVyJ1xcbiAgICB9LFxcbiAgICBleHBvcnRBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBvcnQgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciB0b3V0J1xcbiAgICB9LFxcbiAgICBkZWxldGVBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgdG91dCdcXG4gICAgfSxcXG4gICAgc2F2ZUFsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTYXV2ZWdhcmRlciB0b3V0J1xcbiAgICB9LFxcbiAgICBydW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdSdW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4w6ljdXRlcidcXG4gICAgfSxcXG4gICAgcmVuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVuYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdSZW5vbW1lcidcXG4gICAgfSxcXG4gICAgZHVwbGljYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHVwbGljYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEdXBsaXF1ZXInXFxuICAgIH0sXFxuICAgIHR5cGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1R5cGVzJ1xcbiAgICB9LFxcbiAgICBmdWxsc2NyZWVuOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnVsbC1zY3JlZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BsZWluIMOpY3JhbidcXG4gICAgfSxcXG4gICAgcmVkdWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVkdWNlJyxcXG4gICAgICAgICdmci1GUic6ICdSw6lkdWlyZSdcXG4gICAgfSxcXG4gICAgYXBwS2V5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwbGljYXRpb24ga2V5JyxcXG4gICAgICAgICdmci1GUic6ICdDbMOpIGRcXFxcJ2FwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBhcHBJbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwbGljYXRpb24gaW5mbycsXFxuICAgICAgICAnZnItRlInOiAnSW5mb3JtYXRpb24gc3VyIGxcXFxcJ2FwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0TW9kaWZpY2F0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFzdCBtb2RpZmljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlcm5pw6hyZSBtb2RpZmljYXRpb24nXFxuICAgIH0sXFxuICAgIGxhc3RNb2RpZmljYXRpb25CeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3QgbW9kaWZpY2F0aW9uIG1hZGUgYnkge25hbWV9IG9uIHtkYXRlfScsXFxuICAgICAgICAnZnItRlInOiAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBmYWl0ZSBwYXIge25hbWV9IGxlIHtkYXRlfSdcXG4gICAgfSxcXG4gICAga2V5RXhpc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXkgYWxyZWFkeSBleGlzdC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIGNsw6kgZXhpc3RlIGTDqWrDoC4nXFxuICAgIH0sXFxuICAgIHNpemU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaXplJyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUnXFxuICAgIH0sXFxuICAgIHRhYkNsb3NlVW5zYXZlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIHRoaXMgdGFiIGFuZCBsb3NlIHlvdXIgdXBkYXRlcz8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgYXZleiBlZmZlY3R1w6kgZGVzIG1vZGlmaWNhdGlvbnMgc2FucyBsZXMgZW5yZWdpc3RyZXIuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGZlcm1lciBjZXQgb25nbGV0IGV0IHBlcmRyZSBsZXMgZG9ubsOpZXMgbm9uIHNhdXZlZ2FyZMOpZXMgPydcXG4gICAgfSxcXG4gICAgbmFtZUFscmVhZHlUYWtlbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05hbWUgYWxyZWFkeSB0YWtlbi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSBkw6lqw6AgdXRpbGlzw6kuJ1xcbiAgICB9LFxcbiAgICBuYW1lTm9Eb3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBjYW5ub3QgY29udGFpbiBhIFxcXFwnLlxcXFwnJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gbmUgcGV1dCBwYXMgY29udGVuaXIgZGUgXFxcXCcuXFxcXCcnXFxuICAgIH0sXFxuICAgIHJlc291cmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzb3VyY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Jlc3NvdXJjZSdcXG4gICAgfSxcXG4gICAgdGFyZ2V0Um9vdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhcmdldCByb290JyxcXG4gICAgICAgICdmci1GUic6ICdSYWNpbmUgZGUgbGEgY2libGUnXFxuICAgIH0sXFxuICAgIHRhcmdldFBhdGg6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYXJnZXQgcGF0aCcsXFxuICAgICAgICAnZnItRlInOiAnQ2hlbWluIHZlcnMgbGEgY2libGUnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9wZXJ0aWVzJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXNFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhbnkgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgblxcXFwnYXZleiBhdWN1bmUgcHJvcHJpw6l0w6knXFxuICAgIH0sXFxuICAgIGtleVVuaXF1ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBrZXkgbXVzdCBiZSB1bmlxdWUuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSBjbMOpIGRvaXQgw6p0cmUgdW5pcXVlLidcXG4gICAgfSxcXG4gICAgcHJvcGVydHlBZGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIHByb3ByacOpdMOpJ1xcbiAgICB9LFxcbiAgICBtdWx0aWxhbmd1YWdlRmllbGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGlzIGEgbXVsdGlsaW5ndWFsIGZpZWxkLiBFbmdsaXNoIGlzIHJlcXVpcmVkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2VjaSBlc3QgdW4gY2hhbXAgbXVsdGlsaW5ndWUuIExcXFxcJ2FuZ2xhaXMgZXN0IG9ibGlnYXRvaXJlLidcXG4gICAgfSxcXG4gICAgZW5nbGlzaERlc2NyaXB0aW9uUmVxdWlyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbmdsaXNoIGRlc2NyaXB0aW9uIGlzIHJlcXVpcmVkLicsXFxuICAgICAgICAnZnItRlInOiAnTGEgZGVzY3JpcHRpb24gYW5nbGFpc2UgZXN0IG9ibGlnYXRvaXJlLidcXG4gICAgfSxcXG4gICAgbWF4U2l6ZTFHQjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01heGltdW0gc2l6ZSBhbGxvd2VkIGlzIDFHQi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIHRhaWxsZSBtYXhpbWFsZSBhdXRob3Jpc8OpZSBlc3QgZGUgMUdPLidcXG4gICAgfSxcXG4gICAgaW52YWxpZFNpemVNYXgxR0I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHRvbyBiaWcsIG1heGltdW0gc2l6ZSBhbGxvd2VkIGlzIDFHQi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgdHJvcCBsb3VyZCwgbGEgdGFpbGxlIG1heGltYWxlIGF1dGhvcmlzw6llIGVzdCBkZSAxR08uJ1xcbiAgICB9LFxcbiAgICBuYW1lQWxyZWFkeUV4aXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLicsXFxuICAgICAgICAnZnItRlInOiAnQ2Ugbm9tIGV4aXN0ZSBkw6lqw6AuJ1xcbiAgICB9LFxcbiAgICByZXNvdXJjZU5vdEZvdW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gcmVzb3VyY2UgaGFzIGJlZW4gZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSByZXNzb3VyY2UgblxcXFwnYSDDqXTDqSB0cm91dsOpZSdcXG4gICAgfSxcXG4gICAgcmVzb3VyY2VzQXR0YWNoZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNvdXJjZSBhdHRhY2hlZCcsXFxuICAgICAgICAnZnItRlInOiAnUmVzc291cmNlIGF0dGFjaMOpZSdcXG4gICAgfSxcXG4gICAgY29uZmlybVVwZGF0ZUZvckNvbnNpc3RhbmN5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXQgc2VlbXMgbGlrZSB5b3VyIGl0ZW1zIGFyZSBub3Qgc3luY2hyb25pemVkIHdpdGggdGhlIHNlcnZlciBhbnltb3JlLCB5b3Ugc2hvdWxkIHNhdmUgeW91ciB3b3JrIGFuZCB1cGRhdGUgdGhlIHNlcnZpY2UuJyxcXG4gICAgICAgICdmci1GUic6ICdJbCBzZW1ibGUgcXVlIHZvcyDDqWzDqW1lbnRzIG5lIHNvbnQgcGx1cyBzeW5jaHJvbmlzw6lzIGF2ZWMgbGUgc2VydmV1ciwgdm91cyBkZXZyaWV6IHNhdXZlZ2FyZGVyIHZvdHJlIHRyYXZhaWwgZXQgbWV0dHJlIMOgIGpvdXIgbGUgc2VydmljZS4nXFxuICAgIH0sXFxuICAgIGl0ZW1Ob3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gbm90IGZvdW5kLicsXFxuICAgICAgICAnZnItVVMnOiAnQXVjdW4gw6lsw6ltZW50IHRyb3V2w6kuJ1xcbiAgICB9LFxcbiAgICBzdGF0dXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0dXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N0YXR1dCdcXG4gICAgfSxcXG4gICAgbm9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vbmUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuJ1xcbiAgICB9LFxcbiAgICBpdGVtc1JlYWRvbmx5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlc2XigIJpdGVtcyBhcmUgb25seSByZWFkYWJsZS4gVGhleSBjYW4gbm90IGJlIGRlbGV0ZWQuJyxcXG4gICAgICAgICdmci1GUic6ICdDZXMgw6lsw6ltZW50cyBuZSBzb250IHBhcyBtb2RpZmlhYmxlcy4gSWxzIG5lIHBldXZlbnQgcGFzIMOqdHJlIHN1cHByaW3DqXMuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VucmVnaXN0cmVtZW50J1xcbiAgICB9LFxcbiAgICBiYWNrVG9Mb2dpbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2sgdG8gc2lnbiBpbiBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkZSBjb25uZXhpb24nXFxuICAgIH0sXFxuICAgIHJlZ2lzdHJhdGlvblN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdWNjZXNzZnVsIHJlZ2lzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZW1lbnQgcsOpdXNzaSdcXG4gICAgfSxcXG4gICAgc3VjY2Vzc1JlZ2lzdGVyTWFpbFNlbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3Ugd2lsbCByZWNlaXZlIGEgY29uZmlybWF0aW9uIGVtYWlsLicsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBhbGxleiByZWNldm9pciB1biBlbWFpbCBkZSBjb25maXJtYXRpb24uJ1xcbiAgICB9LFxcbiAgICBzdWNjZXNzUmVnaXN0cmF0aW9uTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lmIHlvdSBhbHJlYWR5IHNldCB5b3VyIHBhc3N3b3JkLCB5b3UgY2FuIG5vdyBzaWduIGluLiBPdGhlcndpc2UsIHBsZWFzZSBjbGljayBvbiB0aGUgbGluayBzZW50IHRvIHlvdSBieSBlbWFpbCB0byBhY3RpdmF0ZSB5b3VyIGFjY291bnQuJyxcXG4gICAgICAgICdmci1GUic6ICdTaSB2b3VzIGF2ZXogZMOpasOgIGNyw6nDqSB2b3RyZSBtb3QgZGUgcGFzc2UsIHZvdXMgcG91dmV6IHZvdXMgY29ubmVjdGVyIGTDqHMgbWFpbnRlbmFudC4gU2lub24sIHZvdXMgdHJvdXZlcmV6IHVuIGxpZW4gZGFucyBsXFxcXCdlbWFpbCBkZSBjb25maXJtYXRpb24gcXVpIHZvdXMgcGVtZXR0cmEgZFxcXFwnYWN0aXZlciB2b3RyZSBjb21wdGUuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb25FbWFpbEhlbHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYWtlIHN1cmUgdGhlIGVtYWlsIGlzIGNvcnJlY3QgdG8gcmVjZWl2ZSB0aGUgY29uZmlybWF0aW9uIGxpbmsnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHZvdXMgYXNzdXJlciBxdWUgdm90cmUgZW1haWwgZXN0IGNvcnJlY3QgcG91ciBwb3V2b2lyIGZpbmFsaXNlciBsXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgcGxlYXNlV2FpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSB3YWl0JyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBwYXRpZW50ZXInXFxuICAgIH0sXFxuICAgIGltcG9ydExvYWRpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3VyIGltcG9ydCBmaWxlIGlzIGJlaW5nIHByb2Nlc3NlZC4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgaW1wb3J0IGVzdCBlbiBjb3VycyBkZSB0cmFpdGVtZW50Li4uJ1xcbiAgICB9LFxcbiAgICBleHBvcnRMb2FkaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBleHBvcnQgZmlsZSBpcyBiZWluZyBwcmVwYXJlZC4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgZXhwb3J0IGVzdCBlbiBjb3VycyBkZSBjaGFyZ2VtZW50Li4uJ1xcbiAgICB9LFxcbiAgICBjbG9zZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlJyxcXG4gICAgICAgICdmci1GUic6ICdGZXJtZXInXFxuICAgIH0sXFxuICAgIHNlcnZpY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlJyxcXG4gICAgICAgICdmci1GUic6ICdTZXJ2aWNlJ1xcbiAgICB9LFxcbiAgICByZW5hbWVEaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBjbG9zZSBhbnkgdmlldyBvciBlZGl0IHRhYiBjb25jZXJuaW5nIHRoaXMgaXRlbSBpZiB5b3Ugd2FudCB0byByZW5hbWUgaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIGZlcm1lciB0b3V0IG9uZ2xldCBjb25jZXJuYW50IGNldCDDqWzDqW1lbnQgc2kgdm91cyBzb3VoYWl0ZXogbGUgcmVub21tZXInXFxuICAgIH0sXFxuICAgIGRlbGV0ZURpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGNsb3NlIGFueSB2aWV3IG9yIGVkaXQgdGFiIGNvbmNlcm5pbmcgdGhpcyBpdGVtIGlmIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgZmVybWVyIHRvdXQgb25nbGV0IGNvbmNlcm5hbnQgY2V0IMOpbMOpbWVudCBzaSB2b3VzIHNvdWhhaXRleiBsZSBzdXBwcmltZXInXFxuICAgIH0sXFxuICAgIHJlc3VsdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3Jlc3VsdCcsXFxuICAgICAgICAnZnItRlInOiAncsOpc3VsdGF0J1xcbiAgICB9LFxcbiAgICByZXN1bHRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAncmVzdWx0cycsXFxuICAgICAgICAnZnItRlInOiAncsOpc3VsdGF0cydcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlTGFiZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RyYXRpb24gdHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSBkXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25SZWdpc3RyYXRpb25UeXBlRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugc2VsZWN0IHRoZSB0eXBlIG9mIHJlZ2lzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc8OpbGVjdGlvbm5lciBsZSB0eXBlIGRcXFxcJ2VucmVnaXN0cmVtZW50J1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblR5cGVTdXBwbGllcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N1cHBsaWVyJyxcXG4gICAgICAgICdmci1GUic6ICdGb3Vybmlzc2V1cidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlQ2FwaXRhbFByb2plY3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYXBpdGFsIFByb2plY3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhcGl0YWwgUHJvamVjdCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlSW50ZXJuYWxVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW50ZXJuYWwgVXNlcicsXFxuICAgICAgICAnZnItRlInOiAnSW50ZXJuYWwgVXNlcidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25JbnRybzE6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIENvbW11bml0eSBlbmFibGVzIENoZXZyb24gU3VwcGxpZXJzLCBDaGV2cm9uIEludGVybmFsIFVzZXJzIGFuZCBDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdHMgdG8gcGVyZm9ybSBlbGVjdHJvbmljIHRyYW5zYWN0aW9ucyB3aXRoIENoZXZyb24gSVQgc3lzdGVtcyBpbiBhIGhpZ2hseSBzZWN1cmUgYnV0IHZlcnkgZWFzeSBtYW5uZXIuJyxcXG4gICAgICAgICdmci1GUic6ICdDZXR0ZSBjb21tdW5hdXTDqSBwZXJtZXQgYXV4IGZvdXJuaXNzZXVycywgXFxcIkludGVybmFsIFVzZXJcXFwiIGV0IFxcXCJDYXBpdGFsIFByb2plY3RcXFwiIENoZXZyb24gZGUgcsOpYWxpc2VyIGRlcyDDqWNoYW5nZXMgw6lsZWN0cm9uaXF1ZXMgYXZlYyBsZXMgc3lzdMOobWVzIGluZm9ybWF0aXF1ZXMgZGUgQ2hldnJvbiBkZSBmYcOnb24gc2ltcGxlIGV0IHPDqWN1cmlzw6llLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25TdXBwbGllckludHJvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8gYmUgcGFydCBvZiB0aGUgQ2hldnJvbiBDb21tdW5pdHksIHlvdSBtdXN0IGhhdmUgYmVlbiBpbnZpdGVkIGFuZC9vciBhdXRob3JpemVkIGJ5IENoZXZyb24uJyxcXG4gICAgICAgICdmci1GUic6ICdQb3VyIGZhaXJlIHBhcnRpZSBkZSBsYSBjb21tdW5hdXTDqSBDaGV2cm9uLCB2b3VzIGRldmV6IGF2b2lyIHJlw6d1IHVuZSBpbnZpdGF0aW9uIGV0L291IHVuZSBhdXRvcmlzYXRpb24gZGUgbGEgcGFydCBkZSBDaGV2cm9uLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25QaWR4aWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEJyxcXG4gICAgICAgICdmci1GUic6ICdQSURYIElEJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZEhlbHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgQ2hldnJvbiBQSURYIElEIGlzIGZvdW5kIGluIHRoZSBpbnZpdGF0aW9uIGVtYWlsIHNlbnQgYnkgQ2hldnJvbicsXFxuICAgICAgICAnZnItRlInOiAnTGUgXFxcIlBJRFggSURcXFwiIENoZXZyb24gc2UgdHJvdXZlIGRhbnMgbFxcXFwnZW1haWwgZFxcXFwnaW52aXRhdGlvbiBlbnZvecOpIHBhciBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGVudGVyIHRoZSBDaGV2cm9uIFBJRFggSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHNhaXNpciBsZSBcXFwiUElEWCBJRFxcXCIgQ2hldnJvbidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25WZW5kb3JpZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VSUCBWZW5kb3IgSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VSUCBWZW5kb3IgSUQnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gRVJQIFZlbmRvciBJRCBpcyBmb3VuZCBpbiB0aGUgaW52aXRhdGlvbiBlbWFpbCBzZW50IHRvIHlvdSBieSBDaGV2cm9uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBcXFwiRVJQIFZlbmRvciBJRFxcXCIgQ2hldnJvbiBzZSB0cm91dmUgZGFucyBsXFxcXCdlbWFpbCBkXFxcXCdpbnZpdGF0aW9uIGVudm95w6kgcGFyIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBFUlAgVmVuZG9yIElEJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgbGUgXFxcIkVSUCBWZW5kb3IgSURcXFwiIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uQWdyZWVtZW50SW50cm86IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxzcGFuPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlBsZWFzZSByZWFkIHRoZSZuYnNwOzwvc3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8YSB0YXJnZXQ9XFxcXFxcXCJfYmxhbmtcXFxcXFxcIiBocmVmPVxcXFxcXFwiaHR0cDovL3d3dy5iMmVlbi5jb20vX2NvbW11bml0eW1hdGVyaWFsL2NoZXZyb24vQWdyZWVtZW50X2IyZWVuX0NoZXZyb25fUHJvZC5wZGZcXFxcXFxcIj5jb250cmFjdHVhbCBhZ3JlZW1lbnQ8L2E+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7YW5kIGNvbmZpcm0gYmVsb3c8L3NwYW4+XFxcXG4gICAgICAgICAgICA8L3NwYW4+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8c3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5NZXJjaSBkZSBsaXJlJm5ic3A7PC9zcGFuPlxcXFxuICAgICAgICAgICAgICAgIDxhIHRhcmdldD1cXFxcXFxcIl9ibGFua1xcXFxcXFwiIGhyZWY9XFxcXFxcXCJodHRwOi8vd3d3LmIyZWVuLmNvbS9fY29tbXVuaXR5bWF0ZXJpYWwvY2hldnJvbi9BZ3JlZW1lbnRfYjJlZW5fQ2hldnJvbl9Qcm9kLnBkZlxcXFxcXFwiPmwnYWNjb3JkIGNvbnRyYWN0dWVsPC9hPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPiZuYnNwO2V0IGRlIHZhbGlkZXIgY2ktZGVzc291czwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvc3Bhbj5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudExhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSSBoYXZlIHJlYWQgYW5kIEkgYWNjZXB0IHRoZSBUZXJtcyBhbmQgQ29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCcsXFxuICAgICAgICAnZnItRlInOiAnSlxcXFwnYWkgbHUgZXQgYWNjZXB0ZSBsZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlcyBkZSBjZSBjb250cmF0J1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGFjY2VwdCB0aGUgVGVybXMgYW5kIENvbmRpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHZhbGlkZXIgbGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZXMnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uSW50ZXJuYWxVc2VySW50cm8yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8gZ2V0IHlvdXIgcmVnaXN0cmF0aW9uIGFjY2VwdGVkLCBwbGVhc2UgcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgUElEWCBJRCBhbmQgQ2hldnJvbiBwYXNzd29yZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BvdXIgcG91cnN1aXZyZSB2b3RyZSBlbnJlZ2lzdHJlbWVudCwgbWVyY2kgZFxcXFwnZW50cmVyIGxlIFxcXCJQSURYIElEXFxcIiBldCBtb3QgZGUgcGFzc2UgQ2hldnJvbiBwdWlzIHZhbGlkZXIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2hldnJvbiBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGFzc3dvcmRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gcGFzc3dvcmQgaXMgZm91bmQgaW4gdGhlIGludml0YXRpb24gZW1haWwgc2VudCBieSBDaGV2cm9uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtb3QgZGUgcGFzc2UgQ2hldnJvbiBzZSB0cm91dmUgZGFucyBsXFxcXCdlbWFpbCBkXFxcXCdpbnZpdGF0aW9uIGVudm95w6kgcGFyIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGFzc3dvcmRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc2Fpc2lyIGxlIG1vdCBkZSBwYXNzZSBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkNhcGl0YWxQcm9qZWN0SW50cm86IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3UgYXJlIGNyZWF0aW5nIHRoaXMgYWNjb3VudCBmb3IgYSBDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgY3LDqWV6IGNlIGNvbXB0ZSBwb3VyIHVuIFxcXCJDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdFxcXCIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZFZlbmRvcmlkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEIC8gRVJQIFZlbmRvciBJRCBhcmUgbm90IGNvcnJlY3QuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWVzIHlvdSBwcm92aWRlZCBhbmQgcmV0cnkuJyxcXG4gICAgICAgICdmci1GUic6ICdcXFwiUElEWCBJRFxcXCIgLyBcXFwiRVJQIFZlbmRvciBJRFxcXCIgaW5jb3JyZWN0cy4gTWVyY2kgZGUgdsOpcmlmaWVyIGxlcyB2YWxldXJzIHNhaXNpZXMgYXZhbnQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGlkeGlkUGFzc3dvcmRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BJRFggSUQgLyBDaGV2cm9uIFBhc3N3b3JkIGFyZSBub3QgY29ycmVjdC4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZXMgeW91IHByb3ZpZGVkIGFuZCByZXRyeS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1xcXCJQSURYIElEXFxcIiAvIE1vdCBkZSBwYXNzZSBpbmNvcnJlY3RzLiBNZXJjaSBkZSB2w6lyaWZpZXIgbGVzIHZhbGV1cnMgc2Fpc2llcyBhdmFudCBkZSByw6llc3NheWVyLidcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldFRvb2x0aXBEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZSBncm91cGUgZGUgcGVybWlzc2lvbnMnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRUb29sdGlwRWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VkaXQgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgY2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcENsb25lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIGEgbmV3IHBlcm1pc3Npb24gc2V0IHdpdGggcHJlZmlsbGVkIGRhdGEgZnJvbSB0aGlzIG9uZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuIG5vdXZlYXUgZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGF2ZWMgbGVzIGRvbm7DqWVzIGRlIGNlbHVpLWNpJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcENyb3NzSW5zdGFuY2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBpcyBhIGdsb2JhbCBwZXJtaXNzaW9uIHNldCcsXFxuICAgICAgICAnZnItRlInOiAnQ2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGVzdCBnbG9iYWwnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRBdExlYXN0T25lU2NvcGVSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F0IGxlYXN0IG9uZSBzY29wZSBzdHJpbmcgaXMgcmVxdWlyZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1IG1vaW5zIHVuIHNjb3BlIGRvaXQgw6p0cmUgcmVuc2VpZ27DqSdcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldHNEZWxldGVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHBlcm1pc3Npb24gc2V0PycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIGdyb3VwZSBkZSBwZXJtaXNzaW9ucyA/J1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYXNzb2NpYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzYXNzb2NpYXRlIHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXNhc3NvY2llciBjZXQgdXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIHJlYWxtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVhbG0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RvbWFpbmUnXFxuICAgIH0sXFxuICAgIGVtYWlsVmVyaWZpZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbWFpbCB2ZXJpZmllZCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgY29uZmlybcOpJ1xcbiAgICB9LFxcbiAgICBwb2xpY2llczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BvbGljaWVzJyxcXG4gICAgICAgICdmci1GUic6ICdEcm9pdHMgZFxcXFwnYWNjw6hzJ1xcbiAgICB9LFxcbiAgICBvcmdQb3NpdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcmdhbml6YXRpb24gcG9zaXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdQb3NpdGlvbnMgZFxcXFwnb3JnYW5pc2F0aW9uJ1xcbiAgICB9LFxcbiAgICB1c2VyUmVsb2FkT3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIHVzZXIgb3JnYW5pemF0aW9uIHBvc2l0aW9ucycsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgbGVzIHBvc2l0aW9ucyBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldCcsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICB1c2VyUmVzZW5kQWN0aXZhdGlvbkVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZW5kIGFjdGl2YXRpb24gZW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbnZveWVyIGxcXFxcJ2VtYWlsIGRcXFxcJ2FjdGl2YXRpb24nXFxuICAgIH0sXFxuICAgIHVzZXJTaG93T3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyB1c2VyIG9yZ2FuaXphdGlvbiBwb3NpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGVzIHBvc2l0aW9ucyBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRzRm9ySW5zdGFuY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldHMgZm9yIGluc3RhbmNlJyxcXG4gICAgICAgICdmci1GUic6ICdHcm91cGVzIGRlIHBlcm1pc3Npb25zIHBvdXIgbFxcXFwnaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIG90aGVyUHJvcGVydGllczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ090aGVyIHByb3BlcnRpZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1dHJlcyBwcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIHNldCBtdXN0IGJlIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdSBtb2lucyB1biBncm91cGUgZGUgcGVybWlzc2lvbnMgZG/DrnQgw6p0cmUgYXNzaWduw6kgw6AgbFxcXFwndXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIG9yZ1Bvc2l0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3JnYW5pemF0aW9uIHBvc2l0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdQb3NpdGlvbiBkYW5zIGxcXFxcJ29yZ2FuaXNhdGlvbidcXG4gICAgfSxcXG4gICAgdXNlcnNFbWFpbFBsYWNlaG9sZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsLi4uJ1xcbiAgICB9LFxcbiAgICBzZWFyY2hCeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCBieScsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlciBwYXInXFxuICAgIH0sXFxuICAgIHRvb2x0aXBBZGRVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZSB0aGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgbmV3IHVzZXIgeW91IHdhbnQgdG8gYXNzb2NpYXRlIHRvIHRoaXMgaW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VudHJlciBsXFxcXCdhZHJlc3NlIGVtYWlsIGR1IG5vdXZlbCB1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogYXNzb2NpZXIgw6AgY2V0dGUgaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIGFzc29jaWF0ZVVzZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBc3NvY2lhdGUgbmV3IHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fzc29jaWVyIG5vdXZlbCB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgdXNlckRlbGV0ZUNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgdXNlcj8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgdXRpbGlzYXRldXIgPydcXG4gICAgfSxcXG4gICAgdXNlckRpc2Fzc29jaWF0ZUNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGlzYXNzb2NpYXRlIHRoaXMgdXNlciBmcm9tIHRoZSBjdXJyZW50IGluc3RhbmNlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgZMOpc2Fzc29jaWVyIGNldCB1dGlsaXNhdGV1ciBkZSBsXFxcXCdpbnN0YW5jZSA/J1xcbiAgICB9LFxcbiAgICBzaG93QWxsVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHVzZXJzIG9mIGFsbCBpbnN0YW5jZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyB1dGlsaXNhdGV1cnMgZGUgdG91dGVzIGxlcyBpbnN0YW5jZXMnXFxuICAgIH0sXFxuICAgIHNob3dTY29wZWxlc3NVc2Vyczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ09ubHkgZGlzcGxheSB1c2VycyB3aXRob3V0IGFueSBwZXJtaXNzaW9uJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBzZXVsZW1lbnQgbGVzIHV0aWxpc2F0ZXVycyBzYW5zIGRyb2l0cyBkXFxcXCdhY2PDqHMnXFxuICAgIH0sXFxuICAgIHNob3dPcmdsZXNzVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmx5IGRpc3BsYXkgdXNlcnMgd2l0aG91dCBhbnkgYXNzb2NpYXRlZCBvcmcgbm9kZScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgc2V1bGVtZW50IGxlcyB1dGlsaXNhdGV1cnMgc2FucyBwb3NpdGlvbiBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIGRpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2Fzc29jaWF0ZScsXFxuICAgICAgICAnZnItRlInOiAnRMOpc2Fzc29jaWVyJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Blcm1pc3Npb24gc2V0cycsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlcyBkZSBwZXJtaXNzaW9ucydcXG4gICAgfSxcXG4gICAgdXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VycycsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXJzJ1xcbiAgICB9LFxcbiAgICBmaWVsZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWVsZHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wcydcXG4gICAgfSxcXG4gICAgaXNLZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXk/JyxcXG4gICAgICAgICdmci1GUic6ICdDbMOpID8nXFxuICAgIH0sXFxuICAgIGFkZEZpZWxkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgZmllbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gY2hhbXAnXFxuICAgIH0sXFxuICAgIGNyZWF0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIGEgbmV3IHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXIgdW5lIG5vdXZlbGxlIHRhYmxlJ1xcbiAgICB9LFxcbiAgICBlZGl0VGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVcGRhdGUgdGhlIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2RpZmllciBsYSB0YWJsZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZFhtbFRhZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgdmFsdWUuIEFsbG93ZWQgY2hhcnM6IGEteiBBLVogMC05IF8gOiAtIC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGV1ciBpbnZhbGlkZS4gQ2FyYWN0w6hyZXMgYXV0b3Jpc8OpcyA6IGEteiBBLVogMC05IF8gOiAtIC4nXFxuICAgIH0sXFxuICAgIHdpZHRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2lkdGgnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhcmdldXInXFxuICAgIH0sXFxuICAgIGhlaWdodDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hlaWdodCcsXFxuICAgICAgICAnZnItRlInOiAnSGF1dGV1cidcXG4gICAgfSxcXG4gICAgc21hbGxTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU21hbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BldGl0J1xcbiAgICB9LFxcbiAgICBtZWRpdW1TaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVkaXVtJyxcXG4gICAgICAgICdmci1GUic6ICdNb3llbidcXG4gICAgfSxcXG4gICAgbGFyZ2VTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFyZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dyYW5kJ1xcbiAgICB9LFxcbiAgICBmdWxsU2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Z1bGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BsZWluJ1xcbiAgICB9LFxcbiAgICBlZGl0RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICB2aWV3RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICByZXByb2Nlc3NEb2N1bWVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcHJvY2VzcyBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnUmVsYW5jZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHJlbG9hZERvY3VtZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICdSZWNoYXJnZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHByaW50RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmludCBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnSW1wcmltZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHZpZXdGb3JtSnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IHRoZSBmb3JtJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIGZvcm11bGFpcmUnXFxuICAgIH0sXFxuICAgIGVkaXRGb3JtSnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHVzaW5nIHRoZSBmb3JtJyxcXG4gICAgICAgICdmci1GUic6ICdFZGl0ZXIgw6AgbFxcXFwnYWlkZSBkdSBmb3JtdWxhaXJlJ1xcbiAgICB9LFxcbiAgICB2aWV3U291cmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyB0aGUgc291cmNlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxhIHNvdXJjZSdcXG4gICAgfSxcXG4gICAgZWRpdE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgdmlld01lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgcmVwcm9jZXNzTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcHJvY2VzcyBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZWxhbmNlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICByZWxvYWRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hhcmdlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBwcmludE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmludCBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdJbXByaW1lciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBsb2NrZWRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBtZXNzYWdlIGlzIGN1cnJlbnRseSBsb2NrZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIG1lc3NhZ2UgZXN0IHZlcnJvdWlsbMOpJ1xcbiAgICB9LFxcbiAgICBiYWNrVG9MaXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmV0dXJuIHRvIGxpc3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBsaXN0ZSdcXG4gICAgfSxcXG4gICAgZW1wdHlBcHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb25lJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUnXFxuICAgIH0sXFxuICAgIG5vQXBwU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBhcHBsaWNhdGlvbiBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIGFwcGxpY2F0aW9uIHPDqWxlY3Rpb25uw6llJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RBcHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYW4gYXBwbGljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdW5lIGFwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsb2dvdXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaWduIG91dCcsXFxuICAgICAgICAnZnItRlInOiAnRMOpY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0U3luY0RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IHN5bmNocm9uaXphdGlvbiBkYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEYXRlIGRlIGRlcm5pw6hyZSBzeW5jaHJvbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVDb25maWd1cmF0aW9uSW52YWxpZE5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlLiBBdXRob3JpemVkIGNoYXJhY3RlcnMgOiBhLXogQS1aIDAtOSBfIDogLSAuJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIgaW52YWxpZGUuIENhcmFjdMOocmVzIGF1dG9yaXPDqXMgOiBhLXogQS1aIDAtOSBfIDogLSAuJ1xcbiAgICB9LFxcbiAgICBob21lQ29uZmlndXJhdGlvbk5hbWVBbHJlYWR5VXNlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBuYW1lIGB7bmFtZX1gaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBjb25maWd1cmF0aW9uLCBjaG9vc2UgYW5vdGhlciBvbmUgcGxlYXNlJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gYHtuYW1lfWAgZXN0IGTDqWrDoCB1dGlsaXPDqSBwb3VyIHVuZSBhdXRyZSBjb25maWd1cmF0aW9uLCB2ZXVpbGxleiBlbiBjaG9pc2lyIHVuIGF1dHJlJ1xcbiAgICB9LFxcbiAgICBpbnN0YW5jZUNoYW5nZURpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5zdGFuY2UgY2hhbmdlIGlzblxcXFwndCBwb3NzaWJsZSB3aGVuIHlvdSBhcmUgZWRpdGluZyB1c2VycyBvciBwZXJtaXNzaW9uIHNldHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW5nZXIgZFxcXFwnaW5zdGFuY2UgZXN0IGltcG9zc2libGUgcGVuZGFudCBsXFxcXCfDqWRpdGlvbiBkXFxcXCd1dGlsaXNhdGV1cnMgb3UgZGUgZ3JvdXBlcyBkZSBwZXJtaXNzaW9ucy4nXFxuICAgIH0sXFxuICAgIHF1aXRFZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUXVpdCBlZGl0JyxcXG4gICAgICAgICdmci1GUic6ICdBbm51bGVyIMOpZGl0aW9uJ1xcbiAgICB9LFxcbiAgICByZWxvYWRJbnN0YW5jZXNMaXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIGluc3RhbmNlcyBsaXN0JyxcXG4gICAgICAgICdmci1GUic6ICdSYWZyYcOuY2hpciBsYSBsaXN0ZSBkZXMgaW5zdGFuY2VzJ1xcbiAgICB9LFxcbiAgICBpbnN0YW5jZUZldGNoV2FybmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FwcCBlbmRwb2ludHMgbm90IGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGVzIFxcXFwnZW5kcG9pbnRzXFxcXCcgbmUgc29udCBwYXMgY2hhcmfDqXMnXFxuICAgIH0sXFxuICAgIG1lbnU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZW51JyxcXG4gICAgICAgICdmci1GUic6ICdNZW51J1xcbiAgICB9LFxcbiAgICBob21lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG9tZScsXFxuICAgICAgICAnZnItRlInOiAnQWNjdWVpbCdcXG4gICAgfSxcXG4gICAgcmVwb3J0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcG9ydHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhcHBvcnRzJ1xcbiAgICB9LFxcbiAgICB3b3JrSXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXb3JrIEl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdUw6JjaGVzJ1xcbiAgICB9LFxcbiAgICB0YWJsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYWJsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1RhYmxlcydcXG4gICAgfSxcXG4gICAgZG9jdW1lbnRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRG9jdW1lbnRzJyxcXG4gICAgICAgICdmci1GUic6ICdEb2N1bWVudHMnXFxuICAgIH0sXFxuICAgIG9hdXRoU2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPQXV0aCBTZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZXMgT0F1dGgnXFxuICAgIH0sXFxuICAgIG9yZ2FuaXNhdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcmdhbml6YXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdPcmdhbmlzYXRpb25zJ1xcbiAgICB9LFxcbiAgICBsb2NhbFRlc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMb2NhbCB0ZXN0JyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0IGxvY2FsJ1xcbiAgICB9LFxcbiAgICByZXRyeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHJ5PycsXFxuICAgICAgICAnZnItRlInOiAnUsOpZXNzYXllciA/J1xcbiAgICB9LFxcbiAgICBub01lbnVFbnRyeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGVudHJ5IGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtZW51IGFjY2Vzc2libGUnXFxuICAgIH0sXFxuICAgIGNyZWF0ZWRNZXNzYWdlc0lkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZWQgbWVzc2FnZShzKSBJRChzKTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEKHMpIGR1L2RlcyBtZXNzYWdlKHMpIGNyw6nDqShzKSA6J1xcbiAgICB9LFxcbiAgICBmbGFnTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZsYWcgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnTWFycXVlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBmbGFnczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZsYWdzJyxcXG4gICAgICAgICdmci1GUic6ICdNYXJxdWV1cnMnXFxuICAgIH0sXFxuICAgIGF2YWlsYWJsZUZpZWxkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F2YWlsYWJsZSBmaWVsZHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wcyBkaXNwb25pYmxlcydcXG4gICAgfSxcXG4gICAgYWx3YXlzVmlzaWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fsd2F5cyB2aXNpYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdUb3Vqb3VycyB2aXNpYmxlJ1xcbiAgICB9LFxcbiAgICB2aXNpYmxlSWZPcGVuZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaXNpYmxlIGlmIG9wZW5lZCcsXFxuICAgICAgICAnZnItRlInOiAnVmlzaWJsZSBzaSBvdXZlcnQnXFxuICAgIH0sXFxuICAgIGJhY2tncm91bmRDb2xvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2tncm91bmQgY29sb3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvdWxldXIgZHUgZm9uZCdcXG4gICAgfSxcXG4gICAgZm9udENvbG9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVmYXVsdCBmb250IGNvbG9yJyxcXG4gICAgICAgICdmci1GUic6ICdDb3VsZXVyIGRlIGJhc2UgZHUgdGV4dGUnXFxuICAgIH0sXFxuICAgIGNyZWF0ZU1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDcmVhdGUgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuIG1lc3NhZ2UnXFxuICAgIH0sXFxuICAgIHVwbG9hZEZpbGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBsb2FkIGZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnZveWVyIGRlcyBmaWNoaWVycydcXG4gICAgfSxcXG4gICAgZW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2xvc2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlcm1pbmVyJ1xcbiAgICB9LFxcbiAgICBwcm9jZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvY2VzcycsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgZmlsZXNEcm9wcGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnZmlsZShzKSBkcm9wcGVkJyxcXG4gICAgICAgICdmci1GUic6ICdmaWNoaWVyKHMpIGTDqXBvc8OpKHMpJ1xcbiAgICB9LFxcbiAgICBmaWxlc1VwbG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnZmlsZShzKSB1cGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnZmljaGllcihzKSBlbnZvecOpKHMpJ1xcbiAgICB9LFxcbiAgICBzaG93UHJvY2Vzc2VkRmlsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgZmlsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBmaWNoaWVycyB0cmFpdMOpcyBhdmVjIHN1Y2PDqHMnXFxuICAgIH0sXFxuICAgIGhpZGVQcm9jZXNzZWRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGUgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnTWFzcXVlciBsZXMgZmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzJ1xcbiAgICB9LFxcbiAgICBmaWxlc1N1Ym1pdFN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzICEnXFxuICAgIH0sXFxuICAgIGhpZGRlbkNvbHVtbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIaWRkZW4gY29sdW1ucycsXFxuICAgICAgICAnZnItRlInOiAnQ29sb25uZXMgY2FjaMOpZXMnXFxuICAgIH0sXFxuICAgIGhpZGRlbkNvbHVtbnNUaXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICcoY2xpY2sgdG8gcmUtZGlzcGxheSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJyhjbGlxdWVyIHBvdXIgcsOpLWFmZmljaGVyKSdcXG4gICAgfSxcXG4gICAgYWxsQ29sdW1uc1Zpc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbGwgY29sdW1ucyBhcmUgY3VycmVudGx5IGRpc3BsYXllZC4gSGlkZGVucyBjb2x1bW5zIGNhbiBiZSBmb3VuZCBoZXJlIGFuZCByZS1kaXNwbGF5ZWQuJyxcXG4gICAgICAgICdmci1GUic6ICdUb3V0ZXMgbGVzIGNvbG9ubmVzIHNvbnQgYWN0dWVsbGVtZW50IHZpc2libGVzLiBMZXMgY29sb25uZXMgY2FjaMOpZXMgYXBwYXJhaXRyb250IGljaSBldCBwb3Vycm9udCDDqnRyZSByw6ktYWZmaWNow6llcy4nXFxuICAgIH0sXFxuICAgIGRhdGVGcm9tOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJvbScsXFxuICAgICAgICAnZnItRlInOiAnRMOpYnV0J1xcbiAgICB9LFxcbiAgICBkYXRlVG86IHtcXG4gICAgICAgICdlbi1VUyc6ICdUbycsXFxuICAgICAgICAnZnItRlInOiAnRmluJ1xcbiAgICB9LFxcbiAgICBkb2N1bWVudFR5cGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3JyxcXG4gICAgICAgICdmci1GUic6ICdWdWUnXFxuICAgIH0sXFxuICAgIGNvbGxhcHNlT3B0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29sbGFwc2UgYWZ0ZXIgc2VhcmNoJyxcXG4gICAgICAgICdmci1GUic6ICdSw6lkdWlyZSBhcHLDqHMgcmVjaGVyY2hlJ1xcbiAgICB9LFxcbiAgICByZXNldFNlYXJjaE9wdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhdW5jaCBzZWFyY2ggYWZ0ZXIgcmVzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmNlciBsYSByZWNoZXJjaGUgYXByw6hzIHLDqWluaXRpYWxpc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5TGFiZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IGxhYmVsJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsYWJlbCdcXG4gICAgfSxcXG4gICAgd29ya2Zsb3dJblByb2dyZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW4gYSB3b3JrZmxvdycsXFxuICAgICAgICAnZnItRlInOiAnRmx1eCBlbiBjb3VycydcXG4gICAgfSxcXG4gICAgYXNzaWduVXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fzc2lnbiB1c2VyJyxcXG4gICAgICAgICdmci1GUic6ICdBc3NpZ25lciB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgYXNzaWduZWRVc2Vyczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fzc2lnbmVkIHVzZXIocyknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyKHMpIGFzc2lnbsOpKHMpJ1xcbiAgICB9LFxcbiAgICBhc3NpZ25Vc2VyVG9Qb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCB0aGlzIHVzZXIgdG8gdGhpcyBwb3NpdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciBjZXQgdXRpbGlzYXRldXIgw6AgY2V0dGUgcG9zaXRpb24nXFxuICAgIH0sXFxuICAgIHJlbW92ZVVzZXJPcmdQb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbW92ZSB0aGlzIHVzZXIgZnJvbSB0aGlzIHBvc2l0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgY2V0IHV0aWxpc2F0ZXVyIGRlIGNldHRlIHBvc2l0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXlvdXRCdWlsZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGF5b3V0IGJ1aWxkZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BlcnNvbm5hbGlzYXRpb24gZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICB0aGVtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZW1lJyxcXG4gICAgICAgICdmci1GUic6ICdUaMOobWUnXFxuICAgIH0sXFxuICAgIGZvbnRTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRm9udCBzaXplJyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUgY2FyYWN0w6hyZXMnXFxuICAgIH0sXFxuICAgIHNob3dJbnZpc2libGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyBpbnZpc2libGVzJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsZXMgY2FyYWN0w6hyZXMgaW52aXNpYmxlcydcXG4gICAgfSxcXG4gICAgc2hvd0d1dHRlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgZ3V0dGVyJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsYSBtYXJnZSdcXG4gICAgfSxcXG4gICAgc2hvd0luZGVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaW5kZW50IGd1aWRlcycsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgbGVzIGd1aWRlcyBkXFxcXCdpbmRlbnRhdGlvbidcXG4gICAgfSxcXG4gICAgd3JhcDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dyYXAnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWJvcmRlbWVudCdcXG4gICAgfSxcXG4gICAgcHJldmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ByZXZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byw6l2aXN1YWxpc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBzaG93SGlkZGVuQ29sdW1uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaGlkZGVuIGNvbHVtbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBjb2xvbm5lcyBjYWNow6llcydcXG4gICAgfSxcXG4gICAgcmVzZXREaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBhbGwgZGlzcGxheSBzZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUsOpaW5pdGlhbGlzZXIgbGVzIHByw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5SGlkZGVuQ29sdW1uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGRlbiBjb2x1bW5zIChjbGljayB0byByZS1kaXNwbGF5KScsXFxuICAgICAgICAnZnItRlInOiAnQ29sb25uZXMgY2FjaMOpZXMgKGNsaXF1ZXIgcG91ciByw6ktYWZmaWNoZXIpJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3NDaGFuZ2VkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBzZXR0aW5ncyBjaGFuZ2VkIScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqWbDqXJlbmNlcyBkXFxcXCdhZmZpY2hhZ2UgbW9kaWZpw6llcyAhJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHNldHRpbmdzIScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqWbDqXJlbmNlcyBkXFxcXCdhZmZpY2hhZ2UnXFxuICAgIH0sXFxuICAgIGRhdGFncmlkU2F2ZURpc3BsYXlTZXR0aW5nczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIlxcXFxuICAgICAgICAgICAgPGRpdj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5EbyB5b3Ugd2FudCB0byBzYXZlIHlvdXIgbW9kaWZpY2F0aW9ucz88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPllvdXIgcHJlZmVyZW5jZXMgKHByZXNlbmNlLCB3aWR0aCBhbmQgb3JkZXIgb2YgY29sdW1ucy4uLikgd2lsbCBiZSBzYXZlZCBpbiB5b3VyIHVzZXIgcHJvZmlsZS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8ZGl2PlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlZvdWxlei12b3VzIHNhdXZlZ2FyZGVyIHZvcyBtb2RpZmljYXRpb25zID88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPlZvcyBwclxcXFx1MDBFOWZcXFxcdTAwRTlyZW5jZXMgZCdhZmZpY2hhZ2UgKHByXFxcXHUwMEU5c2VuY2UsIGxhcmdldXIgZXQgb3JkcmUgZGVzIGNvbG9ubmVzLi4uKSBzZXJvbnQgZW5yZWdpc3RyXFxcXHUwMEU5ZXMgZGFucyB2b3RyZSBwcm9maWwgdXRpbGlzYXRldXIuPC9lbT5cXFxcbiAgICAgICAgICAgIDwvZGl2PlxcXFxuICAgICAgICBcXFwiXFxuICAgIH0sXFxuICAgIGRpc3BsYXlTZXR0aW5nc1Jlc2V0Q29uZmlybToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXNldCBhbGwgeW91ciBkaXNwbGF5IHNldHRpbmdzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcsOpaW5pdGlhbGlzZXIgdm9zIHByw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlID8nXFxuICAgIH0sXFxuICAgIGRpc3BsYXlNb2RlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBtb2RlOicsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoYWdlIDonXFxuICAgIH0sXFxuICAgIGRpc3BsYXlMYXB0b3A6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZWRpdW0gc2NyZWVuIHNpemUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3JhbiBkZSB0YWlsbGUgbW95ZW5uZSdcXG4gICAgfSxcXG4gICAgZGlzcGxheURlc2t0b3A6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXJnZSBzY3JlZW4gc2l6ZScsXFxuICAgICAgICAnZnItRlInOiAnw4ljcmFuIGRlIGdyYW5kZSB0YWlsbGUnXFxuICAgIH0sXFxuICAgIHVuZXhwZWN0ZWRFcnJvckNoZWNrVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQW4gdW5leHBlY3RlZCBlcnJvciBoYXMgb2NjdXJlZC4gUGxlYXNlIHJldHJ5IGFuZCBjaGVjayBmb3IgdGhlIFVSTCB5b3UgcmVxdWVzdGVkIG9yIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvci4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VuZSBlcnJldXIgZXN0IHN1cnZlbnVlLiBNZXJjaSBkZSByw6llc3NheWVyIGVuIHbDqXJpZmlhbnQgbFxcXFwnVVJMIG91IGNvbnRhY3RleiB2b3RyZSBhZG1pbmlzdHJhdGV1ciBzeXN0w6htZS4nXFxuICAgIH0sXFxuICAgIHNlZUVycm9yRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlZSBlcnJvciBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlcyBkw6l0YWlscyBkZSBsXFxcXCdlcnJldXInXFxuICAgIH0sXFxuICAgIHNlY29uZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlY29uZCcsXFxuICAgICAgICAnZnItRlInOiAnU2Vjb25kZSdcXG4gICAgfSxcXG4gICAgbWludXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWludXRlJyxcXG4gICAgICAgICdmci1GUic6ICdNaW51dGUnXFxuICAgIH0sXFxuICAgIGhvdXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIb3VyJyxcXG4gICAgICAgICdmci1GUic6ICdIZXVyZSdcXG4gICAgfSxcXG4gICAgZGF5T2ZNb250aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RheSBvZiBtb250aCcsXFxuICAgICAgICAnZnItRlInOiAnSm91ciBkdSBtb2lzJ1xcbiAgICB9LFxcbiAgICBtb250aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vbnRoJyxcXG4gICAgICAgICdmci1GUic6ICdNb2lzJ1xcbiAgICB9LFxcbiAgICBkYXlPZldlZWs6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEYXkgb2Ygd2VlaycsXFxuICAgICAgICAnZnItRlInOiAnSm91ciBkZSBsYSBzZW1haW5lJ1xcbiAgICB9LFxcbiAgICB5ZWFyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWWVhcicsXFxuICAgICAgICAnZnItRlInOiAnQW5uw6llJ1xcbiAgICB9LFxcbiAgICBpbnB1dEludmFsaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGlucHV0JyxcXG4gICAgICAgICdmci1GUic6ICdDaGFtcCBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgaW1wb3J0RGF0YUZyb21GaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0IGRhdGEgZnJvbSBhIGZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyIGRlcyBkb25uw6llcyBkZXB1aXMgdW4gZmljaGllcidcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgZmlsZScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllciBzw6lsZWN0aW9ubsOpJ1xcbiAgICB9LFxcbiAgICBmaWxlVHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGUgdHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSBkdSBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBmaWVsZHNTZXBhcmF0b3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWVsZHMgc2VwYXJhdG9yJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lwYXJhdGV1ciBkZSBjb2xvbm5lcydcXG4gICAgfSxcXG4gICAgZW5jb2Rpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbmNvZGluZycsXFxuICAgICAgICAnZnItRlInOiAnRW5jb2RhZ2UnXFxuICAgIH0sXFxuICAgIHF1b3RlQ2hhcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1b3RlIGNoYXJhY3RlcicsXFxuICAgICAgICAnZnItRlInOiAnQ2FyYWN0w6hyZSBkZSBndWlsbGVtZXQnXFxuICAgIH0sXFxuICAgIGhlYWRlck9uRmlyc3RSb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIZWFkZXJzIG9uIGZpcnN0IHJvdycsXFxuICAgICAgICAnZnItRlInOiAnRW50w6p0ZXMgc3VyIGxhIHByZW1pw6hyZSBsaWduZSdcXG4gICAgfSxcXG4gICAgb3ZlcndyaXRlRXhpc3RpbmdEYXRhOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3ZlcndyaXRlIGV4aXN0aW5nIGRhdGEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3Jhc2VyIGxlcyBkb25uw6llcyBleGlzdGFudGVzJ1xcbiAgICB9LFxcbiAgICBkcm9wWm9uZVRpdGxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHJvcCBmaWxlcyBoZXJlIHRvIHVwbG9hZCB0aGVtJyxcXG4gICAgICAgICdmci1GUic6ICdEw6lwb3NlciBsZXMgZmljaGllcnMgw6AgZW52b3llciBpY2knXFxuICAgIH0sXFxuICAgIGRyb3Bab25lU3VidGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICcob3IgY2xpY2spJyxcXG4gICAgICAgICdmci1GUic6ICcob3UgY2xpcXVlciknXFxuICAgIH0sXFxuICAgIGludmFsaWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBmaWxlKHMpJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVyKHMpIGludmFsaWRlKHMpJ1xcbiAgICB9LFxcbiAgICBjb250ZW50VHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FjY2VwdGVkIENvbnRlbnQtdHlwZXM6JyxcXG4gICAgICAgICdmci1GUic6ICdDb250ZW50LXR5cGVzIGFjY2VwdMOpcyA6J1xcbiAgICB9LFxcbiAgICBtYXhTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWF4IHNpemU6JyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUgbWF4IDonXFxuICAgIH0sXFxuICAgIHVua25vd25Gb3JtYXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd1bmtub3duIGZvcm1hdCcsXFxuICAgICAgICAnZnItRlInOiAndW5rbm93biBzaXplJ1xcbiAgICB9LFxcbiAgICBhZGRUZXh0UHJvcGVydHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgYSB0ZXh0IHByb3BlcnR5JyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSB2YWxldXIgZGUgdHlwZSB0ZXh0ZSdcXG4gICAgfSxcXG4gICAgYWRkRmlsZVByb3BlcnR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgZmlsZSBwcm9wZXJ0eScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1biBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgZmlsZTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gZmljaGllciA6J1xcbiAgICB9LFxcbiAgICBkb3dubG9hZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rvd25sb2FkJyxcXG4gICAgICAgICdmci1GUic6ICdUw6lsw6ljaGFyZ2VyJ1xcbiAgICB9LFxcbiAgICB1cGxvYWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBsb2FkIGEgZmlsZScsXFxuICAgICAgICAnZnItRlInOiAnRW52b3llciB1biBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RlZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZSBzw6lsZWN0aW9ubsOpZSdcXG4gICAgfSxcXG4gICAgYWRkTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgYSBsYW5ndWFnZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICByZW1vdmVMYW5ndWFnZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVtb3ZlIHNlbGVjdGVkIGxhbmd1YWdlJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgbGEgbGFuZ3VlIHPDqWxlY3Rpb25uw6llJ1xcbiAgICB9LFxcbiAgICBjbG9zZUxhbmd1YWdlU2VsZWN0b3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDbG9zZSBsYW5ndWFnZSBzZWxlY3RvcicsXFxuICAgICAgICAnZnItRlInOiAnRmVybWVyIGxhIHPDqWxlY3Rpb24gZGUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICBzZWFyY2hMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCBsYW5ndWFnZS4uLicsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlciB1bmUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICBwYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUGFnZSdcXG4gICAgfSxcXG4gICAgb2Y6IHtcXG4gICAgICAgICdlbi1VUyc6ICdvZicsXFxuICAgICAgICAnZnItRlInOiAnc3VyJ1xcbiAgICB9LFxcbiAgICBwZGZMb2FkaW5nRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQREYgbG9hZGluZyBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyIGRlIGNoYXJnZW1lbnQgZHUgUERGJ1xcbiAgICB9LFxcbiAgICBub0ZpbGVDaG9zZW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBmaWxlIGNob3NlbicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gZmljaGllciBjaG9pc2knXFxuICAgIH0sXFxuICAgIGZpbGVVcGxvYWRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGUgdXBsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgdMOpbMOpY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgcHJldmlld0xvd2VyQ2FzZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3ByZXZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2FwZXLDp3UnXFxuICAgIH0sXFxuICAgIGZpbGVVcGxvYWRGYWlsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHVwbG9hZCBmYWlsZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY2hlYyBkdSB0w6lsw6ljaGFyZ2VtZW50IGR1IGZpY2hpZXInXFxuICAgIH0sXFxuICAgIHJlc3RhcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXN0YXJ0JyxcXG4gICAgICAgICdmci1GUic6ICdSZWTDqW1hcnJlcidcXG4gICAgfSxcXG4gICAgc2hvd1N0YXR1c0NvbnRyb2xzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyBzdGF0dXMgY29udHJvbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBjb250csO0bGVzIGRlIHN0YXR1dCdcXG4gICAgfSxcXG4gICAgaGlkZVN0YXR1c0NvbnRyb2xzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSGlkZSBzdGF0dXMgY29udHJvbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhY2hlciBsZXMgY29udHLDtGxlcyBkZSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIHJlZnJlc2hTdGF0dXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWZyZXNoIHN0YXR1cycsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgc3RhdHV0J1xcbiAgICB9LFxcbiAgICBydW5uaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVubmluZycsXFxuICAgICAgICAnZnItRlInOiAnRW4gY291cnMnXFxuICAgIH0sXFxuICAgIHN0b3BwZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdG9wcGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBcnLDqnTDqSdcXG4gICAgfSxcXG4gICAgc29ydEJ5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU29ydCBieScsXFxuICAgICAgICAnZnItRlInOiAnVHJpZXIgcGFyJ1xcbiAgICB9LFxcbiAgICBjcmVhdGVDaGlsZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZSBjaGlsZCcsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIGVuZmFudCdcXG4gICAgfSxcXG4gICAgdmFsaWRhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWYWxpZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgdHJlZVVwZGF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJRCcsXFxuICAgICAgICAnZnItRlInOiAnSUQnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXNLZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9wZXJ0aWVzIGtleShzKScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqShzKSBkZSBwcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIGludmFsaWRVbmlxdWVOb2RlTmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vZGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSBhbW9uZyBkaXJlY3QgY2hpbGRyZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG5vbSBkdSBub2V1ZCBkb2l0IMOqdHJlIHVuaXF1ZSBwYXJtaSBsZXMgZW5mYW50cyBkaXJlY3RzJ1xcbiAgICB9LFxcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZGl0aW9uYWwgcHJvcGVydGllcycsXFxuICAgICAgICAnZnItRlInOiAnUHJvcHJpw6l0w6lzIGFkZGl0aW9ubmVsbGVzJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RlZE5vZGVEZXRhaWxzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgbm9kZSBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscyBkdSBub2V1ZCBzw6lsZWN0aW9ubsOpJ1xcbiAgICB9LFxcbiAgICBleHBhbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBhbmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXBsaWVyJ1xcbiAgICB9LFxcbiAgICBjb2xsYXBzZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbGxhcHNlJyxcXG4gICAgICAgICdmci1GUic6ICdQbGllcidcXG4gICAgfSxcXG4gICAgdXNlckRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyIGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm9ybWF0aW9ucydcXG4gICAgfSxcXG4gICAgdmlld0J5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBieScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgcGFyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgdXNlcicsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1biB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgdXNlckVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBlbWFpbCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgZGUgbFxcXFwndXRpbHNhdGV1cidcXG4gICAgfSxcXG4gICAgc2VsZWN0VmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYSB2YWx1ZScsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1bmUgdmFsZXVyJ1xcbiAgICB9LFxcbiAgICBhZGRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciBkZXMgZmljaGllcnMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1Vc2Vyc0Rpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNhc3NvY2lhdGUgdGhlIHNlbGVjdGVkIHVzZXIocykgZnJvbSB0aGUgY3VycmVudCBpbnN0YW5jZT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGTDqXNhc3NvY2llciBsXFxcXCcobGVzKSB1dGlsaXNhdGV1cihzKSBzw6lsZWN0aW9ubsOpKHMpIGRlIGxcXFxcJ2luc3RhbmNlID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1Vc2Vyc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIHVzZXIocyk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbFxcXFwnKGxlcykgdXRpbGlzYXRldXIocykgc8OpbGVjdGlvbm7DqShzKSA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtUGVybXNldHNEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCBwZXJtaXNzaW9uIHNldChzKT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBsZShzKSBncm91cGUocykgZGUgcGVybWlzc2lvbnMgc8OpbGVjdGlvbm7DqShzKSA/J1xcbiAgICB9LFxcbiAgICBwZXJtc2V0c0RlbGV0ZVN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldChzKSBkZWxldGVkIScsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlKHMpIGRlIHBlcm1pc3Npb25zIHN1cHByaW3DqXMgISdcXG4gICAgfSxcXG4gICAgcGVybXNldHNEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAncGVybWlzc2lvbiBzZXQocykgbm90IGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2dyb3VwZShzKSBkZSBwZXJtaXNzaW9ucyBub24gc3VwcHJpbcOpKHMpJ1xcbiAgICB9LFxcbiAgICB1c2Vyc0RlbGV0ZVN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyKHMpIGRlbGV0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1cihzKSBzdXBwcmltw6kocykgISdcXG4gICAgfSxcXG4gICAgdXNlcnNEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAndXNlcihzKSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAndXRpbGlzYXRldXIocykgbm9uIHN1cHByaW3DqShzKSdcXG4gICAgfSxcXG4gICAgdXNlcnNEaXNhc3NvY2lhdGVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlcihzKSBkaXNhc3NvY2lhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIocykgZMOpc2Fzc29jacOpKHMpICEnXFxuICAgIH0sXFxuICAgIHVzZXJzRGlzYXNzb2NpYXRlRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3VzZXIocykgbm90IGRpc2Fzc29jaWF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3V0aWxpc2F0ZXVyKHMpIG5vbiBkw6lzYXNzb2Npw6kocyknXFxuICAgIH0sXFxuICAgIHJlY29yZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWNvcmRzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnRyw6llcydcXG4gICAgfSxcXG4gICAgbm9BdmFpbGFibGVUYWJsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyB0YWJsZXMgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIHRhYmxlIGRpc3BvbmlibGUuJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RUYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuZSB0YWJsZSdcXG4gICAgfSxcXG4gICAgZGVsZXRlVGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgdGhpcyB0YWJsZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIGNldHRlIHRhYmxlJ1xcbiAgICB9LFxcbiAgICBkZWxldGVBbGxSZWNvcmRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGFsbCByZWNvcmRzJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgdG91dCBsZSBjb250ZW51J1xcbiAgICB9LFxcbiAgICBleHBvcnRUb0V4Y2VsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IHRvIEV4Y2VsJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciB2ZXJzIEV4Y2VsJ1xcbiAgICB9LFxcbiAgICBpbXBvcnREYXRhOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0IGRhdGEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyIGRlcyBkb25uw6llcydcXG4gICAgfSxcXG4gICAgYWRkUmVjb3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgbmV3IHJlY29yZCcsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgZW50csOpZSdcXG4gICAgfSxcXG4gICAgdGFibGVOYW1lSW52YWxpZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhYmxlIG5hbWUgaXMgZW1wdHkgb3IgaW5jb3JyZWN0JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gZGUgbGEgdGFibGUgZXN0IHZpZGUgb3UgaW52YWxpZGUnXFxuICAgIH0sXFxuICAgIHRhYmxlRmllbGRzRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyB0YWJsZSBmaWVsZHMgYWRkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIGNoYW1wIHJlbnNlaWduw6knXFxuICAgIH0sXFxuICAgIHRhYmxlS2V5c0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8ga2V5IGZvdW5kIGZvciB0aGUgdGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBjbMOpIHJlbnNlaWduw6llJ1xcbiAgICB9LFxcbiAgICB0YWJsZUludmFsaWRWYWx1ZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlKHMpIHN1cHBsaWVkIGZvciB0aGUgdGFibGUgc3RydWN0dXJlJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIocykgaW52YWxpZGUocykgZm91cm5pZShzKSBwb3VyIGTDqWZpbmlyIGxhIHN0cnVjdHVyZSBkZSBsYSB0YWJsZSdcXG4gICAgfSxcXG4gICAgbm90aGluZ1RvU2F2ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vdGhpbmcgdG8gc2F2ZSBoZXJlIScsXFxuICAgICAgICAnZnItRlInOiAnUmllbiDDoCBlbnJlZ2lzdHJlciAhJ1xcbiAgICB9LFxcbiAgICBjb25maXJtUmVjb3JkRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXR0ZSBlbnRyw6llID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1BbGxSZWNvcmRzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBhbGwgcmVjb3JkcyBpbiB0aGlzIHRhYmxlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIHRvdXRlcyBsZXMgZG9ubsOpZXMgZGUgY2V0dGUgdGFibGUgPydcXG4gICAgfSxcXG4gICAgY29uZmlybURlbGV0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHRhYmxlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNldHRlIHRhYmxlID8nXFxuICAgIH0sXFxuICAgIGRvd25sb2FkV2lsbFN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIGRvd2xvYWQgd2lsbCBzdGFydCBhdXRvbWF0aWNhbGx5JyxcXG4gICAgICAgICdmci1GUic6ICdMZSB0w6lsw6ljaGFyZ2VtZW50IHZhIGTDqW1hcnJlciBhdXRvbWF0aXF1ZW1lbnQnXFxuICAgIH0sXFxuICAgIHJlY29yZHNQcm9jZXNzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd7bmJSZWNvcmRzfSByb3cocykgcHJvY2Vzc2VkLicsXFxuICAgICAgICAnZnItRlInOiAne25iUmVjb3Jkc30gZW5yZWdpc3RyZW1lbnQocykgdHJhaXTDqShzKS4nXFxuICAgIH0sXFxuICAgIG9rOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT0snLFxcbiAgICAgICAgJ2ZyLUZSJzogJ09LJ1xcbiAgICB9LFxcbiAgICBjb25maXJtQ2hhbmdlV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHZpZXcgYW5kIGxvb3NlIHRoZSBjaGFuZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnTGUgY29udGVudSBhIMOpdMOpIGNoYW5nw6kuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGNoYW5nZXIgZGUgdnVlIGV0IHBlcmRyZSBjZXMgY2hhbmdlbWVudHMgPydcXG4gICAgfSxcXG4gICAgY29uZmlybURlbGV0ZUl0ZW06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1SZWxvYWRXaXRob3V0U2F2aW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbG9hZCB0aGlzIGl0ZW0/JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBjb250ZW51IGEgw6l0w6kgY2hhbmfDqS4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVjaGFyZ2VyIGNldCDDqWzDqW1lbnQgPydcXG4gICAgfSxcXG4gICAgY29uZmlybVJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXByb2Nlc3MgdGhpcyBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVsYW5jZXIgY2V0IMOpbMOpbWVudCA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtU2F2ZUFuZFJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBoYXZlIG1hZGUgc29tZSBjaGFuZ2VzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc2F2ZSBBTkQgcmVwcm9jZXNzIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIGNvbnRlbnUgYSDDqXTDqSBjaGFuZ8OpLiDDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzYXV2ZWdhcmRlciBFVCByZWxhbmNlciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGl0ZW1SZXByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVwcm9jZXNzZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCByZWxhbmPDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlcHJvY2Vzc0ZhaWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCByZXByb2Nlc3NlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiByZWxhbmPDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSByZWxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IHJlY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbG9hZEZhaWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCByZWxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiByZWNoYXJnw6knXFxuICAgIH0sXFxuICAgIGl0ZW1TYXZlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gc2F2ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBlbnJlZ2lzdHLDqSdcXG4gICAgfSxcXG4gICAgaXRlbVNhdmVGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3Qgc2F2ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBub24gZW5yZWdpc3Ryw6knXFxuICAgIH0sXFxuICAgIGl0ZW1EZWxldGVGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiBzdXBwcmltw6knXFxuICAgIH0sXFxuICAgIHJlc2V0Q2hhbmdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc2V0IGNoYW5nZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXIgbGVzIGNoYW5nZW1lbnRzJ1xcbiAgICB9LFxcbiAgICBlcnJvck9jY3VyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbiBlcnJvciBvY2N1cmVkJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSdcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Db25maXJtVGV4dFN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvJyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pcidcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Db25maXJtVGV4dEVuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3RoaXMgd29yayBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnY2V0dGUgdMOiY2hlID8nXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybVRpdGxlTGFuZ3VhZ2VTc2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYW5ndWFnZSBzZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZSBkZXMgbGFuZ3VlcydcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVfYWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVfZWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZSBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnTWlzZSDDoCBqb3VyIGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1UaXRsZUZvcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZSBpbicsXFxuICAgICAgICAnZnItRlInOiAnRnJhbWUgZW4nXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybUhlbHBlckVtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmllbGQgbXVzdCBiZSBwcm92aWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnQ2UgY2hhbXAgZG9pdCDDqnRyZSByZW5zZWlnbsOpJ1xcbiAgICB9LFxcbiAgICBpZFVuaXF1ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgSUQgbXVzdCBiZSB1bmlxdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIElEIGRvaXQgw6p0cmUgdW5pcXVlJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1IZWxwZXJMYW5ndWFnZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGNhbiBzZWxlY3QgdGhlIGxhbmd1YWdlIHRvIGVkaXQgYW5kIHJlbW92ZSB0aGUgb25lIHlvdSBkb25cXFxcJ3Qgd2FudCBhbnltb3JlIGhlcmUuIFlvdSBtdXN0IGZpbGwgYXQgbGVhc3QgdGhlIEVOIGxhbmd1YWdlIHRvIGJlIGFibGUgdG8gc2F2ZSB5b3VyIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIHBvdXZleiBzw6lsZWN0aW9ubmVyIGxhIGxhbmd1ZSDDoCBlZGl0ZXIgZXQgc3VwcHJpbWVyIGNlbGxlcyBkb250IHZvdXMgblxcXFwnYXZleiBwbHVzIGJlc29pbiBpY2kuIFZvdXMgZGV2ZXogcmVuc2VpZ25lciBhdSBtb2lucyBsYSBsYW5ndWUgRU4gcG91ciBwb3V2b2lyIHNhdXZlZ2FyZGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtR3JpZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFuZ3VhZ2UgY2hvaWNlIChJU08gY29kZSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2l4IGRlIGxhIGxhbmd1ZSAoY29kZSBJU08pJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1HcmlkTGFuZ3VhZ2VzU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYW5ndWFnZXMgc2VsZWN0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZXMgc8OpbGVjdGlvbm7DqWVzJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJEYXRhTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFTicsXFxuICAgICAgICAnZnItRlInOiAnRlInXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlclRleHRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGZyYW1lIHRvIGRpc3BsYXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBmcmFtZSDDoCBhZmZpY2hlcidcXG4gICAgfSxcXG4gICAgZnJhbWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJhbWVzJyxcXG4gICAgICAgICdmci1GUic6ICdGcmFtZXMnXFxuICAgIH0sXFxuICAgIHVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VSTCcsXFxuICAgICAgICAnZnItRlInOiAnVVJMJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJCdXR0b25FZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlciBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgbGEgZnJhbWUnXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlckJ1dHRvblByZXZpZXc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmV2aWV3IGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBcGVyw6d1IGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICByZWZyZXNoRnJhbWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVmcmVzaCBmcmFtZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FjdHVhbGlzZXIgbGVzIGZyYW1lcydcXG4gICAgfSxcXG4gICAgYWRkRnJhbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgZnJhbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBjYW5jZWxGcmFtZUVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYW5jZWwgZnJhbWUgZWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnQW5udWxlciBsXFxcXCfDqWRpdGlvbiBkZSBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uQmFjazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHVybiB0byBIb21lIHBhZ2VzIGNvbmZpZ3VyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBwYWdlIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHBhZ2VzIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGRhdGFMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VOJyxcXG4gICAgICAgICdmci1GUic6ICdGUidcXG4gICAgfSxcXG4gICAgZnJhbWVwcmV2aWV3VGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZSBwcmV2aWV3JyxcXG4gICAgICAgICdmci1GUic6ICdBcGVyw6d1IGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZXByZXZpZXdUaXRsZVNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IHlvdXIgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb24gZGUgbGEgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICB1bmlxdWVJZFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSUQgbXVzdCBiZSB1bmlxdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xcXFxcJ0lEIGRvaXQgw6p0cmUgdW5pcXVlJ1xcbiAgICB9LFxcbiAgICBodHRwc1VybFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTXVzdCBiZSBhIHZhbGlkIEhUVFBTIFVSTCcsXFxuICAgICAgICAnZnItRlInOiAnVVJMIEhUVFBTIHZhbGlkZSByZXF1aXNlJ1xcbiAgICB9LFxcbiAgICBub01vZHVsZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gbW9kdWxlIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtb2R1bGUgc8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVIZWFkZXJMYXlvdXRUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpZ3VyZSBsYXlvdXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbmZpZ3VyYXRpb24gZGUgbGEgcHLDqXNlbnRhdGlvbidcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVNb2R1bGVzQXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBhdmFpbGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vZHVsZXMgZGlzcG9uaWJsZXMnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc1NlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnTW9kdWxlcyBzw6lsZWN0aW9ubsOpcydcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVCdXR0b25Db25maWd1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOpdHJhZ2UgZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvbkRlZmF1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXN0b3JlIGRlZmF1bHQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmUgcGFyIGTDqWZhdXQnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lQnV0dG9uU2VsZWN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IG1vZHVsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2l4IGRlcyBtb2R1bGVzJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvbkJhY2s6IHtcXG4gICAgICAgICdlbi1VUyc6ICdCYWNrIHRvIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUmV0b3VyIMOgIGxhIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVTZWxlY3RlZEVtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRpZG5cXFxcJ3Qgc2VsZWN0IGFueSBtb2R1bGVzJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogc8OpbGVjdGlvbm7DqSBhdWN1biBtb2R1bGUnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc0VtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gbW9kdWxlcyBhdmFpbGFibGUgaW4gdGhpcyBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtb2R1bGUgZGlzcG9uaWJsZSBkYW5zIGNldHRlIGNvbmZpZ3VyYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVQYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdQYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVOYXZpZ2F0ZURlZmF1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgSG9tZSBwYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJhdGlvbiBkZXMgcGFnZXMgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZU5hdmlnYXRlT3duOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3VzdG9taXplIHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdDb25maWd1cmVyIGNldHRlIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZVN0YXR1c0VtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRvblxcXFwndCBoYXZlIGFueSBtb2R1bGVzIHRvIGRpc3BsYXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgblxcXFwnYXZleiBhdWN1biBtb2R1bGUgw6AgYWZmaWNoZXInXFxuICAgIH0sXFxuICAgIGhvbWVTZWxlY3ROb25lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IHlvdXIgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdDaG9pc2lzc2V6IHZvdHJlIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0hlYWRlckF2YWlsYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vZHVsZXMgYXZhaWxhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIGRpc3BvbmlibGVzJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzSGVhZGVyU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNb2R1bGVzIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIHPDqWxlY3Rpb25uw6lzJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzSGVhZGVyQ29uZmlndXJhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpZ3VyZWQgSG9tZSBwYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnUGFnZXMgZFxcXFwnYWNjdWVpbCBjb25maWd1cmFibGVzJ1xcbiAgICB9LFxcbiAgICB0eXBlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0VkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2RpZmllciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NEdXBsaWNhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEdXBsaWNhdGUgdGhpcyBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0R1cGxpcXVlciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgdGhpcyBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NDb25maWd1cmVsYXlvdXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdQZXJzb25hbGlzYXRpb24gZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzU2F2ZXNlbGVjdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgeW91ciBzZWxlY3Rpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1NhdXZlZ2FyZGVyIHZvdHJlIHPDqWxlY3Rpb24nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NBZGREZWZhdWx0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzQnV0dG9uQmFjazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2sgdG8gSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzRnJhbWVzcGFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZyYW1lcyBtYW5hZ2VyJyxcXG4gICAgICAgICdmci1GUic6ICdHZXN0aW9ubmFpcmUgZGVzIEZyYW1lcydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc1RleHRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGlzIG5vIG1vZHVsZXMgYXZhaWxhYmxlIGluIHlvdXIgY3VycmVudCBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdJbCBuXFxcXCd5IGEgYXVjdW4gbW9kdWxlcyBkaXNwb25pYmxlcyBwb3VyIGNldHRlIGNvbmZpZ3VyYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NTZWxlY3REZWZhdWx0dmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgaG9tZScsXFxuICAgICAgICAnZnItRlInOiAnQ2hvaXNpc3NleiBsYSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NNb2RhbERlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSBhYm91dCBkZWxldGluZyB0aGlzIHNldHRpbmcgPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNldHRlIGNvbmZpZ3VyYXRpb24gPydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0Vycm9ySW5Vc2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBge25hbWV9YGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgY29uZmlndXJhdGlvbiwgY2hvb3NlIGFub3RoZXIgb25lIHBsZWFzZScsXFxuICAgICAgICAnZnItRlInOiAnTGUgbm9tIGB7bmFtZX1gIGVzdCBkw6lqw6AgdXRpbGlzw6kgcG91ciB1bmUgYXV0cmUgY29uZmlndXJhdGlvbiwgdmV1aWxsZXogZW4gY2hvaXNpciB1biBhdXRyZSdcXG4gICAgfSxcXG4gICAgYXBwTG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwIGxvYWRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FwcCBsYW5jw6llICEnXFxuICAgIH0sXFxuICAgIGludmFsaWRQYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgcGFzc3dvcmQgbXVzdCBiZSA4IHRvIDMyIGNoYXJhY3RlcnMgbG9uZyBhbmQgY29udGFpbnMgYXQgbGVhc3QgMSB1cHBlci9sb3dlciBjYXNlIGxldHRlciBhbmQgMSBudW1iZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG1vdCBkZSBwYXNzZSBkb2l0IGNvbnRlbmlyIGVudHJlIDggZXQgMzIgY2FyYWN0w6hyZXMgZXQgYXUgbW9pbnMgMSBtYWp1c2N1bGUvbWludXNjdWxlIGV0IDEgY2hpZmZyZSdcXG4gICAgfSxcXG4gICAgY2FyZFRlbXBsYXRlRnVsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgYXJlYSBjYW5ub3QgY29udGFpbiBtb3JlIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdDZXQgem9uZSBuZSBwZXV0IHBhcyBjb250ZW5pciBwbHVzIGRcXFxcJ8OpbMOpbWVudHMnXFxuICAgIH0sXFxuICAgIGludmFsaWRDb2xvckNvZGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb2xvciBjb2RlIGlzIGludmFsaWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvZGUgY291bGV1ciBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgbWFuZGF0b3J5VmFsdWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWFuZGF0b3J5IHZhbHVlKHMpOicsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyKHMpIG9ibGlnYXRvaXJlKHMpIDonXFxuICAgIH0sXFxuICAgIHBhc3N3b3JkVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bhc3N3b3JkIHVwZGF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vdCBkZSBwYXNzZSBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBkZXRhaWxzVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RldGFpbHMgdXBkYXRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXRhaWxzIG1pcyDDoCBqb3VyICEnXFxuICAgIH0sXFxuICAgIHNldHRpbmdzVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NldHRpbmdzIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOodHJlcyBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBhdmF0YXJVcGRhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXZhdGFyIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdBdmF0YXIgbWlzIMOgIGpvdXIgISdcXG4gICAgfSxcXG4gICAgdXNlckFzc29jaWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyIHN1Y2Nlc3NmdWxseSBhc3NvY2lhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIgYXNzb2Npw6kgYXZlYyBzdWNjw6hzICEnXFxuICAgIH0sXFxuICAgIHVzZXJBc3NvY2lhdGVSZXNlbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbWFpbCBzZW50JyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBlbnZvecOpICEnXFxuICAgIH0sXFxuICAgIHVzZXJEaXNhc3NvY2lhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBkaXNhc3NvY2lhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1ciBkw6lzYXNzb2Npw6knXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VEZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZShzKSBkZWxldGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlKHMpIHN1cHByaW3DqXMnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VSZXByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbnQgbWVzc2FnZShzKSBmb3IgcmVwcm9jZXNzaW5nJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlKHMpIMOgIHJlbGFuY2VyIGVudm95w6lzJ1xcbiAgICB9LFxcbiAgICB1c2VyQWxyZWFkeUV4aXN0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSB1c2VyIHlvdSB3YW50IHRvIGFzc29jaWF0ZSB0byB0aGlzIGluc3RhbmNlIGFscmVhZHkgZXhpc3RzIG9uIHRoZSBzeXN0ZW0gKGFuZCBtYXliZSBhbHJlYWR5IGFzc29jaWF0ZWQgdG8gb3RoZXIgaW5zdGFuY2VzKS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xcXFxcJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHZvdWxleiBhc3NvY2llciBzdXIgY2V0dGUgaW5zdGFuY2UgZXhpc3RlIGTDqWrDoCBzdXIgbGUgc3lzdMOobWUuIElsIGVzdCBwZXV0IMOqdHJlIMOpZ2FsZW1lbnQgZMOpasOgIGFzc29jacOpIMOgIGRcXFxcJ2F1dHJlcyBpbnN0YW5jZXMuJ1xcbiAgICB9LFxcbiAgICB1bmV4cGVjdGVkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQuIFBsZWFzZSB0cnkgYWdhaW4uJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZS4gTWVyY2kgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHJlZ2lzdHJhdGlvblVuYXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVnaXN0cmF0aW9uIGlzIG5vdCBhdmFpbGFibGUuJyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXOKAmWVucmVnaXN0cmVtZW50IG5cXFxcJ2VzdCBwYXMgZGlzcG9uaWJsZS4nXFxuICAgIH0sXFxuICAgIGZvcmdvdFBhc3N3b3JkVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnUsOpaW5pdGlhbGlzZXIgbW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICBmb3Jnb3RQYXNzd29yZE1lc3NhZ2VTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2VcXFxcJ3ZlIHNlbnQgeW91IGFuIGVtYWlsLiBDbGljayB0aGUgbGluayBpbiB0aGUgZW1haWwgdG8gcmVzZXQgeW91ciBwYXNzd29yZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vdXMgdm91cyBhdm9ucyBlbnZvecOpIHVuIGVtYWlsLiBDbGlxdWV6IHN1ciBsZSBsaWVuIGRhbnMgbFxcXFwnZW1haWwgcG91ciByw6lpbml0aWFsaXNlciB2b3RyZSBtb3QgZGUgcGFzc2UuJ1xcbiAgICB9LFxcbiAgICBydW5uaW5nSm9iczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1bm5pbmcgam9icycsXFxuICAgICAgICAnZnItRlInOiAnVMOiY2hlcyBlbiBjb3VycydcXG4gICAgfSxcXG4gICAgbm9SdW5uaW5nSm9iOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gcnVubmluZyBqb2InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSB0w6JjaGUgZW4gY291cnMnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpb3JpdHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ByaW9yaXTDqSdcXG4gICAgfSxcXG4gICAgY3JlYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6nDqSBsZSdcXG4gICAgfSxcXG4gICAgbGFzdFN0YXR1c01vZGlmaWNhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3Qgc3RhdHVzIG1vZGlmaWNhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBkdSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIHN0YWNrdHJhY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGFja3RyYWNlJyxcXG4gICAgICAgICdmci1GUic6ICdTdGFja3RyYWNlJ1xcbiAgICB9LFxcbiAgICBmaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVycydcXG4gICAgfSxcXG4gICAgdmlld0xhc3RNZXNzYWdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcgbGFzdCBtZXNzYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZGVybmllcnMgbWVzc2FnZXMnXFxuICAgIH0sXFxuICAgIHZpZXdTdGFja3RyYWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBzdGFja3RyYWNlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxhIHN0YWNrdHJhY2UnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5SGlnaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZ2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0hhdXRlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eU1lZGl1bToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lZGl1bScsXFxuICAgICAgICAnZnItRlInOiAnTW95ZW5uZSdcXG4gICAgfSxcXG4gICAgcHJpb3JpdHlMb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMb3cnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Jhc3NlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eVZlcnlMb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWZXJ5IGxvdycsXFxuICAgICAgICAnZnItRlInOiAnVHLDqHMgYmFzc2UnXFxuICAgIH0sXFxuICAgIGpvYlN0YXR1c0NvbXBsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29tcGxldGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlcm1pbsOpJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNRdWV1ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdRdWV1ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VuIGF0dGVudGUnXFxuICAgIH0sXFxuICAgIGpvYlN0YXR1c0luRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbiBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNSdW5uaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVubmluZycsXFxuICAgICAgICAnZnItRlInOiAnRW4gY291cnMnXFxuICAgIH0sXFxuICAgIG1hcmtBc1JlYWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYXJrIGFzIHJlYWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01hcnF1ZXIgY29tbWUgbHUnXFxuICAgIH0sXFxuICAgIGNhbmNlbEpvYkNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2FuY2VsIHRoaXMgam9iPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgYW5udWxlciBjZXR0ZSB0w6JjaGUgPydcXG4gICAgfSxcXG4gICAgcGFzc3dvcmRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB5b3VyIHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICByZW1lbWJlck1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnS2VlcCBtZSBzaWduZWQgaW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dhcmRlciBtYSBjb25uZXhpb24nXFxuICAgIH0sXFxuICAgIGZvcmdvdFBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRm9yZ290IHBhc3N3b3JkPycsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlIG91Ymxpw6kgPydcXG4gICAgfSxcXG4gICAgbm90UmVnaXN0ZXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vdCBhbHJlYWR5IHJlZ2lzdGVyZWQ/JyxcXG4gICAgICAgICdmci1GUic6ICdQYXMgZW5jb3JlIGVucmVnaXN0csOpKGUpID8nXFxuICAgIH0sXFxuICAgIGludmFsaWRMb2dpblVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgbG9naW4gVVJMIScsXFxuICAgICAgICAnZnItRlInOiAnVVJMIGRlIGxvZ2luIGludmFsaWRlICEnXFxuICAgIH0sXFxuICAgIHVzZXJBbHJlYWR5UmVnaXN0ZXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgdXNlciBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyIGTDqWrDoCBlbnJlZ2lzdHLDqSdcXG4gICAgfSxcXG4gICAgdXNlckFscmVhZHlSZWdpc3RlcmVkVGVzdFByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgb24gdGVzdCBvciBwcm9kdWN0aW9uIGVudmlyb25tZW50JyxcXG4gICAgICAgICdmci1GUic6ICcgc3VyIHVuIGRlcyBlbnZpcm9ubmVtZW50cyAodGVzdCBvdSBwcm9kdWN0aW9uKSdcXG4gICAgfSxcXG4gICAgc2VsZWN0RW52aXJvbm1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgZW52aXJvbm1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgZW52aXJvbm5lbWVudCdcXG4gICAgfSxcXG4gICAgdGVzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Rlc3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlc3QnXFxuICAgIH0sXFxuICAgIHByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9kdWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9kdWN0aW9uJ1xcbiAgICB9LFxcbiAgICB0ZXN0QW5kUHJvZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Rlc3QgJiBQcm9kdWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0ICYgUHJvZHVjdGlvbidcXG4gICAgfSxcXG4gICAgZW52RXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugc2VsZWN0IHRoZSByZWdpc3RyYXRpb24gZW52aXJvbm1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHPDqWxlY3Rpb25uZXIgc3VyIHF1ZWwgZW52aXJvbm5lbWVudCB2b3VzIHNvdWhhaXRleiB2b3VzIGVucmVnaXN0cmVyJ1xcbiAgICB9LFxcbiAgICBsb2dvdXRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9nZ2luZyBvdXQuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWNvbm5leGlvbi4uLidcXG4gICAgfSxcXG4gICAgbG9nb3V0U3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBoYXZlIGJlZW4gc2lnbmVkIG91dCcsXFxuICAgICAgICAnZnItRlInOiAnVm91cyDDqnRlcyBtYWludGVuYW50IGTDqWNvbm5lY3TDqSdcXG4gICAgfSxcXG4gICAgbG9nb3V0QnV0dG9uTG9naW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdHbyB0byBzaWduIGluIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FsbGVyIMOgIGxhIHBhZ2UgZGUgY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBzZXJ2ZXJDb25uZXhpb25GYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ291bGQgbm90IGNvbm5lY3QgdG8gdGhlIHNlcnZlciBmb3IgaW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb2Jsw6htZSBsb3JzIGRlIGxhIGNvbm5leGlvbiBzZXJ2ZXVyIHBvdXIgbFxcXFwnaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIHN0YWxlTG9naW5TZXNzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBsb2dpbiBzZXNzaW9uIGlzIGV4cGlyZWQuIFBsZWFzZSB3YWl0LCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVmcmVzaGVkIGluIDUgc2Vjb25kcy4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgc2Vzc2lvbiBkZSBjb25uZXhpb24gYSBleHBpcsOpLiBNZXJjaSBkZSBwYXRpZW50ZXIsIGNlbGxlLWNpIHNlcmEgYXV0b21hdGlxdWVtZW50IGFjdHVhbGlzw6llIGRhbnMgNSBzZWNvbmRlcy4uLidcXG4gICAgfSxcXG4gICAgd3JvbmdVc2VybmFtZVBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsIGV0L291IG1vdCBkZSBwYXNzZSBpbnZhbGlkZSAhJ1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYWJsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIHVzZXIgYWNjb3VudCBpcyBkaXNhYmxlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIGNvbXB0ZSB1dGlsaXNhdGV1ciBlc3QgZMOpc2FjdGl2w6kgISdcXG4gICAgfSxcXG4gICAgbWVtYmVyc2hpcEVleHBpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBjb21wYW55IE1lbWJlcnNoaXAgZXhwaXJlZCBvbiA8c3Ryb25nPntleHBpcnlEYXRlfTwvc3Ryb25nPi4gUGxlYXNlIGFzayB5b3VyIGNvbXBhbnnigJlzIENvbW11bml0eSBhZG1pbmlzdHJhdG9yPHN0cm9uZz57YWRtaW5Db250YWN0fTwvc3Ryb25nPiB0byByZW5ldyB0aGUgTWVtYmVyc2hpcC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIGFib25uZW1lbnQgYSBleHBpcsOpIGxlIDxzdHJvbmc+e2V4cGlyeURhdGV9PC9zdHJvbmc+LiBNZXJjaSBkZSBjb250YWN0ZXIgdm90cmUgYWRtaW5pc3RyYXRldXI8c3Ryb25nPnthZG1pbkNvbnRhY3R9PC9zdHJvbmc+IHBvdXIgcmVub3V2ZWxlciBsZSBzZXJ2aWNlLidcXG4gICAgfSxcXG4gICAgdW5zdWJzY3JpYmVGYWlsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb3VsZCBub3QgdW5zdWJzY3JpYmUgdGhpcyBhY2NvdW50IGZyb20gdGhpcyBpbnN0YW5jZS9jb21tdW5pdHkuJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9ibMOobWUgbG9ycyBkZSBsYSBkw6lzYXNzb2NpYXRpb24gZGUgY2UgY29tcHRlIHN1ciBjZXR0ZSBpbnN0YW5jZS9jb21tdW5hdXTDqS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkQjJhdXRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIEltcG9zc2libGUgdW5zdWJzY3JpcHRpb246IHRoZXJlIGlzIG5vIHN1YnNjcmlwdGlvbiBvbiBpbnN0YW5jZSAoKikuJyxcXG4gICAgICAgICdmci1GUic6ICcgSW1wb3NzaWJsZSBkZSBzZSBkw6lzaW5zY3JpcmU6IGlsIG5cXFxcJ3kgYSBwYXMgZFxcXFwnaW5zY3JpcHRpb24gcG9zc2libGUgc3VyIGxcXFxcJ2luc3RhbmNlICgqKS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkSW5zdGFuY2VOb3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJyBDb3VsZCBub3QgZmluZCBzZWxlY3RlZCBpbnN0YW5jZSBkZWZpbml0aW9uLiBQbGVhc2UgcmVsb2FkIHRoZSBwYWdlIGFuZCByZXRyeS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJyBJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGVzIHByb3ByacOpdMOpcyBkZSBsXFxcXCdpbnN0YW5jZSBzw6lsZWN0aW9ubsOpZS4gTWVyY2kgZGUgcmVjaGFyZ2VyIGxhIHBhZ2UgZXQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkTm9CYXNlVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIEludmFsaWQgYmFzZVVybCBmb3VuZCBmb3IgdGhlIGN1cnJlbnQgaW5zdGFuY2UuJyxcXG4gICAgICAgICdmci1GUic6ICcgVVJMIGRlIGxcXFxcJ2luc3RhbmNlIHPDqWxlY3Rpb25uw6llIGludmFsaWRlLidcXG4gICAgfSxcXG4gICAgdXNlck5vdEFzc29jaWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgVXNlciBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdGFuY2UuJyxcXG4gICAgICAgICdmci1GUic6ICcgVXRpbGlzYXRldXIgbm9uIGFzc29jacOpIMOgIGNldHRlIGluc3RhbmNlLidcXG4gICAgfSxcXG4gICAgdW5zdWJzY3JpYmVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBzdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIGZyb20gY29tbXVuaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZMOpc2Fzc29jacOpIGRlIGNldHRlIGluc3RhbmNlLidcXG4gICAgfSxcXG4gICAgbm9QZXJtaXNzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRvblxcXFwndCBoYXZlIGFjY2VzcyB0byBhbnkgaW5zdGFuY2UhIFBsZWFzZSBjaGVjayB5b3VyIGFjY291bnQgc2V0dGluZ3Mgd2l0aCB5b3VyIGFkbWluaXN0cmF0b3IuJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYXVjdW4gZHJvaXQgZW5yZWdpc3Ryw6kuIE1lcmNpIGRlIHbDqXJpZmllciBsZSBwYXJhbcOpdHJhZ2UgZGUgdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyIGF2ZWMgdm90cmUgYWRtaW5pc3RyYXRldXIuJ1xcbiAgICB9LFxcbiAgICBuZXdWZXJzaW9uQXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIHBvcnRhbCBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIGEgbmV3IHZlcnNpb24uIFBsZWFzZSBzYXZlIHlvdXIgY3VycmVudCB3b3JrLCB0aGUgdXBkYXRlIHdpbGwgYmUgZG9uZSBhdXRvbWF0aWNhbGx5IGluIDkwIHNlY29uZHMuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIHBvcnRhaWwgZG9pdCDDqnRyZSBtaXMgw6Agam91ciB2ZXJzIHVuIG5vdXZlbGxlIHZlcnNpb24uIE1lcmNpIGRlIHNhdXZlZ2FyZGVyIHZvcyB0cmF2YXV4IGVuIGNvdXJzLCBsYSBtaXNlIMOgIGpvdXIgc2UgZmVyYSBhdXRvbWF0aXF1ZW1lbnQgZGFucyA5MCBzZWNvbmRlcy4uLidcXG4gICAgfSxcXG4gICAgdXBkYXRlTm93OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBkYXRlIG5vdyEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01ldHRyZSDDoCBqb3VyIG1haW50ZW5hbnQgISdcXG4gICAgfSxcXG4gICAgbm90Rm91bmRUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc291cmNlIG5vdCBmb3VuZCcsXFxuICAgICAgICAnZnItRlInOiAnUmVzc291cmNlIGludHJvdXZhYmxlJ1xcbiAgICB9LFxcbiAgICBub3RGb3VuZE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgcmVxdWVzdGVkIHJlc291cmNlIHdhcyBub3QgZm91bmQuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSByZXNzb3VyY2UgZGVtYW5kw6llIGVzdCBpbnRyb3V2YWJsZS4nXFxuICAgIH0sXFxuICAgIHNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2V0dGluZ3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmVzJ1xcbiAgICB9LFxcbiAgICBvdGhlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPdGhlcnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1dHJlcydcXG4gICAgfSxcXG4gICAgZGV2ZWxvcG1lbnRUb29sczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RldmVsb3BtZW50IHRvb2xzJyxcXG4gICAgICAgICdmci1GUic6ICdPdXRpbHMgZGUgZMOpdmVsb3BwZW1lbnQnXFxuICAgIH0sXFxuICAgIGNvZGVFZGl0b3JDb25maWd1cmF0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29kZSBlZGl0b3IgY29uZmlndXJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJhdGlvbiBkZXMgw6lkaXRldXJzIGRlIGNvZGUnXFxuICAgIH0sXFxuICAgIG5ld1Bhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTmV3IHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdOb3V2ZWF1IG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgY29uZmlybVBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29uZmlybSBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlybWVyIG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcmVmcmVzaFBlcm1pc3Npb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPGRpdj5SZWZyZXNoPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+UmFmcmFcXFxcdTAwRUVjaGlyPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiXFxuICAgIH0sXFxuICAgIGN0eVVuc3Vic2NyaWJlOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPGRpdj5VbnN1YnNjcmliZSBmcm9tPGJyIC8+dGhpcyBDb21tdW5pdHk8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+TWUgZFxcXFx1MDBFOXNpbnNjcmlyZTxiciAvPmRlIGNldHRlIENvbW11bmF1dFxcXFx1MDBFOTwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgZGVsZXRlQWNjb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+RGVsZXRlPGJyIC8+bXkgYWNjb3VudDwvZGl2PlxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiPGRpdj5TdXBwcmltZXIgbW9uPGJyIC8+Y29tcHRlIHV0aWxpc2F0ZXVyPC9kaXY+XFxcIlxcbiAgICB9LFxcbiAgICBleHBvcnRQZXJtaXNzaW9uczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+RXhwb3J0PGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+RXhwb3J0ZXI8YnIgLz5wZXJtaXNzaW9uczwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgbWVzc2FnZXNBdXRvcmVmcmVzaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F1dG8tcmVmcmVzaCBtZXNzYWdlcyBsaXN0IGRlbGF5JyxcXG4gICAgICAgICdmci1GUic6ICdEw6lsYWkgZGUgcmFmcmHDrmNoaXNzZW1lbnQgZGUgbGEgbGlzdGUgZGVzIG1lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICBkaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ2Rpc2FibGVkJyxcXG4gICAgICAgICdmci1GUic6ICdkw6lzYWN0aXbDqSdcXG4gICAgfSxcXG4gICAgcHJlZmVycmVkTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmVmZXJyZWQgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZSBwcsOpZsOpcsOpZSdcXG4gICAgfSxcXG4gICAgdXNlckRlbGV0ZUFjY291bnRDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPHA+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB5b3UgYWNjb3VudD88L3A+XFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCI8cD5cXFxcdTAwQ0F0ZXMtdm91cyBzXFxcXHUwMEZCcihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIgPzwvcD5cXFwiXFxuICAgIH0sXFxuICAgIHVzZXJEZWxldGVBY2NvdW50Q29uZmlybVN1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxwPlxcXFxuICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XFxcXFxcXCJkYW5nZXItY29sb3IgYm90dG9tLW1hcmdpbiB0ZXh0LXh4bGFyZ2VcXFxcXFxcIj5XQVJOSU5HPC9oMz5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5BcmUgeW91IDxzdHJvbmc+UkVBTExZPC9zdHJvbmc+IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHlvdSBhY2NvdW50PyBZb3Ugd29uJ3QgYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHBvcnRhbCBhbnltb3JlLi4uPC9zcGFuPlxcXFxuICAgICAgICAgICAgPC9wPlxcXFxuICAgICAgICBcXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIlxcXFxuICAgICAgICAgICAgPHA+XFxcXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cXFxcXFxcImRhbmdlci1jb2xvciBib3R0b20tbWFyZ2luIHRleHQteHhsYXJnZVxcXFxcXFwiPkFUVEVOVElPTjwvaDM+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+XFxcXHUwMENBdGVzLXZvdXMgPHN0cm9uZz5WUkFJTUVOVDwvc3Ryb25nPiBzXFxcXHUwMEZCcihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIgPyBWb3VzIG5lIHBvdXJyZXogcGx1cyBhY2NcXFxcdTAwRTlkZXIgYXUgcG9ydGFpbC4uLjwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvcD5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICB1c2VyVW5zdWJzY3JpYmVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBjb21tdW5pdHk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgdm90cmUgY29tcHRlIGluc2NyaXB0aW9uIMOgIGNldHRlIGNvbW11bmF1dMOpID8nXFxuICAgIH0sXFxuICAgIHNldHBhc3N3b3JkVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXQgYSBuZXcgcGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6llciB1biBub3V2ZWF1IG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcGFzc3dvcmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICBzaWduSW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaWduIGluJyxcXG4gICAgICAgICdmci1GUic6ICdTZSBjb25uZWN0ZXInXFxuICAgIH0sXFxuICAgIHNldHBhc3N3b3JkU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgcGFzc3dvcmQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNldC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIG1vdCBkZSBwYXNzZSBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkUGFzc3dvcmRDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFzc3dvcmRzIGFyZSBub3QgaWRlbnRpY2FsJyxcXG4gICAgICAgICdmci1GUic6ICdMZXMgMiBtb3RzIGRlIHBhc3NlIG5lIHNvbnQgcGFzIGlkZW50aXF1ZXMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1NdWx0aXBsZU1lc3NhZ2VzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgbWVzc2FnZXM/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1NdWx0aXBsZVJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXByb2Nlc3MgdGhlIHNlbGVjdGVkIG1lc3NhZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVsYW5jZXIgbGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzID8nXFxuICAgIH0sXFxuICAgIG11bHRpcGxlUmVwcm9jZXNzU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lc3NhZ2VzIHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlcyByZWxhbmPDqXMnXFxuICAgIH0sXFxuICAgIG11bHRpcGxlUmVwcm9jZXNzRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ21lc3NhZ2Uocykgbm90IHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICdtZXNzYWdlKHMpIG5vbiByZWxhbmPDqShzKSdcXG4gICAgfSxcXG4gICAgZmV0Y2htc2dGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZSBjYW5ub3QgYmUgbG9hZGVkJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtZXNzYWdlIG5lIHBldXQgw6p0cmUgY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgbWVzc2FnZXNEZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZXMgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVzc2FnZXMgc3VwcHJpbcOpcydcXG4gICAgfSxcXG4gICAgbWVzc2FnZVNhdmVEaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+RG8geW91IHdhbnQgdG8gc2F2ZSB5b3VyIG1vZGlmaWNhdGlvbnM/PC9zcGFuPjxici8+XFxcXG4gICAgICAgICAgICAgICAgPGVtIGNsYXNzPVxcXFxcXFwidGV4dC1tZWRpdW1cXFxcXFxcIj5Zb3VyIHByZWZlcmVuY2VzIChwcmVzZW5jZSwgd2lkdGggYW5kIG9yZGVyIG9mIGNvbHVtbnMsIGFjdGlvbiByZWxhdGVkIHRvIFxcXFx1MjAxQ1NlYXJjaFxcXFx1MjAxRCBhbmQgXFxcXHUyMDFDUmVzZXRcXFxcdTIwMUQgYnV0dG9ucy4uLikgd2lsbCBiZSBzYXZlZCBpbiB5b3VyIHVzZXIgcHJvZmlsZS4gTm90ZSB0aGF0IHlvdSBjYW4gc2F2ZSBzcGVjaWZpYyBzZXR0aW5ncyBmb3IgZWFjaCBkaXNwbGF5IG1vZGUgKG1vYmlsZSwgbWVkaXVtIGFuZCBsYXJnZSBzY3JlZW4pLjwvZW0+XFxcXG4gICAgICAgICAgICA8L2Rpdj5cXFxcbiAgICAgICAgXFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+Vm91bGV6LXZvdXMgc2F1dmVnYXJkZXIgdm9zIG1vZGlmaWNhdGlvbnMgPzwvc3Bhbj48YnIvPlxcXFxuICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cXFxcXFxcInRleHQtbWVkaXVtXFxcXFxcXCI+Vm9zIHByXFxcXHUwMEU5ZlxcXFx1MDBFOXJlbmNlcyBkJ2FmZmljaGFnZSAocHJcXFxcdTAwRTlzZW5jZSwgbGFyZ2V1ciBldCBvcmRyZSBkZXMgY29sb25uZXMsIGFjdGlvbiBkZXMgYm91dG9ucyBcXFxcdTIwMUNSZWNoZXJjaGVyXFxcXHUyMDFEIGV0IFxcXFx1MjAxQ1JcXFxcdTAwRTlpbml0aWFsaXNlclxcXFx1MjAxRC4uLikgc2Vyb250IGVucmVnaXN0clxcXFx1MDBFOWVzIGRhbnMgdm90cmUgcHJvZmlsIHV0aWxpc2F0ZXVyLiBWb3VzIHBvdXZleiBzYXV2ZWdhcmRlciBkZXMgcGFyYW1cXFxcdTAwRTh0cmVzIHNwXFxcXHUwMEU5Y2lmaXF1ZXMgcG91ciBjaGFxdWUgbW9kZSBkJ2FmZmljaGFnZSAobW9iaWxlLCBtb3llbiBldCBncmFuZCBcXFxcdTAwRTljcmFuKS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCJcXG4gICAgfSxcXG4gICAgbXVsdGlwbGVEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnbWVzc2FnZShzKSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnbWVzc2FnZShzKSBub24gc3VwcHJpbcOpcydcXG4gICAgfSxcXG4gICAgZmV0Y2hkb2NGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRG9jdW1lbnQgY2Fubm90IGJlIGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGUgZG9jdW1lbnQgbmUgcGV1dCDDqnRyZSBjaGFyZ8OpJ1xcbiAgICB9LFxcbiAgICBjb25maXJtQ2xvc2VNZXNzYWdlU3VibWl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIHRoaXMgbWVzc2FnZSBzdWJtaXNzaW9uIHNlc3Npb24/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciB0ZXJtaW5lciBjZXR0ZSBzZXNzaW9uIGRlIGNyw6lhdGlvbiBkZSBtZXNzYWdlID8nXFxuICAgIH0sXFxuICAgIG5vVmlld0FjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhY2Nlc3MgdG8gYW55IHZpZXcgb24gdGhpcyBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYWNjw6hzIMOgIGF1Y3VuZSB2dWUgc3VyIGNldHRlIHBhZ2UnXFxuICAgIH0sXFxuICAgIG5vUmVzdWx0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlc3VsdHMgZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIHLDqXN1bHRhdCdcXG4gICAgfSxcXG4gICAgcmVmcmVzaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZnJlc2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhZnJhw65jaGlyJ1xcbiAgICB9LFxcbiAgICByZXByb2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXByb2Nlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbGFuY2VyJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZU1zZ1JlcHJvY2Vzc0ltcG9zc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmUgb3IgbW9yZSBvZiB0aGUgc2VsZWN0ZWQgbWVzc2FnZXMgY2Fubm90IGJlIHJlcHJvY2Vzc2VkLiBQbGVhc2UgY2hlY2sgeW91ciBzZWxlY3Rpb24gYW5kIHJldHJ5IScsXFxuICAgICAgICAnZnItRlInOiAnVW4gb3UgcGx1c2lldXJzIGRlcyBtZXNzYWdlcyBzw6lsZWN0aW9ubsOpcyBuZSBwZXV2ZW50IHBhcyDDqnRyZSByZWxhbmPDqXMuIE1lcmNpIGRlIHZlcmlmaWVyIHZvdHJlIHPDqWxlY3Rpb24gZXQgZGUgcsOpZXNzYXllciAhJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZU1zZ0RlbGV0ZUltcG9zc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmUgb3IgbW9yZSBvZiB0aGUgc2VsZWN0ZWQgbWVzc2FnZXMgY2Fubm90IGJlIGRlbGV0ZWQuIFBsZWFzZSBjaGVjayB5b3VyIHNlbGVjdGlvbiBhbmQgcmV0cnkhJyxcXG4gICAgICAgICdmci1GUic6ICdVbiBvdSBwbHVzaWV1cnMgZGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzIG5lIHBldXZlbnQgcGFzIMOqdHJlIHN1cHByaW3DqXMuIE1lcmNpIGRlIHZlcmlmaWVyIHZvdHJlIHPDqWxlY3Rpb24gZXQgZGUgcsOpZXNzYXllciAhJ1xcbiAgICB9LFxcbiAgICBjb25maXJtTm9kZURlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBub2RlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIG5vZXVkID8nXFxuICAgIH0sXFxuICAgIHJvb3RUcmVlRGlzcGxheToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jvb3QgdHJlZSBkaXNwbGF5ZWQ6JyxcXG4gICAgICAgICdmci1GUic6ICdBcmJyZSByYWNpbmUgYWZmaWNow6kgOidcXG4gICAgfSxcXG4gICAgb3JnYW5pc2F0aW9uc0NvbmZpcm1EZWxldGVMYXN0UG9zaXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGlzIHRoZSBvbmx5IG9yZ2FuaXphdGlvbiBwb3NpdGlvbiBoZWxkIGJ5IHRoaXMgdXNlci4gSWYgeW91IGRlbGV0ZSBpdCwgeW91IHdvblxcXFwndCBiZSBhYmxlIHRvIHJlLWFzc2lnbiB0aGlzIHVzZXIgYW55d2hlcmUgaW4gdGhlIHRyZWUuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjb21wbGV0ZWx5IHJlbW92ZSB0aGlzIHVzZXIgZnJvbSB0aGUgb3JnYW5pemF0aW9uPycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyDDqnRlcyBzdXIgbGUgcG9pbnQgZGUgc3VwcHJpbWVyIGxhIHNldWxlIHBvc2l0aW9uIHRlbnVlIHBhciBjZXQgdXRpbGlzYXRldXIgZGFucyBsXFxcXCdvcmdhbmlzYXRpb24uIFNpIHZvdXMgbGEgc3VwcHJpbWV6LCB2b3VzIG5lIHBvdXJyZXogcGx1cyBkdSB0b3V0IHLDqWFzc2lnbmVyIGNldCB1dGlsaXNhdGV1ciBkYW5zIGxcXFxcJ2FyYnJlLiDDinRlcy12b3VzIGNlcnRhaW4gZGUgdm91bG9pciBzdXBwcmltZXIgY29tcGzDqHRlbWVudCBjZXQgdXRpbGlzYXRldXIgZGUgbFxcXFwnb3JnYW5pc2F0aW9uID8nXFxuICAgIH0sXFxuICAgIG5vQXZhaWxhYmxlUmVwb3J0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlcG9ydHMgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gcmFwcG9ydCBkaXNwb25pYmxlLidcXG4gICAgfSxcXG4gICAgc2VsZWN0UmVwb3J0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgcmVwb3J0JyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuIHJhcHBvcnQnXFxuICAgIH0sXFxuICAgIHByaW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcHJpbWVyJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlQ29uZmlybUxlYXZlV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBsZWF2ZSB0aGlzIHBhZ2UgYW5kIGxvc2UgeW91ciB1cGRhdGVzPycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBhdmV6IGVmZmVjdHXDqSBkZXMgbW9kaWZpY2F0aW9ucyBzYW5zIGxlcyBlbnJlZ2lzdHJlci4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcXVpdHRlciBjZXR0ZSBwYWdlIGV0IHBlcmRyZSBsZXMgZG9ubsOpZXMgbm9uIHNhdXZlZ2FyZMOpZXMgPydcXG4gICAgfSxcXG4gICAgc2VydmljZVZlcnNpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlIHZlcnNpb246JyxcXG4gICAgICAgICdmci1GUic6ICdWZXJzaW9uIGR1IHNlcnZpY2UgOidcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25Db21wbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ09wZXJhdGlvbiBjb21wbGV0ZScsXFxuICAgICAgICAnZnItRlInOiAnT3DDqXJhdGlvbiB0ZXJtaW7DqWUnXFxuICAgIH0sXFxuICAgIGJhdGNoT3BlcmF0aW9uUHJvY2Vzc2VkSXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9jZXNzZWQgaXRlbXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudHMgdHJhaXTDqXMnXFxuICAgIH0sXFxuICAgIGVycm9yczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Vycm9ycycsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVycydcXG4gICAgfSxcXG4gICAgc3VjY2Vzc2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2Vzc2VzJyxcXG4gICAgICAgICdmci1GUic6ICdSw6l1c3NpcydcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25BbGxHb29kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWxsIGl0ZW1zIGhhdmUgYmVlbiBwcm9jZXNzZWQuIEV2ZXJ5dGhpbmcgd2VudCB3ZWxsIScsXFxuICAgICAgICAnZnItRlInOiAnVG91cyBsZXMgw6lsw6ltZW50cyBvbnQgw6l0w6kgdHJhaXTDqXMgISdcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25FcnJvcnNPY2N1cmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU29tZSBlcnJvcnMgb2NjdXJlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXMgZXJyZXVycyBzb250IHN1cnZlbnVlcyBsb3JzIGRlcyB0cmFpdGVtZW50cy4nXFxuICAgIH0sXFxuICAgIGl0ZW1JZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEIMOpbMOpbWVudCdcXG4gICAgfSxcXG4gICAgc3RhdHVzQ29kZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N0YXR1cyBjb2RlJyxcXG4gICAgICAgICdmci1GUic6ICdDb2RlIEhUVFAnXFxuICAgIH0sXFxuICAgIGVycm9yTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Vycm9yIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2UgZFxcXFwnZXJyZXVyJ1xcbiAgICB9LFxcbiAgICB3b3JrSXRlbVByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dvcmsgaXRlbSBwcm9jZXNzZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdUw6JjaGUgdHJhaXTDqWUgISdcXG4gICAgfSxcXG4gICAgdmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyJ1xcbiAgICB9LFxcbiAgICBuYW1lQWxyZWFkeVVzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIG5hbWUgaXMgYWxyZWFkeSB1c2VkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2Ugbm9tIGVzdCBkw6lqw6AgdXRpbGlzw6kuJ1xcbiAgICB9LFxcbiAgICB1bmtub3duOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVW5rbm93bicsXFxuICAgICAgICAnZnItRlInOiAnSW5jb25udSdcXG4gICAgfSxcXG4gICAgc2VydmljZVN0YXR1c0NvbmZpZ0NoYW5nZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gaGFzIGNoYW5nZWQgc2luY2UgbGFzdCBzdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnTGEgY29uZmlndXJhdGlvbiBkdSBzZXJ2aWNlIGEgY2hhbmfDqSBkZXB1aXMgbGUgZGVybmllciBkw6ltYXJyYWdlJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlU3RhdHVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VydmljZSBzdGF0dXM6JyxcXG4gICAgICAgICdmci1GUic6ICfDiXRhdCBkdSBzZXJ2aWNlIDonXFxuICAgIH1cXG59O1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI3MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5leHBvcnRzLkFWQUlMQUJMRV9MQU5HVUFHRVMgPSBbXFxuICAgIHtcXG4gICAgICAgIGxhYmVsOiAnRU4nLFxcbiAgICAgICAgbG9jYWxlOiAnZW4tVVMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhYmVsOiAnRlInLFxcbiAgICAgICAgbG9jYWxlOiAnZnItRlInXFxuICAgIH1cXG5dO1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvbmZpZy5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5mbGFnc0RlZiA9IHtcXG4gICAgJ2V1bnJlYWQnOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtZW52ZWxvcGUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZm9udC1jb2xvci1saWdodGVyJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdVbnJlYWQnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdOb24gbHUnXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgICdkd2FybmluZyc6IHtcXG4gICAgICAgIGljb25TaGFwZTogJ2ZhcyBmYS1leGNsYW1hdGlvbi10cmlhbmdsZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdkYW5nZXItY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ1dhcm5pbmcnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdBdHRlbnRpb24nXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgICdjaW1wb3J0YW50Jzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLXN0YXInLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnd2FybmluZy1jb2xvcicsXFxuICAgICAgICBmbGFnTGFiZWw6IHtcXG4gICAgICAgICAgICAnZW4tVVMnOiAnSW1wb3J0YW50JyxcXG4gICAgICAgICAgICAnZnItRlInOiAnSW1wb3J0YW50J1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYmluZm8nOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtc3F1YXJlJyxcXG4gICAgICAgIGljb25Db2xvcjogJ2luZm8tY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ0luZm8nLFxcbiAgICAgICAgICAgICdmci1GUic6ICdJbmZvJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYW9rJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWNpcmNsZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdwcmltYXJ5LWNvbG9yJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdPSycsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ09LJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYWF2aXNpYmxlJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWFyY2hpdmUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZm9udC1jb2xvci1saWdodGVyJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdBcmNoaXZlZCcsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ0FyY2hpdsOpJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIGludmVyc2VkOiB0cnVlLFxcbiAgICAgICAgZGVmYXVsdFNlYXJjaFN0YXRlOiB0cnVlXFxuICAgIH0sXFxufTtcXG5leHBvcnRzLmxhbmd1YWdlSXNvID0gW1xcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBZmFyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBQicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBYmtoYXonXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F2ZXN0YW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FGJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0FmcmlrYWFucydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQWthbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQU0nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQW1oYXJpYydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQU4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJhZ29uZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBcmFiaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Fzc2FtZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBdmFyaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F5bWFyYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQVonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXplcmJhaWphbmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jhc2hraXInXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0JlbGFydXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0J1bGdhcmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQkgnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQmloYXJpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCaXNsYW1hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCYW1iYXJhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCZW5nYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaWJldGFuIFN0YW5kYXJkJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCcmV0b24nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jvc25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NhdGFsYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoZWNoZW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoYW1vcnJvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDb3JzaWNhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ1InLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3JlZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3plY2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09sZCBDaHVyY2ggU2xhdm9uaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NodXZhc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dlbHNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdEQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdEYW5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0RFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dlcm1hbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRFYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRGl2ZWhpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdEWicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdEem9uZ2toYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRUUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXdlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdFTCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdFd2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VuZ2xpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VzcGVyYW50bydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRVMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3BhbmlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRVQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXN0b25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jhc3F1ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGVyc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRnVsYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmlubmlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmlqaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdGYXJvZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdGcmVuY2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0ZZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dlc3Rlcm4gRnJpc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR0EnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSXJpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Njb3R0aXNoIEdhZWxpYydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnR2FsaWNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0d1YXJhbsOtJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdHVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHdWphcmF0aSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR1YnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFueCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSGF1c2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hlYnJldydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSGluZGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hpcmkgTW90dSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSFInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3JvYXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hhaXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0h1bmdhcmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSFknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJtZW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0haJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hlcmVybydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSW50ZXJsaW5ndWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0luZG9uZXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludGVybGluZ3VlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJRycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJZ2JvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOdW9zdSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSW51cGlhcSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSU8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSWRvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJY2VsYW5kaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0l0YWxpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludWt0aXR1dCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSmFwYW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0pWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0phdmFuZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHZW9yZ2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0cnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS29uZ28nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tpa3V5dSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0onLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS3dhbnlhbWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0themFraCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FsYWFsbGlzdXQnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tNJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tobWVyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLYW5uYWRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLb3JlYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0thbnVyaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FzaG1pcmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t1cmRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tvbWknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Nvcm5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t5cmd5eidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGF0aW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xCJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0x1eGVtYm91cmdpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dhbmRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaW1idXJnaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaW5nYWxhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMYW8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0xpdGh1YW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0x1YmEtS2F0YW5nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTFYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGF0dmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsYWdhc3knXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01IJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hcnNoYWxsZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNxIFvcmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01LJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hY2Vkb25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01MJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hbGF5YWxhbSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTU4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTW9uZ29saWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYXJhdGhpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYWxheeKAjidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsdGVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQnVybWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTmF1cnUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05CJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcndlZ2lhbiBCb2ttw6VsJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J0aGVybiBOZGViZWxlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOZXBhbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05HJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05kb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRHV0Y2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05OJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcndlZ2lhbiBOeW5vcnNrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdOTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J3ZWdpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05SJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvdXRoZXJuIE5kZWJlbGUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05WJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05hdmFqbydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTlknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ2hpY2hld2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09DJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09jY2l0YW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09KJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09qaWJ3ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnT00nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnT3JvbW8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09SJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09yaXlhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdPUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdPc3NldGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGFuamFiaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUMSBbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1BMJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1BvbGlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUFMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGFzaHRvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdQVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdQb3J0dWd1ZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdRVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdRdWVjaHVhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdSb21hbnNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLaXJ1bmRpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdSb21hbmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUlUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUnVzc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUlcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2lueWFyd2FuZGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NhbnNrcml0J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTQycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTYXJkaW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NpbmRoaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0UnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTm9ydGhlcm4gU2FtaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0cnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2FuZ28nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NpbmhhbGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Nsb3ZhaydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2xvdmVuZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU00nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2Ftb2FuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTaG9uYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU08nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU29tYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTUScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBbGJhbmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1InLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2VyYmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3dhdGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvdXRoZXJuIFNvdGhvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTdW5kYW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3ZWRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3YWhpbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhbWlsJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdURScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUZWx1Z3UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhamlrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaGFpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaWdyaW55YSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHVya21lbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGFnYWxvZydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVE4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHN3YW5hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHVya2lzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHNvbmdhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYXRhcidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHdpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUWScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYWhpdGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVXlnaHVyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdVSycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdVa3JhaW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1VyZHUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VaJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1V6YmVrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdWRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdWZW5kYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVmlldG5hbWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVk8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVm9sYXDDvGsnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1dBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dhbGxvb24nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1dPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dvbG9mJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdYSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdYaG9zYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWUknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWWlkZGlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWU8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWW9ydWJhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdaQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdaaHVhbmcnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1pIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoaW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1pVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1p1bHUnXFxuICAgIH1cXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzSXNvID0gW1xcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQURcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFuZG9ycmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVW5pdGVkIEFyYWIgRW1pcmF0ZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBRlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWZnaGFuaXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW50aWd1YSBhbmQgQmFyYnVkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbmd1aWxsYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbGJhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFybWVuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW5nb2xhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFudGFyY3RpY2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXJnZW50aW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFtZXJpY2FuIFNhbW9hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkF1c3RyaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXVzdHJhbGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFydWJhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVhcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIsOFbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBemVyYmFpamFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvc25pYSBhbmQgSGVyemVnb3ZpbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFyYmFkb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFuZ2xhZGVzaFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCZWxnaXVtXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJ1cmtpbmEgRmFzb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCdWxnYXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCYWhyYWluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQklcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJ1cnVuZGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVuaW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgQmFydGjDqWxlbXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVybXVkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcnVuZWlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQm9saXZpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJRXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb25haXJlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJyYXppbFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCYWhhbWFzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJodXRhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJWXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb3V2ZXQgSXNsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvdHN3YW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQllcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJlbGFydXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVsaXplXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhbmFkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb2NvcyBbS2VlbGluZ10gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUmVwdWJsaWMgb2YgdGhlIENvbmdvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlN3aXR6ZXJsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkl2b3J5IENvYXN0XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0tcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNvb2sgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGlsZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYW1lcm9vblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGluYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb2xvbWJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb3N0YSBSaWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1VcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN1YmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2FwZSBWZXJkZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDdXJhY2FvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNocmlzdG1hcyBJc2xhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ3lwcnVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1pcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN6ZWNoIFJlcHVibGljXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiREVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdlcm1hbnlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJESlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGppYm91dGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJES1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGVubWFya1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEb21pbmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEb21pbmljYW4gUmVwdWJsaWNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJEWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWxnZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFY3VhZG9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRUVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVzdG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRWd5cHRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiV2VzdGVybiBTYWhhcmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRXJpdHJlYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTcGFpblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFdGhpb3BpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGaW5sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRkpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZpamlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRmFsa2xhbmQgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNaWNyb25lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZhcm9lIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJhbmNlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdhYm9uXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVuaXRlZCBLaW5nZG9tXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0RcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdyZW5hZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR2VvcmdpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGcmVuY2ggR3VpYW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1ZXJuc2V5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdoYW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdpYnJhbHRhclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHcmVlbmxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR2FtYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR05cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1aW5lYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWFkZWxvdXBlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVxdWF0b3JpYWwgR3VpbmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdyZWVjZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWF0ZW1hbGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR3VhbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWluZWEtQmlzc2F1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1eWFuYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkhLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJIb25nIEtvbmdcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJITVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSGVhcmQgSXNsYW5kIGFuZCBNY0RvbmFsZCBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkhvbmR1cmFzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSFJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNyb2F0aWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSGFpdGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSHVuZ2FyeVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJbmRvbmVzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXJlbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJc3JhZWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXNsZSBvZiBNYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSW5kaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIklyYXFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXJhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJY2VsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkl0YWx5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkplcnNleVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKYW1haWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkpvcmRhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKYXBhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLZW55YVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLeXJneXpzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhbWJvZGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIktpcmliYXRpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS01cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNvbW9yb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJLTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgS2l0dHMgYW5kIE5ldmlzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1BcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5vcnRoIEtvcmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIEtvcmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkt1d2FpdFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYXltYW4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLYXpha2hzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxhb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGViYW5vblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBMdWNpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWVjaHRlbnN0ZWluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNyaSBMYW5rYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWJlcmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxlc290aG9cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGl0aHVhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkx1eGVtYm91cmdcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGF0dmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFlcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxpYnlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vcm9jY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9uYWNvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTURcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbGRvdmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9udGVuZWdyb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1GXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBNYXJ0aW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFkYWdhc2NhclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1IXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXJzaGFsbCBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hY2Vkb25pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1MXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWxpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk15YW5tYXIgW0J1cm1hXVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1OXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNb25nb2xpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1PXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWNhb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1QXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNUVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFydGluaXF1ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1SXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXVyaXRhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbnRzZXJyYXRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsdGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWF1cml0aXVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGRpdmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGF3aVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1YXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNZXhpY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsYXlzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW96YW1iaXF1ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5BXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOYW1pYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTkNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5ldyBDYWxlZG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJORVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmlnZXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJORlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9yZm9sayBJc2xhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmlnZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5JXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOaWNhcmFndWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmV0aGVybGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9yd2F5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlBcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5lcGFsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5hdXJ1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5pdWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmV3IFplYWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJPTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiT21hblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYW5hbWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGVydVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGcmVuY2ggUG9seW5lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUEdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBhcHVhIE5ldyBHdWluZWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGhpbGlwcGluZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUG9sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUE1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IFBpZXJyZSBhbmQgTWlxdWVsb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGl0Y2Fpcm4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQdWVydG8gUmljb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYWxlc3RpbmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUG9ydHVnYWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFsYXVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFyYWd1YXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJRQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUWF0YXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUsOpdW5pb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJST1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUm9tYW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlJTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZXJiaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUnVzc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlJ3YW5kYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYXVkaSBBcmFiaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU29sb21vbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNleWNoZWxsZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3VkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3dlZGVuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNpbmdhcG9yZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBIZWxlbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2xvdmVuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTbG92YWtpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTaWVycmEgTGVvbmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FuIE1hcmlub1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZW5lZ2FsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU09cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvbWFsaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3VyaW5hbWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU291dGggU3VkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU8OjbyBUb23DqSBhbmQgUHLDrW5jaXBlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVsIFNhbHZhZG9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNpbnQgTWFhcnRlblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTeXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTd2F6aWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVERcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNoYWRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJURlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVEdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRvZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGhhaWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGFqaWtpc3RhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUb2tlbGF1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVExcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVhc3QgVGltb3JcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya21lbmlzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlR1bmlzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVG9uZ2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya2V5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRyaW5pZGFkIGFuZCBUb2JhZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHV2YWx1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRhaXdhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUYW56YW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVa3JhaW5lXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVUdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVnYW5kYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJVU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVW5pdGVkIFN0YXRlc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVcnVndWF5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVVpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlV6YmVraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmF0aWNhbiBDaXR5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlZlbmV6dWVsYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcml0aXNoIFZpcmdpbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVklcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlUuUy4gVmlyZ2luIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmlldG5hbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZVXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJWYW51YXR1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiV0ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIldhbGxpcyBhbmQgRnV0dW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiV1NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhbW9hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIktvc292b1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIllFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJZZW1lblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIllUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXlvdHRlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIEFmcmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlpNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJaYW1iaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJaV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiWmltYmFid2VcXFwiXFxuICAgIH1cXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzTmFtZVByZVNlbGVjdGlvbiA9IFtcXG4gICAgXFxcIlVuaXRlZCBTdGF0ZXNcXFwiLFxcbiAgICBcXFwiQ2FuYWRhXFxcIixcXG4gICAgXFxcIkZyYW5jZVxcXCIsXFxuICAgIFxcXCJHZXJtYW55XFxcIixcXG4gICAgXFxcIk1leGljb1xcXCJcXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzTmFtZSA9IFtcXG4gICAgXFxcIkFmZ2hhbmlzdGFuXFxcIixcXG4gICAgXFxcIsOFbGFuZFxcXCIsXFxuICAgIFxcXCJBbGJhbmlhXFxcIixcXG4gICAgXFxcIkFsZ2VyaWFcXFwiLFxcbiAgICBcXFwiQW1lcmljYW4gU2Ftb2FcXFwiLFxcbiAgICBcXFwiQW5kb3JyYVxcXCIsXFxuICAgIFxcXCJBbmdvbGFcXFwiLFxcbiAgICBcXFwiQW5ndWlsbGFcXFwiLFxcbiAgICBcXFwiQW50YXJjdGljYVxcXCIsXFxuICAgIFxcXCJBbnRpZ3VhIGFuZCBCYXJidWRhXFxcIixcXG4gICAgXFxcIkFyZ2VudGluYVxcXCIsXFxuICAgIFxcXCJBcm1lbmlhXFxcIixcXG4gICAgXFxcIkFydWJhXFxcIixcXG4gICAgXFxcIkF1c3RyYWxpYVxcXCIsXFxuICAgIFxcXCJBdXN0cmlhXFxcIixcXG4gICAgXFxcIkF6ZXJiYWlqYW5cXFwiLFxcbiAgICBcXFwiQmFoYW1hc1xcXCIsXFxuICAgIFxcXCJCYWhyYWluXFxcIixcXG4gICAgXFxcIkJhbmdsYWRlc2hcXFwiLFxcbiAgICBcXFwiQmFyYmFkb3NcXFwiLFxcbiAgICBcXFwiQmVsYXJ1c1xcXCIsXFxuICAgIFxcXCJCZWxnaXVtXFxcIixcXG4gICAgXFxcIkJlbGl6ZVxcXCIsXFxuICAgIFxcXCJCZW5pblxcXCIsXFxuICAgIFxcXCJCZXJtdWRhXFxcIixcXG4gICAgXFxcIkJodXRhblxcXCIsXFxuICAgIFxcXCJCb2xpdmlhXFxcIixcXG4gICAgXFxcIkJvbmFpcmVcXFwiLFxcbiAgICBcXFwiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYVxcXCIsXFxuICAgIFxcXCJCb3Rzd2FuYVxcXCIsXFxuICAgIFxcXCJCb3V2ZXQgSXNsYW5kXFxcIixcXG4gICAgXFxcIkJyYXppbFxcXCIsXFxuICAgIFxcXCJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnlcXFwiLFxcbiAgICBcXFwiQnJpdGlzaCBWaXJnaW4gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJCcnVuZWlcXFwiLFxcbiAgICBcXFwiQnVsZ2FyaWFcXFwiLFxcbiAgICBcXFwiQnVya2luYSBGYXNvXFxcIixcXG4gICAgXFxcIkJ1cnVuZGlcXFwiLFxcbiAgICBcXFwiQ2FtYm9kaWFcXFwiLFxcbiAgICBcXFwiQ2FtZXJvb25cXFwiLFxcbiAgICBcXFwiQ2FuYWRhXFxcIixcXG4gICAgXFxcIkNhcGUgVmVyZGVcXFwiLFxcbiAgICBcXFwiQ2F5bWFuIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljXFxcIixcXG4gICAgXFxcIkNoYWRcXFwiLFxcbiAgICBcXFwiQ2hpbGVcXFwiLFxcbiAgICBcXFwiQ2hpbmFcXFwiLFxcbiAgICBcXFwiQ2hyaXN0bWFzIElzbGFuZFxcXCIsXFxuICAgIFxcXCJDb2NvcyBbS2VlbGluZ10gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJDb2xvbWJpYVxcXCIsXFxuICAgIFxcXCJDb21vcm9zXFxcIixcXG4gICAgXFxcIkNvb2sgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJDb3N0YSBSaWNhXFxcIixcXG4gICAgXFxcIkNyb2F0aWFcXFwiLFxcbiAgICBcXFwiQ3ViYVxcXCIsXFxuICAgIFxcXCJDdXJhY2FvXFxcIixcXG4gICAgXFxcIkN5cHJ1c1xcXCIsXFxuICAgIFxcXCJDemVjaCBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1xcXCIsXFxuICAgIFxcXCJEZW5tYXJrXFxcIixcXG4gICAgXFxcIkRqaWJvdXRpXFxcIixcXG4gICAgXFxcIkRvbWluaWNhXFxcIixcXG4gICAgXFxcIkRvbWluaWNhbiBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJFYXN0IFRpbW9yXFxcIixcXG4gICAgXFxcIkVjdWFkb3JcXFwiLFxcbiAgICBcXFwiRWd5cHRcXFwiLFxcbiAgICBcXFwiRWwgU2FsdmFkb3JcXFwiLFxcbiAgICBcXFwiRXF1YXRvcmlhbCBHdWluZWFcXFwiLFxcbiAgICBcXFwiRXJpdHJlYVxcXCIsXFxuICAgIFxcXCJFc3RvbmlhXFxcIixcXG4gICAgXFxcIkV0aGlvcGlhXFxcIixcXG4gICAgXFxcIkZhbGtsYW5kIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiRmFyb2UgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJGaWppXFxcIixcXG4gICAgXFxcIkZpbmxhbmRcXFwiLFxcbiAgICBcXFwiRnJhbmNlXFxcIixcXG4gICAgXFxcIkZyZW5jaCBHdWlhbmFcXFwiLFxcbiAgICBcXFwiRnJlbmNoIFBvbHluZXNpYVxcXCIsXFxuICAgIFxcXCJGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXNcXFwiLFxcbiAgICBcXFwiR2Fib25cXFwiLFxcbiAgICBcXFwiR2FtYmlhXFxcIixcXG4gICAgXFxcIkdlb3JnaWFcXFwiLFxcbiAgICBcXFwiR2VybWFueVxcXCIsXFxuICAgIFxcXCJHaGFuYVxcXCIsXFxuICAgIFxcXCJHaWJyYWx0YXJcXFwiLFxcbiAgICBcXFwiR3JlZWNlXFxcIixcXG4gICAgXFxcIkdyZWVubGFuZFxcXCIsXFxuICAgIFxcXCJHcmVuYWRhXFxcIixcXG4gICAgXFxcIkd1YWRlbG91cGVcXFwiLFxcbiAgICBcXFwiR3VhbVxcXCIsXFxuICAgIFxcXCJHdWF0ZW1hbGFcXFwiLFxcbiAgICBcXFwiR3Vlcm5zZXlcXFwiLFxcbiAgICBcXFwiR3VpbmVhXFxcIixcXG4gICAgXFxcIkd1aW5lYS1CaXNzYXVcXFwiLFxcbiAgICBcXFwiR3V5YW5hXFxcIixcXG4gICAgXFxcIkhhaXRpXFxcIixcXG4gICAgXFxcIkhlYXJkIElzbGFuZCBhbmQgTWNEb25hbGQgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJIb25kdXJhc1xcXCIsXFxuICAgIFxcXCJIb25nIEtvbmdcXFwiLFxcbiAgICBcXFwiSHVuZ2FyeVxcXCIsXFxuICAgIFxcXCJJY2VsYW5kXFxcIixcXG4gICAgXFxcIkluZGlhXFxcIixcXG4gICAgXFxcIkluZG9uZXNpYVxcXCIsXFxuICAgIFxcXCJJcmFuXFxcIixcXG4gICAgXFxcIklyYXFcXFwiLFxcbiAgICBcXFwiSXJlbGFuZFxcXCIsXFxuICAgIFxcXCJJc2xlIG9mIE1hblxcXCIsXFxuICAgIFxcXCJJc3JhZWxcXFwiLFxcbiAgICBcXFwiSXRhbHlcXFwiLFxcbiAgICBcXFwiSXZvcnkgQ29hc3RcXFwiLFxcbiAgICBcXFwiSmFtYWljYVxcXCIsXFxuICAgIFxcXCJKYXBhblxcXCIsXFxuICAgIFxcXCJKZXJzZXlcXFwiLFxcbiAgICBcXFwiSm9yZGFuXFxcIixcXG4gICAgXFxcIkthemFraHN0YW5cXFwiLFxcbiAgICBcXFwiS2VueWFcXFwiLFxcbiAgICBcXFwiS2lyaWJhdGlcXFwiLFxcbiAgICBcXFwiS29zb3ZvXFxcIixcXG4gICAgXFxcIkt1d2FpdFxcXCIsXFxuICAgIFxcXCJLeXJneXpzdGFuXFxcIixcXG4gICAgXFxcIkxhb3NcXFwiLFxcbiAgICBcXFwiTGF0dmlhXFxcIixcXG4gICAgXFxcIkxlYmFub25cXFwiLFxcbiAgICBcXFwiTGVzb3Rob1xcXCIsXFxuICAgIFxcXCJMaWJlcmlhXFxcIixcXG4gICAgXFxcIkxpYnlhXFxcIixcXG4gICAgXFxcIkxpZWNodGVuc3RlaW5cXFwiLFxcbiAgICBcXFwiTGl0aHVhbmlhXFxcIixcXG4gICAgXFxcIkx1eGVtYm91cmdcXFwiLFxcbiAgICBcXFwiTWFjYW9cXFwiLFxcbiAgICBcXFwiTWFjZWRvbmlhXFxcIixcXG4gICAgXFxcIk1hZGFnYXNjYXJcXFwiLFxcbiAgICBcXFwiTWFsYXdpXFxcIixcXG4gICAgXFxcIk1hbGF5c2lhXFxcIixcXG4gICAgXFxcIk1hbGRpdmVzXFxcIixcXG4gICAgXFxcIk1hbGlcXFwiLFxcbiAgICBcXFwiTWFsdGFcXFwiLFxcbiAgICBcXFwiTWFyc2hhbGwgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJNYXJ0aW5pcXVlXFxcIixcXG4gICAgXFxcIk1hdXJpdGFuaWFcXFwiLFxcbiAgICBcXFwiTWF1cml0aXVzXFxcIixcXG4gICAgXFxcIk1heW90dGVcXFwiLFxcbiAgICBcXFwiTWV4aWNvXFxcIixcXG4gICAgXFxcIk1pY3JvbmVzaWFcXFwiLFxcbiAgICBcXFwiTW9sZG92YVxcXCIsXFxuICAgIFxcXCJNb25hY29cXFwiLFxcbiAgICBcXFwiTW9uZ29saWFcXFwiLFxcbiAgICBcXFwiTW9udGVuZWdyb1xcXCIsXFxuICAgIFxcXCJNb250c2VycmF0XFxcIixcXG4gICAgXFxcIk1vcm9jY29cXFwiLFxcbiAgICBcXFwiTW96YW1iaXF1ZVxcXCIsXFxuICAgIFxcXCJNeWFubWFyIFtCdXJtYV1cXFwiLFxcbiAgICBcXFwiTmFtaWJpYVxcXCIsXFxuICAgIFxcXCJOYXVydVxcXCIsXFxuICAgIFxcXCJOZXBhbFxcXCIsXFxuICAgIFxcXCJOZXRoZXJsYW5kc1xcXCIsXFxuICAgIFxcXCJOZXcgQ2FsZWRvbmlhXFxcIixcXG4gICAgXFxcIk5ldyBaZWFsYW5kXFxcIixcXG4gICAgXFxcIk5pY2FyYWd1YVxcXCIsXFxuICAgIFxcXCJOaWdlclxcXCIsXFxuICAgIFxcXCJOaWdlcmlhXFxcIixcXG4gICAgXFxcIk5pdWVcXFwiLFxcbiAgICBcXFwiTm9yZm9sayBJc2xhbmRcXFwiLFxcbiAgICBcXFwiTm9ydGggS29yZWFcXFwiLFxcbiAgICBcXFwiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXFxcIixcXG4gICAgXFxcIk5vcndheVxcXCIsXFxuICAgIFxcXCJPbWFuXFxcIixcXG4gICAgXFxcIlBha2lzdGFuXFxcIixcXG4gICAgXFxcIlBhbGF1XFxcIixcXG4gICAgXFxcIlBhbGVzdGluZVxcXCIsXFxuICAgIFxcXCJQYW5hbWFcXFwiLFxcbiAgICBcXFwiUGFwdWEgTmV3IEd1aW5lYVxcXCIsXFxuICAgIFxcXCJQYXJhZ3VheVxcXCIsXFxuICAgIFxcXCJQZXJ1XFxcIixcXG4gICAgXFxcIlBoaWxpcHBpbmVzXFxcIixcXG4gICAgXFxcIlBpdGNhaXJuIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiUG9sYW5kXFxcIixcXG4gICAgXFxcIlBvcnR1Z2FsXFxcIixcXG4gICAgXFxcIlB1ZXJ0byBSaWNvXFxcIixcXG4gICAgXFxcIlFhdGFyXFxcIixcXG4gICAgXFxcIlJlcHVibGljIG9mIHRoZSBDb25nb1xcXCIsXFxuICAgIFxcXCJSb21hbmlhXFxcIixcXG4gICAgXFxcIlJ1c3NpYVxcXCIsXFxuICAgIFxcXCJSd2FuZGFcXFwiLFxcbiAgICBcXFwiUsOpdW5pb25cXFwiLFxcbiAgICBcXFwiU2FpbnQgQmFydGjDqWxlbXlcXFwiLFxcbiAgICBcXFwiU2FpbnQgSGVsZW5hXFxcIixcXG4gICAgXFxcIlNhaW50IEtpdHRzIGFuZCBOZXZpc1xcXCIsXFxuICAgIFxcXCJTYWludCBMdWNpYVxcXCIsXFxuICAgIFxcXCJTYWludCBNYXJ0aW5cXFwiLFxcbiAgICBcXFwiU2FpbnQgUGllcnJlIGFuZCBNaXF1ZWxvblxcXCIsXFxuICAgIFxcXCJTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lc1xcXCIsXFxuICAgIFxcXCJTYW1vYVxcXCIsXFxuICAgIFxcXCJTYW4gTWFyaW5vXFxcIixcXG4gICAgXFxcIlNhdWRpIEFyYWJpYVxcXCIsXFxuICAgIFxcXCJTZW5lZ2FsXFxcIixcXG4gICAgXFxcIlNlcmJpYVxcXCIsXFxuICAgIFxcXCJTZXljaGVsbGVzXFxcIixcXG4gICAgXFxcIlNpZXJyYSBMZW9uZVxcXCIsXFxuICAgIFxcXCJTaW5nYXBvcmVcXFwiLFxcbiAgICBcXFwiU2ludCBNYWFydGVuXFxcIixcXG4gICAgXFxcIlNsb3Zha2lhXFxcIixcXG4gICAgXFxcIlNsb3ZlbmlhXFxcIixcXG4gICAgXFxcIlNvbG9tb24gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJTb21hbGlhXFxcIixcXG4gICAgXFxcIlNvdXRoIEFmcmljYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJTb3V0aCBLb3JlYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBTdWRhblxcXCIsXFxuICAgIFxcXCJTcGFpblxcXCIsXFxuICAgIFxcXCJTcmkgTGFua2FcXFwiLFxcbiAgICBcXFwiU3VkYW5cXFwiLFxcbiAgICBcXFwiU3VyaW5hbWVcXFwiLFxcbiAgICBcXFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblxcXCIsXFxuICAgIFxcXCJTd2F6aWxhbmRcXFwiLFxcbiAgICBcXFwiU3dlZGVuXFxcIixcXG4gICAgXFxcIlN3aXR6ZXJsYW5kXFxcIixcXG4gICAgXFxcIlN5cmlhXFxcIixcXG4gICAgXFxcIlPDo28gVG9tw6kgYW5kIFByw61uY2lwZVxcXCIsXFxuICAgIFxcXCJUYWl3YW5cXFwiLFxcbiAgICBcXFwiVGFqaWtpc3RhblxcXCIsXFxuICAgIFxcXCJUYW56YW5pYVxcXCIsXFxuICAgIFxcXCJUaGFpbGFuZFxcXCIsXFxuICAgIFxcXCJUb2dvXFxcIixcXG4gICAgXFxcIlRva2VsYXVcXFwiLFxcbiAgICBcXFwiVG9uZ2FcXFwiLFxcbiAgICBcXFwiVHJpbmlkYWQgYW5kIFRvYmFnb1xcXCIsXFxuICAgIFxcXCJUdW5pc2lhXFxcIixcXG4gICAgXFxcIlR1cmtleVxcXCIsXFxuICAgIFxcXCJUdXJrbWVuaXN0YW5cXFwiLFxcbiAgICBcXFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXFxcIixcXG4gICAgXFxcIlR1dmFsdVxcXCIsXFxuICAgIFxcXCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiVS5TLiBWaXJnaW4gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJVZ2FuZGFcXFwiLFxcbiAgICBcXFwiVWtyYWluZVxcXCIsXFxuICAgIFxcXCJVbml0ZWQgQXJhYiBFbWlyYXRlc1xcXCIsXFxuICAgIFxcXCJVbml0ZWQgS2luZ2RvbVxcXCIsXFxuICAgIFxcXCJVbml0ZWQgU3RhdGVzXFxcIixcXG4gICAgXFxcIlVydWd1YXlcXFwiLFxcbiAgICBcXFwiVXpiZWtpc3RhblxcXCIsXFxuICAgIFxcXCJWYW51YXR1XFxcIixcXG4gICAgXFxcIlZhdGljYW4gQ2l0eVxcXCIsXFxuICAgIFxcXCJWZW5lenVlbGFcXFwiLFxcbiAgICBcXFwiVmlldG5hbVxcXCIsXFxuICAgIFxcXCJXYWxsaXMgYW5kIEZ1dHVuYVxcXCIsXFxuICAgIFxcXCJXZXN0ZXJuIFNhaGFyYVxcXCIsXFxuICAgIFxcXCJZZW1lblxcXCIsXFxuICAgIFxcXCJaYW1iaWFcXFwiLFxcbiAgICBcXFwiWmltYmFid2VcXFwiXFxuXTtcXG5leHBvcnRzLmRlZmF1bHRVc2VySW1nID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBWkFBQUFHUUNBSUFBQUFQM2FHYkFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0UW9MRHlJaTlmTzkzZ0FBSUFCSlJFRlVlTnJ0blhlVVhkVjk3Mzk3NzNOdW5WdW1GMDFSUTcwZ0licHBCbVBjNHVRUmg0UmsyWDR2TG5pWjkzQVN4M0ZjMG9peFk4ZTQ0Zm9TbHpoT0NQYXpEUVNiSWhBZ0MxR0VoQW9hamRwbzJwMTI1NWE1OWJTOTN4OGpJU0hUWmpUbG5IdS9uNFZsekRKYW1uM08vcHp2YjFlV3llVUlBQUM4QUVjVEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUNBc0FBQ0VCUUFBRUJZQUFFQllBQUFJQ3dBQUlDd0FBSUN3QUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUY0TkRVMEFwb3M2NDcvVXFYL0lHRTJhenFSaDVTeG4wbkJzS2NPNkNQdEVSQk1obnhiMUNhVk8vdzdzNUgrbWZnRUF3Z0t6Z1ZTa1NDbEZpa2d3R3N3YlBhbmlrV3p4Y0tiWWt5NGRMeHFqcGsybVE0Wk5sbnlkMzRzUkJUVFNCUGxFbXk2V1J3S1hORVhQYjZqWjJGVFRHdlpMUll3Ukk4YmhNUEFhTDFFbWwwTXJnRFBUazFUS1VZb1JHOG9iMjRmU3o0M2xEcVNLQjdJbE0xc2lSeEk3TXhyTktDYTlsTkNtL2tZcEN1a2JtNk52YW9wc2FJaGMwQlJ0cS9FSnpqaGpnaEZuRUJpQXNNQVp1VWNTMlZMWlVsbFNEZVdOSndmVGp5WFNUdzVtUzlrU01acEtQa1JzYnV1M3FSU25GQ2xGdW1odmlMeDFVZnpxOXZnRkxkRzRYOU1ZMHdYbloxU2dBTUlDMWVVcFJWUjJaTUZ5K3JMbGJRUHBSeFBwcDRhemxDc1Q1OFRZS1U4dFZOSlRVMkdQU0xVMFJtNWMzblRUaXVhdXFEOGd1Rjl3Qm5OQldLQktQTVVZbVk3S1c4NXd3Zmp4b2RFZmRBK1hKZ3FrdVVCU3J5RXZxVWlxenRiWUh5eHYvTDNsVFcwMS9ocGQrQVZUQ3VhQ3NFQWx3aGtwUlRuTFNSblc4OE9UM3o0dzlPenhKQkVqd2NncjQwUlNrVlNrMU9iRjlSOWF2K2pTUmJGNnZ4N1JCV01FYzBGWW9HSlV4WlJTeWJMVk4xbSsrOURJOXc0TlU3Wk1taUR2VHNoSlJiWkRzY0F0cTl0dVd0bXlLT0tyOStzK3dhVlMwQmFFQmJ5S1lFd3FOVm95ajZaTFgzK2gvOEdESThROEZhbGV0MVIwSkJGZHRxenhnMnZiTnJWRTI4UCtnTVlkQ1cxQldNQnJxbEtraHZKbVQ2cndyWDBERDNlUEVtT2tWZWpHQmtlU0kxdGJZbjk3MGVLTFcyTmRFYjlQUUZzUUZ2REVFMldrYzViSW0zdkhjOS9aTi9oSXp4Z1JWYXlxenE0VDViTDIrS2N1Nkx5Z05kWVZDZWljMlJMV2dyQ0FXL0VKbmpQdFBSUDVIKzVQM0wxdmlLU3FDbFdkbGJha09uOUovVzBiMmk5dWl5Mk9CbTJwRUxZZ0xPQXVOTTZJcUR0ZGZLUjM0bFBQSEtlOFFVSlU3MVk5UnhMUjIxYTFmUGo4am9zYWErb0NldG1SZUVrZ0xMRHdjRVord2Z0ejVaMko3SmYzRE96dFN4Rm5oQzE1aXNpUkZQWjljbFBuTzFjMGJhd1BNeUpVaUJBV1dFajhndWN0NXplamsvZDBELy9uaThOa09sVlhBNzQyVXBGU3k5dmluOXJTZVcxblhVdklWN0lSdFNBc01QOVBqaWlraVVPWndpOFBqOTN4d2tBcFhTVEJDVnVGWHhGYmlvRDJnWTN0NzF2YnRybWh4c1NvRm9RRjVoUEJtR0MwZFRoNzErNytodytQa1NOSklGaTlYdFFpMnRCZSs0a3RuVGQwMVlkMVlXQlVDOElDODFNRzVpem52cU5qbjM2dWIzUjBramhEc0hwREtDTEhpVVdEdDU3ZjhVZXJXMWJHUTBYYlFkQ0NzTUFjVXFPTHc1bmlEdzhrdnJ0M01Kc3pNR0kxYlJ6Sk5ISE5zb2JidG5TOXRTMk84aERDQW5NQ1o2UnovbkFpODdYbis1ODROdTVZRHNyQW1VWXRSVkoxdEVUdnVHVHA3eXh0MERpek1Ic0lZWUZaUkRER0dOMTNmUHl2bmpvK01JSXk4SnpmZXlKbHkrYmEwSjl0Nlh6dm1yWTZ2NGFGV2hBV21CMDB6bXlwZm5aazdMTTdqZzFQNUprbWtBZG15MW1Sc08vbXRXMS9ka0hua21nQUt4NGdMREFMdGpJZDlSK0hSdjcrcVdQam1STFRPR3cxbXpoUzZPS0c4NXB1djJ6WnVycFFFYzZDc01DTTBUa3IyZkpITHlidTJOazdrU3ZEVm5PQ1ZNVFlWY3NiNzd6eXZIVjFJZVFzQ0F2TUJCOW5rNWJ6blJjR3Y3cXJMNVBIaE9CY29oUXhkdkhpK3J1dVhybStMb1R4TEFnTFROTldncWZLMXBkMm5malhGd2J6SlFzVGd2UGhMR0lidTJyLzc1dFhiYWdMdzFrUUZwaUdyY1pLNW1kM0hMdm40TEJoT3RqSlBGL09JaUsxdktQMng5ZXQzbGdiTXJIV3dYM2d1KzA2ZE03R1MrWm5kaHo3eWY0RWJEVy9uMjhpWWtjSDBqYy9jckE3Vy9aeDlBNElDN3dtZ3JGSjAvbnE3djUvM3o4a3BZU3RGc1JadlFPWld4NDdOSkF2NjJoL0NBdTg2c05nWkRqeVJ3ZUh2LzVjMzlUVUZkcGtZWnpGMkhPOUU3ZHM2eGt2V1JxY0JXR0JWK2dtakd4SlB6ODYvdGtuRGp1MmhLMFdPbWZSdGlQakg5OStaTkswQlo0RmhBWE82aUJTMFVNbmtoOTk1S0Jsb3hKMGk3Tis5dUx3NTU4OVVYSWtIZ2lFQlU2amlKNUpaUDdrVndjc0M2UHNibktXb204ODEvZWR2UU9XVkhncUVCWTR5WXNUaGJmZnY4K3hIRlNDTG5UVzN6eDU5SjZlVVFlbjBFQllnQkdObCszTDczdEJsaXpZeXJYTytzakQzYnRISjJFc0NLdmFNUno1cDFzUFVxWU1XN25hV1ZKZTk5LzdKOG9XR2dQQ3FsNGNwYjYzZitqSkkrTVl0M0s5c3hqbGpac2ZPb2lMd2lDc0trVVJ2VENXKzh6amgyRXJyempyMmVQSnIrL3BoN0lnckdva2JUalgzcmNYbGFDbnVndjdoKzFIZDQ5T29pVWdyS29yQm05OFlCOFZURFNGNTNMV2RmZnZUUmsyV2dMQ3FpSyt1bnRnVDE4SzhjcVRGTXozL09vQUNrTUlxenErMEVUSE02WGJmM01VUTFmZURWblBuNWo0bHdNSlBFQUlxL0tSaXY3NGtZTm9CNC8zRy9hSjdVZEdpeGFVQldGVk1vS3hmenMwMGoyVVFWTjRIc3Y1K1BZanFPa2hyQXF1SkdpaWJOMzJ4R0VNWFZVRzl4NGNlV1F3Zy9ObklLeEtiV3YyVnp1T2Nrd3dWYzRuaUc3YzJsMjJKWXdGWVZVYU9tZmJoN1AvZFNDQnV3MHFDUzFiK3NLdUV6b09VNGF3S3V0TFRDVmIvdW1qaHdoejRaV0ZyZWpPWFgzZDZRSU8rWU93S2dlLzRIZnU2UitmS0tBcEtsSmFmL0hrRVF4a1FWaVYwc1NNSnNyV2wxOFl0SEdnVWlVaWxkclpsM3A4S09PRHRDQ3NDaUNvaVR2M0RsSUpKNU5VTEpaVS8vVGNpWlBIS2dNSXk3c3dSdW15OWQwRFF3WnVFcTdna0NYVjg0T1o3Y01JV1JDV3h3bHI0czc5UXpZMk9WZjRkNG5LanZ6SzgvMEN3b0t3UEIydnNvYjkzUmNUWlJ2eHFzSnhIUG4wUVBxNTBVbmN2UXBoZVpXUUpyN2ZQV0pueTFqTlVBMWZwN3hwZjNsM3YxK2dUMEZZM294WGVkUDUwY0hobk9WZ05MWWFzQjI1dlQrOWV6eUh6VG9RbHZmd2MzNWZiM0l3bFNlc1pxaWFiMVMyWkgxbHowQllGMmdNQ010cnd0TDRUN3BIc2dhdUdxd2lMTnQ1YWpBOVVqQTRIanFFNVNFRVkwZlRwVVBqT1lYVkRGVkdvV1Q5ZCsrRVgwQllFSlozQ0dqOG5tUGpHY1BHNkZXMVZZVVRodjNMWStNK0RMMURXRjVxVnNZZTZSMmZMT015NTZwRDJmTFFlUDV3dW9TaGR3akxHK2ljN1JtYlBKRXFFaTRxcU1hUVJhbWllZS94Y2F4dmdMQzhRVkFUZHg4ZEh5c2hYbFZwVlpndVcxdjdKcEN3SUN4UGZGL0pzT1hUQSttaVlXRUFxMHFScWpkVmZINDBoMVh2RUpicjYwSEJueHViSEo0c1lYVjdOWCsxeG9ybXIvdFRxQW9oTE5jTGk3TWRJOWtVNWdlcnV5ck1scTJuRXhtaG9YOUJXTzVHRTN4SElwdkdBRmFWNDhpeFhIbXNZR0lGS1lUbDR0WmtMRlUweDdNbHduclJxZzlaNlpLMWR3ekRXQkNXbStNVlovc204dW15alhoVjljS2laTm5hTlE1aFFWZ3VSdWRzMTFnK1djYjhJSVRGTWlYcjZkRkpnWEYzQ011OUNVdnc3U1BaVk5GRXdnTGt5TlJrZVJ3Ym9TRXNsellsWTZtaW1jWUFGamdWc3BKRmMzOHlqNm9Rd25KcFBiZ3ZtVThpWG9HVHdxS3hrclVid29LdzNJbGdyQ2RUVEJzMm1nSk1HU3RWdHA1S0YzRXpCWVRsU21GeDZpc1lremdRR1p4S1dHUTZUczVBNG9hd1hObVVqQjNNR1VYTHdZV2E0Q1dLcHAwdVlma29oT1hHTHlxanZFRW1FaFk0SGJKeXBwM0ltemgvRk1KeVhieEtGbzI4aVFFczhMSnYyS1RwSkxDeUFjSnlHNExSY01ITUlWNkJsNU16N2FHaUlTQXNDTXR0Q1N0Uk1ITVc3c2dCTHlzSk02WXprRGRRRWtKWWJrdFliQ2hmbmtSSkNGNXVyTHhwSDhrYkhDc2JJQ3kzbFlTRFJUT0xraEM4UEdHUjZSZ0ZFeTBCWWJtdUpFd2FkaEdiY3NEWktNdHlERWZpUXdaaHVZdXNMYVZVV0lRRnprcFp0bEtHb3pDMkNXRzVLL3lYSFlsN3ZjQnZZMGxwMkZoT0RHRzVEVnVTbEhndHdXOEppMG9vQ1NFc2x5VXNSa2hZNEJVL1pJNHMyeElsSVlUbEtoUlpEb1FGZm51c3dKSUtnKzRRbHF2ZVNiSWQ1V0RBSGJ4eVNhaVFzQ0FzZDVXREpWdWFVc0pZNEJWS1Fxa01CKzhHaE9VbVpabFNPcWdId2FzSXE0eVNFTUp5V1ZYSXNJc1F2TWFnQVlDdzNJSWk1ZU5NWTR3SUlRdWNqY2FaWHdpOEdSQ1dpNHpsMTdpR0RhN2dsZEE1OHd0OHpDQXNGL21LZE00Z0xQQnFDU3VnY1FWZlFWZ3VnakVTR01ZQ3IvQTEwemtMQ0E1ZlFWaXVlaThWQ1U0SVdlQ1ZFcFpmSUdGQldPNTdNWWt4akZTQXM5QTU5d3QwTkFqTGJiNUN3Z0t2a2JEd0tZT3czRlFTVXAwdW1PQ1lEQUpualJYNEJBdjdCRXBDQ010Rk9FcDFCSDB4WGFBcHdGbjVpZ2QwblRQNENzSnlsN0Rhd3I2b0xoQ3d3Sm54aW5UUkdQYmpyWUN3M0lWVTFCYjJSM3lDRVAzQkdjUjkydUtRejhGYkFXRzVMV0cxaFBRSVNrTHdzb1JGVVYyMGhTRXNDTXQ5Q2FzMTdJL29Hc0kvT0xNa2pQaEVXOGlQZ3p3Z0xMY0pTOVVHOUlCUFlHTStPSk9JTGxxUnNDQXNkK0lMKzBqakNGbmdwWkl3NHROYWF2d1N3b0t3WEJleXBGb1RDOVg0ZFN6RkFpOTFMMTlBcS9WcktBa2hMTmRoSzdXK0x0Z1F3REFXbUlwWEtoRFFWOWVGa2E0Z0xEZGlTYlcrcnFZaG9HTmxBNWlxQnhzQ3ZnME5OWmFVYUF3SXkzMEpTNnFWZGVGNHlJZW1BRk1KcXlHb3Jhc0wyeWdJSVN4M3dvamFhMFBjaDZvUUVDbXE5K3ZyNm1zZ0xBakxyU0ZMcWMwTk5mVUJEZVB1c0JYNVJMZzJxQXZzSW9TdzNJb2wxWWI2bWpxL0RsL0JXTFYrN2ZJR3hDc0l5ODBKUzhyTlRaSDZJTWJkNFN1cUMrZ2I2aUFzQ012RlNFVVJuL0RWaGdpYkNxdGRXS29wNkx1MExZWXBRZ2pMM1ZXaG8yN3VyRzBPK2hDeXFqbGVrVS9yYUluRXNHUVV3bkk1aGlPdjdhaHRDbUVZcTZyajFhS1E3M2M3Nnd3SDhRckNjamVPVWt2ajRYaGRtQVMyUVZjdnpXSGZEWjExSm9RRllYbWdLclRsZXhiWDE2TXFyRm8wSG11c3FRM29xQWNoTEE5Z1NubDlaMTFkQUZWaGxkYUR6VUg5L1YzMXFBY2hMRzh3dFVlbk1SN0VyVjlWS1N5cURmcmUzRkZyT2ZoZVFWamVxUXB2WE5ZUXgwYm9La1R3NXZwUWV6U0lRL3NnTE05Z09QTDNsamJXaDdFUnV1cnF3YWFRZnV1YXRyTGxvREVnTE0vZ0tMVWtGbHpYVVNzMHJDQ3RKaGpycWcyL2Uya2o1Z2NoTEk5UnNKeFBiMmh2Q0dHdXNIcmlGVVg5Mmsycld3aDczeUVzejJGTGRXRkw3THptQ09ObzVHcWhPZUwva3hWTlpjUXJDTXVMbEd6bjR4dmJZMzRjajFVVitIVis5ZExHNWhDdW5JQ3d2SW5weUxjdmFWaGNHOExkWDlWUUQ5WUVmZjluWFZ2ZXhuQTdoT1hkMTFpcDk2OXZDK0x1cjRydlNJSnRXQlJiMXhCeHNMd2R3dkl1WlVmKzBYbk5iVEdFckFxUFZ3R2Y5cW56TzR1V2pjYUFzRHlkc0tnMm9IOXdVNGVHdmRDVmkrRHNpczdhcTl2akZ1SVZoT1YxU3Jaenk5clc5VTBSR0t0aWhSWFVQbmZwVW13ZWhMQXFvMXdnditDZnZIZ3BFMmp0Q29ReCt2MVZMWnViSWpnTkdjS3FFQXhIdm10SncxVmRkV2p1eXFNeEdyemp3c1Y1N01XQnNDb0pTZW9mTDFzbWZkaXBVMm44eFlWZGJUVUJwQ3NJcTZLd3BkclNITGxwZFN0MjZsUk9NVWkwcmpuNm9UVnRSYXk5Z3JBcWo3SWpiNzlvY1YwOGhLYW9EQlNqZjNqVE1oL21meUdzeW55L0ZYVkVBbCs2WWptaGZxaUVJbDk5YUhQWFd6cnFzSlFCd3FwWURFZStaMW5qSDI5b0p4eEg2ZkdQejhxVzZLY3Y3SkxZd1FCaFZYd2Q4YmVYTG1tdUQrRlY5ekNDZi9XYWxmVkJIUU9TRUZibEY0WnROZjY3cmxtRjBYZXZZanVmdW56WjVhMHhMTHlDc0tyamhaZnF1bzdhMnk1ZFFwaGQ4aHhTYmU2cS8rajZSVGhEQnNLcUloaWpqNTNmc2JJdGpnRjRMejAxSWhMc3E5ZXNyTUY2T2dpcjJxZ0w2TisrYmpYNU5ZWnZ0VWRzcFN6bjY5ZXZXVjhmeGhPRHNLb09SYlNwb2ViSGIxK3JGTTZlOGNMek11eS92bXJGSHl4dndzT0NzS3EzTUx5aHMvN0wxNjlXcG8xdTRHb3M1OFpON1IvZXNDaW9vY3RBV0ZXTXp0bE5LNXB2dld5NU1uSDJtMXR4NUtyMitPMlhMYXYxYTZnRklheHFKNktMMnpaM3ZIVk5LMkhIdnd1UlNrUURQM2pyMmtWaFAyd0ZZUUZTUkUxQi9ZdFhubmRlZTV4d0NKeXJhbmFsU09lL2VNZUdWYlVoMkFyQ0FxZWR0VGdhK09IMWEwUHhFQlk2dU9pNUtQVWY3OXh3ZVF0T2k0V3d3Tmw5ZzliVmhmN3JIZXNvcUdNUnZDdXduVy9lc1BhNmpscU53VmNRRm5pbG5QV201dWgvdm1NZDZRTE9XbUFzNTR0dldYUGppbWEvNEhnU0VCWjQxZWR4UTN2ZEQ5NjJsampEN3VnRnROVmZYN25pNXRVdFFRMjJnckRBYTRZc3p1aGRpeHUrOXBiVnhBbk9XcEJLOEphTGwzeDQ0NktvVDBQTWRSc2Ftc0NGenRJNWUvL3FWcDhtUHZMSVFUSWxGc0xQSDQ3ODJLWEwvbUpMVjl5dk9kQVZoQVhlb0xNWTBYdFhOT3VhK01EV2Jpb1loSEhmK1doMDlja3JsdCsycWJOR0Y3QVZTa0l3dmU1aktmVW55eHQvK3JhMThWZ0lZL0J6WDRyVDMxMjE0dU1YZE1GV0VCYVlJV1ZIdm50eC9VL2V0bVpwWXdUT210TWkvSE5Yci9qWXhnNmY0TEFWaEFWbVR0R1cxM2ZVL2V2MWF6WXZpcE5TR0lhZmRVU043MHZYcmY3WStSMmNFNDdsZzdEQXVWS3duRGUxeGI1MTNhcnJsall3emhDMVppbFlLU0phMFZSenp3M3IvbXhkbXkwVnRoaTRINWJKNWRBS25pQ2c4ZUc4ZWZzengzLzA0ckJqT3BnNlBFZGJjYzZ2VzFKLyt4WEx0elJGY2lhMm5VTllZTGJST1NORmQrd2Z2R3RYZnpaYk9qbWJDS1p2SzgydnZYOXQyMmN1WHRJYTloVnRpVmFFc01EY1BEQkdVVjM3NWZIeGYzcm14SE9Kak9OSXJIaVlscW9ZWXcyMW9ROXU3dmowK25aaWhHdFFJU3h3V2k2YzJKUlBwcVRDNk5UL0ppSWlXNnFaelVsRmZPSklwdnk1cDQvZmZYalVLbG5FNGF3M2dGU2FMcTdwcXZ2NFJZdXY3NnliTk8wWnREMW5wUFBUSTcrSzFOUnZvazc2a0JSaExBekM4a1JURWpIR09DTkdKQmhUUkRuTHlScFcwWmFHSTIycExLa01xY3BTT1ZLU1ZDVFZpcnJ3a2xqUW5ORVpXRDdCbFZSL3YzZmdwd2NTdmVONWtncmFlbzFnUlVTMWtjQWZybW45N0piRmpTRzlNS096RWdWakJkdDVlamlycHRURldZaHpIMk82WUZPL0JqVVI5V2xSbjlBWWswUlNLYVZJS3N5U1FGaHVpbEdDTVowencxRlp3ODZZVnRxd3h3eTdWTGI3czZYRDZVS2lhS1lOTzI4Nk9kdkpXakp2T1dUWlpEbGt5ZC9kc09qVGx5eGQzeEF1MnpOeEZpT0tCdlFuQmxQZjJqM3dZRjlxTW05TVdSTVA1YXhnUlJxL3RDMyt2ZzJMUHJDbXRlekltVjJBcW5FMmFUci9zbi9vYjdiMWtGTGswMGdYZmszVTZqemlFeEZOaS9oNFU4aDNYankwSkJhc0RmbHFmVnBkUUl2NzliaGZDMnJja2NwUkNGOFExc0xsS2NHWmovT0M3ZlJObG85TmxnYXk1UlBaMHJGczhVaW1kQ2hib2x6NTVGWm14azRWaE96MHYweU1HSkVqdDNUV2ZmR3FGWmUzUmtzemNwWWlDbXBjS3ZybWk0bGZIQng1YWloTnRrVFVPcTBxb3E3NjhQWExHbS9iMEw2MkladzFabmh3dmsvd3NhTDVyVDJEWDl4NTdHVHpubFVLVHYyOVVpZlh5Z1gxam5od1pUeTBQQlpjRWd0MnhvSmRzZUN5YUNEdTF4eXBMSVhRQldITnI2Y01SL1pPbG5xeXBlN3gvTTZoek1PRGFTZFhQalZ3eFU1NjZvMTFxcTZtbXE5ZHMvTHRuZlVsMjFFei9WTkYvZHFMRTRWdjdCOTYrT2hZNzNoK0duK0F5cXdCaWFTa2tPLzNsOVQvNFpyVy83R3NxV1E3cGxRemE1R2d4ZzluaXQvWVBmQzlYWDNFK1J1YW1WV0s1TlN2aXBTaW9INVJXL3lhOXZpNnBzaDU4ZEI1OFdCRTF5d3BiWmdMd3BvN1Zma0VWMHIxNXNvSFVvV0RFNFhkaWV6V29Vd3BXeUlpRW56bXVVYXFlRzNvbjY5ZThjZExHeTJsWnJ6WVd1Y3NxSW1mSHh1L3AzdjRubVBqTkRVWVg0WGFjaVJ4ZGxGSDNWVXJtajY1cmkzcTB3cm5jTHRIalM1MmplWHVlUHI0ZmQwakpHYTYwRm9wY2hRNWtvVjlsN2ZGTDIrTHJXMnNXVlVYWGhrUCtUVnVPaEtsSW9RMW0vZ0ZsMHJ0R3M5dkhVd2ZTR1MzRFdjeTZTS3BjL1BVV2NWTGpmOXJWeXovbjZ0YkdHUE9PYnkvWVYxa0RQdUxCeEs3ZTVPUEpqSlVORW53YXRHV0k0bXhkUzNSSzd2cTNydTY5ZUtXYU01MHptVzNUZFFudGc1bS9uYkhzWjBuSm1iblFaOHlsei9pdjZ3dHZyazFlbFY3N1JXdHNaQXV5ZzcyQlVGWTU0ek9tV0JzWDZyd2kyUGpEeDlQUGorWUprdVN4bWQvbkVncUZ0UnZ2MlRKaHplMDErakNPSWZyY3poakVWMjhPRkg0enhQSmZmM3BCd2RUVnM2WU5iZTZWbFZFR3hmRnIraXNlOGVTK212YjYyeWx6SE5ydzZEZ1ArMU4vdDF2amg0ZW1aejlwbE9LYkVsRVMxdWliMTNXK0s0bDlWZTJ4alhPREFkaEM4S2FFWUl4bjJBOW1kSXZqbzF2UFo3YzNqOUJsaVJOek9IaWNxbTRUM3hzYytjSE43YXZpQVZ6NTNaTm9jNVpTQk5ITXFYNytpYWU3VS85dWorVnk1VG1STFVMaUZKVHFXcHplL3lxcnZxM0xhNi9hbEd0VXVwY3VyMGlDZ2hlZHVUM3UwZis4Wm5lZExvNGR5M0dpSlFqaVdoMVMrektwZlUzTG0yOHNqVW1sVEpoTFFocldxK1JUL0MwWWYrb2UzaHJiL0xSL2pTVnJibFYxWm0xb2VEdlh0SDB3WTN0TjNUV0ZXMTVqbldDeGxsUThQNTgrYUgrOU03KzFBTjlFOGxrZ1FRbjRmSGhMVWVTSXluc3YzWlI3WmIyMlBVZHRaZTN4WlVpODV3VFNrUVhoekxGNys4Yit0cmVRWHRlRnVVeUltVkw0clN4TGI1bGNmMnRhOXBXeDRPR1JJVUlZYjNoWUxWdE1QT3RmWU1QSDB1Vzh3YnA4enNHcEJRcFd0b2MrY2ltemcrc2FnbG92T3ljNjJZM3daaGY4TEdTdVcwd3N6dVIyVEdTZlhZNFMwV0xOTTQ0Vng0U2wxUlQxZCtTNXNoYnUrcFhOMGN2YTQ2dWJ3alBpcW9ZVWRTblBUeVF1bXQzLy8ySHgrWjVMZTVKYlduOFRaMTE3MXZYZXZPS0Z1d2NnckJlQjcvZ09jdjV5cDZCKzN0R0R3eG5UeTVRV0tDZUdRajdQclN1N1NQbnQ2K01oeWROKzl4L3l5a1hGeXpuUUtxd081ay9OcDUvZERCemNEUkxwa09DTXpmZlozWEtVMDMxNFRlMXhqYTFSRGMyUlM1c2lqWUVkRk5LZXpheWlNNlp6dG0zZTBidmV1N0VrWkZKb29WWmdzc1VLZHRwclF0ZHRxeng3eTdvV2hFUGxtMUlDOEw2TFRoaklZMC9PcEMrYzAvL1k3MFRWc2tpalM5NEw5VTBmdldTaG85dTdueFhWMTNKbHJOeUdDWm5wSEd1TVpvbzJ5K21DM3RUaFo3aHlZY0dVMzFqZWJMbHliSDVseGE3THF5a3BDSXBpYkhtaHBxckY4VTN0MFpYeEVNcjRxRWwwUUJuekpScXRxcW1xRStjbUN4L2IvL1FYZnVIOHRueXd2LzRVaEdqeXpycTNydSs3WCt0YmpXVmdyVWdySmNOOUppMnZHTjMvd005bzkyamt5NWF2cVFVRWJYWDE5eTZ1Zk9XdGExQmpjOXNRZnlyT1ZybmpCR05GTTJlVFBGSXB0UTdrZDgzVVhnbW1aOU1GMCt1bU9kVC9wcVhuMVNxazR2RnBTTEJRckhnbG9hYWpRMDE1elhVTElzRmw4YUNuVFYrd1prdDFTd3VBTkE0QzNCK2I5L0VkL2NNUE40M1lacU9peVlsYktlbE5uVEI0dnAvdm1UcGtraWc3RWgwVlFpTC9JS2ZtQ3g5Wk52aG5RTXBvMlROZkhIZ1hINXZhMEsrM3oydjZhT2JPaTV1amhZc1ozYlBIUmVNYVp3UlVhcHNqUmJONFpJMVZqUUhNc1VYeG5JN3gzUER5UUlaOXVuWU5lVXZkZzVPVjZmRTlKS2VHS093YjBrc3VDSWE2SXdHV2tLK1JiSGdva2lnSmFnM2gzd05BWjB6WmlzMTZ3dVZhblNSS0JqZjJqdjA0NFBEUStraWtYTGRSSVJVeE5tRnJiSFBYTGIwSFVzYThwWURZVlcxc0VLNmVDcVIrZlBIZW5ZUFp4ZHEyT0lOdnJoQzQ0dnJ3emV2YWZ2b3VyYUdvRjZ3bkZrdkVqaGpuSkZnakloeWxwTXNtaU5sSzF1MjBrVXpVVENHQzlad3dSZ3FHRU1GYzdCbzBHUjVhck1lblQ1QWg1MCtSb2RlZHVUS1MybVJkRUYralh6YTBwQytQQlpjRmdzdGl3WGJvb0VhdnhiVFJkeW5SWHdpcElrYW45QVljNVJ5MUp5Y3M2NXhGaEQ4Vi8ycE8zZjFQVDJRTHBkZCthRjZDVWN1YlFoLzdLTEZ0MjdvbUpYUlRBakxrOFQ4Mm84UERYL3VOOGQ3eG5PdWZsL3BWUDlYS2h6UU55MkszN2E1NDUxZDlWS3B1WnRGbWpyTVN6Q2FHaTBxMlU3SmxpVmJGbTJuYU11YzR6aVdOR3hadEp5ODVSUXNwMmc3T2RQSlc3Sm9XbmxiU3FWaVBoSHo2YkdBSHZieHVFK0wrdlNvVHloT3hMbVBzNGpHSTdxbzhXa1JYWVIwd2Vqa01TeHpmYVRVMUFtSS9mbnluYy8zM1hOb2RIaXlURXA1WUlXSFZJMFIvODBiMnI5eStmS2NiVmZ0aW9jcUZkYlVidUhQUHQzNy9UMERpV3pKUzJzcGxTTEdHc1ArZHkxdi9NUkZpNWZIZ2tWN1BoWkhNMFpUUmVCVVhUaDErSmVqbEtPVUxaV2p5SkhLbG1xcWNKdnFUenBqR21lNjRJS1J6cm5HbWM2Wk92VlRLRHE1TzNnKzkvOEdOVjZ5NVBjT0RYOW4zOUJ3TWw5eTFZalZHM2owUWI5K3ljcW0rOTY4aWppcnppWHgxU2dzUmhUU3hQdTI5ZHgvY0RoWE1qMjVmbElxdnk3cWEwTzNuZC8rNFRWdFUydTFGckE5NlhRNXlNNnFDT25sWjNJdUZCcG5HbU5iQjlPZmYvYkV2dUZzcm15NWVnVGdOVksyeGkvcHF2MS9ONnlMK2JVcW5EcXNSbUZGZEhIZGd5OXU3eG0xUFgzM2pDSWlWZVBYMTdURjdyaHM2Uld0c2FsRFRRbThITUZZUU9OSHM2WFBQWDM4VjBlVHFiSjVjcGpmeTUvY0N4YkY3MzNYaG5oQXJ6Wm5WWjJ3WWo3dHBxM2RQOXVma0haRlRMZ29SWnpWQm4xdlhsei81eGQwYm1tS1FGdG5xc292ZUgrdS9NOTcrbjdXTXpaWk1FM0xxWkN0bEl3dTZLeDk1TjNuYTV4WDFSYWU2aEpXeks5OWVGdlB2KzBkTEZmWVBYUkthUnFQNk5yNTdmR1BiK3E4dHFOV2tqS2Q2dFhXMUpyKzNtejVDN3RPM0h0NHJHamFodVZVMmhrN25GMjB0T0h4ZDI2d3ErbmFpeW9TVml5Zy8rVnZqbjVuVjEvZXFOQ0pZYVc0NEdHTmR6UkhQN1dwODhibGphcjY5djNybkdtY0hVb1g3M2oyeEsrUGpwY3R4N1NkaWowT1RMQkx6MnQrNHUzclMwNjFmSjJxUlZoUm4vYWwzWDMvdExNM1ZUQXIvUEpSUmNSWldIQldGL3JDNW83M3JXN1ZHSnZ4ZldMZVNSdWtjVTZrZm5FMCtlMERReThNcE11T3RCMVYrUmZOYXZ6YTFTMlAzTEN1U3RablZZV3dBaHAvcUcvaWZ6L2MzWjh0VmRXUndYN0J0WkIrMDNuTjcxM1Zja2xyZEdyQlFZV0phK3JLb3Q3Sjh2Y09ESDYzZTFUbWpWbmNZK2lKNzFNb29IMTBTOWNYTDErV05TcmZXWlV2TE1IWXBHbS84eGN2N0Vsa3F2TmVCc0daeHBpSUJXNWQxWHp6aXBaVmRXRkxLcTlmbHNjWkU0eVVVdmNlbi9qSy9xSDkvYW1pZ3ZpbUFBQUxmMGxFUVZTcEpXQlYrSHhKcWE1NDZCdHZXWFY5VjMzWnJ2RDloaFV1TEVZVTFzVTFEK3pmZm1pVXF2NDhOTTRZNXl6WVZQUFoxUzN2V2RIY0hQVFo4N3R1YzFaS1A4NVl3WklQOTZkK2ZtenMxOGVUbG1GTDNEMmoxSlpGdGI5ODk0YVlYNi9zMnIvQ2hWV2ppeS9zN3YvU3p1UFpvb2tiUnMvMHVPSXMwbGp6M3M2NnQzVFVYOXdhRGV2Q3piMSs2bmExZ2NueWcvMFQvMzQwdVhjZzVlQzhsZDlxbzJ2V3RENTh3N3FpWGNrRDhKVXNMSi9nejR4TTN2TFFpejFUOS9TQlYvazRreVlhbXlQdjY2aDljMmY5cHFaSVVPT0tGbmkwZXFyTFNhV09aa283aHpOUEpySVBKYktGVEducW9Dandpczh4SHZKOTRyS2xmN21wczFDNWh6cFVyTEFFWXpuTGZzOS83OS9SbXlUTzhUNi9BVU1vVWtRK3NhSTFkbU5IN1hXZDlhdnJ3ejdPNlBSeERHd3VEcmFiMnUxODVua3plOGR6RC9kUGJFMWs5dzVQeXJMMXNuTWd3R3ZneURWTjBXOWV2L3JpMXBoWm9ZZG5WYXl3b2o3eCs0OGUrdmtMZytUZ216d1RoWkJTcEhGZkpMQXFGbHdaQ3l5TGhwWkdBMHRpd1dYeFlGQVRkTVl1YUNKaTdQUVd3cGVrZHZZdDd2VFN0c0tUdjcwdDFXalI3RWtWam1XTGh6T2xnNW5Td1V5cFBGbWF1Z2puNUtsYllKck91bnA1NDMrOGZYMUVGeFU1bUZXWndncG8vUDdlNUNlM0hUNldMSkRBU3o4YnlldE1rWVgwK21pd0thREZkUzJxaTdET0luNDlvb2thamRmNDlCcWRSM3lhenRta2FlY3RXYkRzdk8wVVRHZlNzbk9Xekp0MnpwWVp3MG1VekhLMlRNNnBWWjBuUFlja2RhNGZHOTJuM1haaDErY3ZXMWFSaGFGV2VUOFNaeXh2T3QvZm56aVd6SHZnbEN1M2Y5SE9sTWdwbDFoeUlwbWZvRE5PWUZEMHN1TVkxSm4vK2t0L3oxN2h0OVVFMm5oV254ZXpTdGJXWThuZldkSndZWFBVcUxqQ3NBTDdjMEN3N3g5TVBEV1lSa0V4cHgyREdEdDVxeEJuSkJnSmZ2b3Y3ZFJmWi81RGZzYi9ueUZKelYwSTRTOE1aNzUrWUVncVZYazlvTktFNWVQc1lLWjQ3K0d4N0dRWk00T2dXZ3REOXV5SjFNK1BqUWNxcnNLb3FKK0hFWEhHN3R5ZjJER1FScTBCcWhmQitwUDV1N3RIUm91bVZsbWY3WW9TbGwvanYrNmJlUHJZT0RrU0ZRZW84c0x3MGY3VXYvZU1DbFpSZFdIbENFc3dsaldjdTN0R0Q0OU1ZcXdkVkR1TWxmUEdMM3ZHbmsvbWZSWFVIU3JuSi9FTC9xc1R5VzE5RTdBVkFFVEVOUEhzWU9ydW8yT01LcWZlcUpDK0xSaExHZFpqZmFteGlRTEcyZ0VnSXNXSUhQbHNYK3Jac1Z6RmhLd0srVEg4Z2o4NmtIN2tSQkpqN1FDYzhTVVh6dzZsSCt5ZlVFcFZ4bWU4RW9URlQ4V3JFY1FyQUY1V0ZoSlo4c2tUcVgycFFtV0VyRXI0R2Z5Q1B6bVVlZUQ0T09JVkFHZWo4ZDhNcEI4ZlNNdUtDRm1lRnhabkxGVzJIdTFQalNUekRQRUtnTE5ERmlQVGZxZzMyWjBwNnQ0UFdaNy9BZnlDUHpNMmVlK3hjUkljSjdvQjhJb2hhOXVKMUZORG1RbzRtTlhid21LTWlwYnpUQ0k3TXA1aldNMEF3S3YxRThQYTNwOGV5QnRlWC9qdTdVNnVjMzR3WGRqYWx5S0dlQVhBYTRRczhVQnZjbDh5cjBOWUMvbmxJRHFZekQ4M21NWmlVUUJlczZPejRtVHB1VVFtWGJZOXJTd1A5M1BCMkdEQmVISXdUWWFObllNQXZHN0krcmVqNDN2VEJaK1hUd3ozOEIvZEoxaDNxdkRUbytPa1l6VURBSzlYamdnK09wbzdNSll6SE9uZDc3dFhoY1VaWlF6N21hRnNPVnZDWWxFQVhwZXBNL1VmNjB2MTV3M2gyUzdqVldGcG5CL09sbjU2YkF5alZ3Qzg4Vzd6d1BIazBYU1JNd2hyZnBGSzlhYUxoeE5aQ0F1QU4xd1dNaXFaTzRZeXFiTGxVV2Q1c3JkenhzYUs1dmJCREZYbzVXc0F6QldDMzk4M01aQTNQSHFabENlRnBURjJvbURjMDRlekdRQ1liby9uUFlsTUltZWdKSncvSEtXR3MrVXNMcUFIWU5wVklaRXRkd3lsVTk1Y2tPVTlZWEhHeGt2bVl3TXBRamtJd0l5cXdudFBUQXdYVFM4T1kzbFBXSUxSUU5IOFNXK1NOQXkzQXpBVFlSMUxaRWJ5bnF3S3ZkZm5IYVZHc3FWeUVtZjFBVEJUSkQwK2tFcVhMYy8xSVk4Sml6T1dMRmtQOWszZ2xRUGdYT3FVbi9VbVJ6MjR1SUY3cloxcHVHejk4RGl1eGdIZ25LckMva1IyTkdkS3J4MXk0ckZ1YjBrMW5DbXJDY3dQQW5DdWJPMmZ5QnEydHpLV2w0VEZHT1ZNNTZsRWhoaHNCY0E1ZG4zMitGQW1hOXJjVTBlZGNFLzlXVm5Pc25lTVpCR3ZBRGpuN3NUM0RHWnlKaExXWENhc2pHRS9NNWdtamdFc0FNNnhPeEdaOXBGMDBmRFUvall2OVh6VGtYMlpFcFZ4WEI4QXMxTVY3a2hrQ3Biam9aRGxHV0V4UmdWTFBqV01laENBV2FzS24waGs4NWJEdkJNQnZDTXNZbm5iZVRLUmdiQUFtQjBFTzVUSUZpekhRejNLUThLaW5HbnZUV1F3Z0FYQXJHRTdCNUo1RHcxamVhYnptMUllbmlpUTZXQUFDNEJackFxZkhFcVhiTStFTEc4SWl4RVZiZm5FRU9JVkFMTXJBTFp0S0Z1MHBWZkczVDBpTEVZbDIza2NBMWdBekxhd1RpU3lPZE5CU1RqTDVFem55QkNFQmNCc28yajNhTlowdkxHcjBCdkNNaDIxZHp5SEUvc0FtSXVROWZoUXB1eVJ5d285SUN4R1ZIYms0NE5weENzQTVrSllqdzVsREVkNllqckxDd21Ma2VISXh3WlJEd0l3SjhJYUhjMWx5alo1b1NqMGdyQVVaUTE3Y0hRU3dnSmdqdGlaeUhqaWNDd1BDTXVTYXRkSWxoUmVLZ0Rtc0NvMHBRZUdzZHd1TEVaa1N0U0RBTXl0c0xZTnBpMEhDV3MyTUIyMUZTdXdBSmpEWE1BeXljSkV5WFMvc2J4UkVpWW5DamhsRklBNXJXVU9UT1FkNVhabHVWMVlrbWlrWUpEbDRJMENZRTVEVmsrNjZQNWhkN2NMeTVGcS8zZ2VXd2dCbUd0aGRhZUxTRmpubkxDVTZra1hjRUlEQUhOZEV1NUtGV3dKWVoxandsSjBNRjNFQUJZQWM1MndCaWFLUkc3UEJ1NFhsbm9tWFVUQ0FtQ3VFeGFWckd6WmNubkU0aTV2UTZWb01vVXBRZ0RtQWVYK2NYZFhDMHNSalJRTk1qQkZDTUI4VklYZHFZSnk5N2k3cTRVbGxUbzRVY0NTVVFEbVNWanBnc3ZQY0hLNXNLZzdoU2xDQU9hSnZhbVNSTUthdWJCSWRhY3dSUWpBUENXc0F4TjVETHFmVThMYWlZUUZ3RHdKaTFUQmNQbFp5VzZmSlJ4TDVwR3dBSmkzb3FZblZYQ3pzVnd0ck5HQ1FTYW1DQUdZdjR6dzRrVGV6YU5ZN2hXV1V0U0RKYU1Bekt1dzJNRk1VYm40dEV3WEM0dFVkNnBBTUJZQTg1bXdVa1VrckprSml3Nm1TL0FWQVBOcHJLZmNQVkhvNnBLd1AxZUdzQUNZejRTbHNtVTMvd0ZkbmJBR1NoWmVJUURtRlVmbUxSdkNtZ2tESlJOaldBRE1NeE5GRThLYUVTVUx2Z0pnbnN2Q01SZFhOdTRWbGkwVmxWRVNBakRQdnFMeG9udFB4WEt2c01aZG5Fc0JxR0RHU3lnSnA4OVlDY0lDQU1MeVRNS3lzSXNRZ1BrdkNVZkttQ1djSm9wb3JHamc1UUZnSVJJV0J0MW5VQktXVVJJQ3NBQWtpb1pyZHhPNnVDVEVxbEVBRnFJbVBGRTBNVXM0YlVhTFdJUUZ3UHo3aWpJb0NhZU5vbUVrTEFBV2hKSkZicTBKM1p1dytvdllsd1BBUW1ETHN1M1MyM1BjTzBzNGduMDVBQ3dRd3dXWHp0RzdWRmpzWkM0RkFDd0FycDN5Y3Ftd1RLbklnTEFBV0ppOE1GNkVzS2JEYU1IQU1uY0FGb3BrR2NLYURublR4a3NEd0lKMVFMZWU0ZWZXa2xBcHZEUUFMRmdIbEpnbG5BNkdXMmRWQWFnR3lnN1dZVTJ2dlNBc0FCWXVNVGhJV05OS3BJN0NJaXdBRml3eDJDNjljZDJ0SlNFU0ZnQW9DU0VzQU1EcndWQVNUbGZ3RUJZQVNBeGVTVmlZSlFRQUphRm5oQ1VoTEFBV1RsZzRyV0ZhbUNnSkFWaEFZV0hoYUdXVTBBQlVBeVdVaE5Nc0NiRTFCNEFGZ2xFSkplRTBTMmdIcncwQUMwVWVKZUgwaE9VZ1lRR3dZR1NRc0taWEVtSU1DNENGbzRTRU5jMkVKWEVEQlFBTGhjS2dPMHBDQUR3RE5qOVBUMWhZNlE3QUFvS0VOYjFFaWpjR2dBVUVZMWpUSXFoeHZETUFMQmpDclJjQVpuSTVQQjBBZ0NkQWtBRUFRRmdBQUFCaEFRQWdMQUFBZ0xBQUFBRENBZ0JBV0FBQUFHRUJBQUNFQlFDQXNBQUFBTUlDQUFBSUN3QUFZUUVBQUlRRkFBQVFGZ0FBd2dJQUFBZ0xBQUFnTEFBQWhBVUFBQkFXQUFCQVdBQUFDQXNBQUNBc0FBQ0FzQUFBRUJZQUFFQllBQUFBWVFFQUlDd0FBSUN3QUFBUUZwb0FBQUJoQVFBQWhBVUFnTEFBQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQThLcjhmOXJIc1V5WnlhMlZBQUFBQUVsRlRrU3VRbUNDJztcXG5leHBvcnRzLmRlZmF1bHRLZXlJbWcgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFaQUFBQUdRQ0FJQUFBQVAzYUdiQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRRb1JEUUFCekFicEdRQUFJQUJKUkVGVWVOcnR2ZGwzRzhtVnI1c1JPWStZUVFBa1JVbFdsVjIyKzV3K2E1My8vL0U4M0xQNjluWGJWYlpWVWtrY01BT0pSQ2FRYzBiY2g1QlVkbFc1U3dNSll2aDl5NnNmWkRjSjVzYitZc2dkTzBnUVJSSUFBQndDRkk4QUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBRUJZQUFBQVlRRUFBSVFGQUlDd0FBQUF3Z0lBUUZnQUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBRUJZQUFBQVlRRUFBSVFGQUlDd0FBQUF3Z0lBUUZnQUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUErRFVVUEFMd2hSQkNPT2ViS0FyWDZ5ekw4aXpMODV4enJxcXFwdXU2cnR1TzQ5VnFxcW95eHZDNHdCZDkyWUlvd2xNQW53ZG5MRW1TMlhUcUx4YWNjeXJMd2w4Ly9nODRGLytYVlpYcmVXZjl2dU82aW9KaEVrQllZRmNUS3M1WVdaYmJLSnFNeDFFVUtZcnlqNUw2bDNianZLb3FWZFA2L1g2OTBWQlVsVkxzU0FBSUN6ek11aytTcEtvczB5eUx0OXU3Mjl1eUtHUlovaGhWL1lTcXFpckdMaTR2YTdXYXB1dWFwbjJZaXdFQVlZRXZWUlVoSkVtU1BNdWlLTHE3dVZGa1dheit2Z1RHV0ZtV3pXYnpyTitYRmNXMmJXZ0xRRmpnODZHVWl0MzBxcW9tbzFFWWhwVFMrMTNIaVhXaXBtbVhWMWVLb3RpT0kvYm1ZUzRBWVlHUG5WSlJXYzZ6Ykx2WnBHazZtMHl5TktXZnRmcjdlRzB4eGhSRmFYYzZ0dXRhcG1uWmRsVlYwQmFBc01DLy9qWlFLbE9heEhFVVJWRVVoVUdRNXptbDlPRlU5Uk52TWNhb0xMdWVWNnZYYmR0MkhJZExFb29oQUlRRmZycjZJNFNJV3FwTkZHMmlxR0pNN0Y3dC9zTXd4aVJDYk10eVBjOXgzWHFqUVFpcHFncGhBaERXcVNQTHNrVElhcmxjQjhGbXM4blNsREcyRHdVSGpERkNpS1pwbG0zWDZ2VkdzNmtvQ3JhM0lDd0k2eVFEVHdpVjViSW9WcjYvbU0rTFBCZmw2ZnRXRzhVNTU1eHJtcVpxV3ExZWI3YmJ0bVdWWlFsdFFWamdWRlFsSzBxYXB0UEpKRnl0cXFySzgveXhWbitmTk9GU0ZFVlJWY00wenk4dUxOdm1qR0Y3QzhJQ3h4dHNTZ2toV1pyZS9QQkRtbVZsVmJHcTJuTlAvWHpDUlFoUlZaVlNlbmwxNWRWcTJONkNzTUF4TGdBcERWYXJ1OXZib2lqWVVXUTRwVlNXNVhhMzJ6OC9GMjhZRVdnSUN4eThxZ2doMDhsa1BCcnhZOXl4RnIwaVd1MzIrY1dGZ29ZUUVCWTQzRlN1eW5KOGR6ZWJ6K2xCcmZzK2U3Vm9PODdWczJlR1lXQkxIc0lDaDVPNmpKVmwrZWIxNisxMksvMXp2NWRUMEphcUtNOWV2TEJzKzlUK2RnZ0xITkxLU093OWI2TG85dm82VGRQZFZhai9zeTlrUlpFWUU2cW9HSk00bDNiK01hcXFVbFgxN095c094andxcElWQlhNdUNBdnNoYWNrU1NyTGtralNiRHBkekdacGx1MitRNTU0ZVNmTHNpekwvWXVMUnFPaEtNbzZDRWJEWVpva2pERlJCYnA3YlZGS204MW0vK0pDZkRheDRZV3ZEWVFGSGtGVm5QT3lMUE1zV3k0V2kvbGNWS2p2MkF1aTFsVDBoMmwzT28xbWs3MHZqeElLMjI0Mmk5bHNIWVpsVVlnNTRJNC9vZmc4eldhejFXNWJqcU1vQ3BWbGpyMTVDQXZzQmtvcFl5ekxzbml6V2ExV0s5K1h4QW1iM1hxS2N5N0xzbTRZcnVlMTJtM0hjZGd2VlhJS2JXVlp0cHpQd3pCTWsrUlI2bFRGWjNNY3A5VnVPNTZuRzRZaXkrS3Z3RGNLd2dJUE1xZWloRlJWRmNmeEpvcUMxU3A2Z0FaVkg2a3FWVlV0MjNZY3A5RnFXYlpkL2RwWkdhR3RzaXhYdmgrRm9UaTBLSEZPZHY3aHk3SzBMS3ZSYk5xTzQ3aXVxbWtjNXhNaExIQy9xejlLYVZFVXdXb1ZiN2ZoZXIzZGJqK3lrL3E5cTByVHRFYXphVnBXclY3WGRmMVR1MWJKc2t3a2FiVmF4WEVjQnNGbXM5bjlBVWJPZVZXV3FxYlZtMDNUTkJ2TnBxN3JtRzFCV09BZVZuK0VrQ3pMcHVOeFZWVys3MzkySi9VdlhFOXh6bDNQYTdaYXFxbzJtazFDeUpjMFRpQ1VLckljaHVGMnMwbVRaRDZiUGNvR1hGVlZFdWZOZGx2VHRGcWpVYXZWdUNReEhQU0JzTUJucUVxVzVlVmlzUTZDUE04RDN5ZVBzZm9UVnVvUEJvWnBXcmJ0dWk2N3Z5UEhIMmFPNjlXcUtNdlplSnhtbVV6cGp0ZUo0bSswSGNlMmJjTTB6L3A5OHY0ZjhUMkVzTUN2NWJBc1M1eVBSNk1ramtXVFlpSko1REVXVFpxdW4vWDdobUU0cnF1cTZzTXRtaWlsalBOdEZLVnB1bG91ZmQ5WEZPVlI5dVlVUlhFOVQ5ZjFzMTdQTUUzMHNZR3d3TDlVbGFLcVNaTE1KcE40czBtU3BDeExhZWRGQUdKYjJxdlZPdDJ1YVpxR2FZcXJLSGJ6QkRqbmVaNm5hYnJ5L2NWMEtoR3k0N2VmMHZ0Q0RjTXdUTXZxZEx1MWVyMG9DbWdMd2dJL29xanFkck1aM2QwbFNWTGsrYU9VV2JLcTRwdzNtczF1cjZjYmhxcXFqMUptK2U0Q3hLckswblFkQkpQeHVDekx4eXFGVlZWVk40eXpmcjllcjJPUkNHRUJpVkphRnNYdDlmVjZ2WDZzVGdQaTkvYjYvV2FycFJ2Ry9weS9FeXZUTUF4SHcySDJTSWVOaEVOTnkzcnk5S2xsV2VnR0FXR2Q5REp3SFFSdlhyOStyS0ZidFBIc0RRYnRUbWR2TDQ0WGs1MXd2WjVPSnVGNi9WamFZb3oxQjRQQnhRWG1XUkRXaWRwcWRIYzN2THZiL1hwSHJMa2MxejNyOVZydDlxRjA3S1NVcGtreUdnNTkzeWVQMFltQk1lYTQ3b3ZmL3BhaUNRU0VkV3EydW43elpqNmI3ZjVJRGFYVWRwd25UNThhcG5tSU5VZUVFSW1RbTdkdjE2dFZVUlM3ZnltaDZmbzNmL2pEM2s1SUlTeHcvem4zOXZYcjVXS3hTMXVKd3pGZXZYNTVkU1ZUZXVoN01jSVh5L2w4TkJ4V1ZiWFRQNGR6V1ZYLytELytCNXB0UVZnbk1iZGErZjdyNzcvZmhhMDRsOTUzZmVuMmV0MnpNNG1RWTZya0ZoWmVyOWVqMjlzc3o2dXkzTkVMVnM0Tnkvcm1EMy9BZmhhRWRlUzZLdlA4ejMvNjAwTW5sZGlvMW5SZFU5VnVyOWZxZEVReUgrc1lJTXR5SE1majRUQkpFbkVYN0E2ZThMUGYvS2JaYXVHOUlZUjF0TWl5L0YvLytaOUZVVHhjRm9tdUw1WmxhYnJlUHorM0xLdGk3QlRhUDRtRFBseVM3cTZ2NHpqTzBqVExzZ2Z0WTBNby9jTy8vWnM0QTREdk5vUjFoQmtWckZadmYvamhJYjdmblBPcXFpekxNa3pUdEt6K1lDREw4bW5XT29xMTluS3hXQzRXVlZWRllTaGM5aEMvcTFhdnYvajZhMXlNdURNVVBJSmRKdEx0OWZXOUcrUkRLd1ZOMDVxdGxsZXZLN0pjbHVYSlpwSDR3MXZ0ZHJQZGpyZmIrWFNhWmRsMnN5bkw4dDVydUxhYlRaN25DbnJHWTRaMWZOT3JKRWxlL2YzdjRvVGcvV1JtV2NxSzRyaXViZHVOUnNOeUhPbDkyVHI0Y1owb3kya2NyOWZyVFJSdG9paE4wM3ZzejBNSWFYVTZWMCtmWXBLRkdkWlJRU2tWUGEzdWEvV25hVnFqMi9VOHozWWMwN0x1c2V2TE1mRmoyNGxlcjlGc3hwdE5GRVhCYXBVa3liMnNFeGxqNFhxTjV3eGhIV0hxSkhIOGhXK3ZPR01WWTZacGlxV2ZZUmhpeHhmRCs4Y29YbEdVV3JQcGVGNmoyZHh1dC81aUVkNUhqMmxLU0ZXV0VtcXlJS3hqb3ZxeTZZOUlPZHR4enZwOXk3STBUVk5VbFdOVzlZblBrRmNWSVVUTVNWM1BLNHRpTWg2SDZ6Vmo3UFBLNGtUbjFUaU9iY2ZCTmhhRWRWVFpJa2tTK2J6L1I4NmRXdTNKa3ljU3BicW1pYTR2Nk9UN0plczRTWklNd3lDbXFlazZaMncybXkzZXQybitqSitXWlpuamVSd1JnYkNPQTBKSVdaWmNrajVqNFdDYTVsZS8rNTJvamVUdjVna1l5ZTlwd3NXNWFQdDFmbkhSSHd3bTQvRjBQUDVVWndsaFlVRUlZUjNYa3ZBVGI1ZjVRSlpsZi8zTFgyelhmZkgxMTZMRk9oN21mWTRsbE1xVXpxYlQ2V1RDcXVvelpsaGl0WTV6aFJEV3NRM29uejBSS010eXZWcjl2Ly8zLzVxbStmVDVjOU95cXZ1cmpUaFpSRTNXRDY5ZWlUMnNMNXEzWWhTQnNNQlBrNEt4ZUx2OTlyLyt5ekROOC9QelJxdUZsNE9maHpoNGVIZHpFNjdYbUJsQldPQWhsekNFWkduNit0VXI5ZnE2TnhpMDJtMmszQ2M5dlNnTTcyNXU0amgrMEdPR0FNSUMvNVI0WlZsZS8vREQ4UGEyMVc2ZjlmdXlMS09sM0w5NlZxeXFLc2FDMVdveUdxVnB1dnM3eEFDRUJTUlpVVGpuczhsa09wbTBXcTF1cjZmcHVpTExaRmNYYysyNXA4UjJlRm1XeS9sOE1admxSYUVveXFNMHBBWVFGbmdIbFdWSmtsYXIxV3c2YmJiYnpWYkxkaHhOMCtpcGFvdFN5aGpMOHp5SjQyQzFtazJub2lnRXFvS3d3QjVOS0RSZGo4SXc4SDNkTkh1OW5tbFpsbVVwRDNsajgzNnFhcnZaeEhIc0w1ZUI3OHVZVWtGWVlKKzFwYWhxV1JRMzE5ZVUwdTdabVdYYnR1TVlobkhFMmhMYjUyVlpyb01nUzlQWmRKcW1xVXlwcW1uNFNrQlk0QUFTV0p5TW00ekhsTkphdlc0N2p1dDVqdXRLbkIvVDhVUFJjU0ZOa3ZWNm5jU3g3L3RGbm1QMUIyR0JnMFJvSzFpdGZOLzNYTmQySE50eG1xMFdJZVRRYTdoRTJlY21pbGErbjZicE9nZzRZeFNxZ3JEQW9TUDZwMnkzMnlpS2RNTllyOWU2cm9zZXlwOTlZT2h4TFV3SW1VMm5teWhLa21RVFJXS2VSWFo3d3lPQXNNQ0RyeE9MUEYvTzU3SXNiNkxJTU0xT3QrczR6cTd2OWZ1Q3oxOVYxZDNOVFpxbW9qZnhoOFV2Z0xEQWNXcExGQ2lGNi9VbWlxTDEyclR0UnJQWjZYYkxvdGhQYllrM0Nac3duTS9uMnloS3M0eFZGWGwvbHlxQXNNQkpyQk1sU1VyVE5NdXlhTDJlanNmdFRxZlY2VkJLOStka3RXZ0h1bHF0NXJOWnN0Mlc3KzlKeFpFYUNBdWM2SVJMa3FTcXF1THQ5amFPeDhOaHU5UHA5SHFxcWo2dXRzUWRaZjVpTVpsTThpejdNUFdEcWlBc0FDUkprampuUlZHTVI2UHhhTlJxdDN1RGdhN3J1Ni9lb3BSV1ZUVWFEdWVUU1lsMkZBRENBci9LY3JHWVRhZjFlcjEvZnI2emJ1V0VrRHpQWjlQcFpEVENWanFBc01DbkxjcWlLRnAvOTUyaUtNOWZ2TEJzKytFMnVUbm5XWmJkM2R3RXE1V2lLSTlvSzAzVDhqeEg5Q0VzY0pDSTAza3YvL2EzcXFxZXYzaFJxOWNwcGJJczM4dWNTM1JUeU5MMDFjdVhvc3Z3bzVSOWl0b0lYZGRmL1BhM2xOTC81Ly84SDV6cGdiREFZV3VMVW5yOTVvMGtTWTFHNDhuVHArejk5UTJmWWE1M1YzSnc3aStYdzl0YlVhRys0eG9GOGJGVlZaVUk2WFM3L2NGQUVtMnowSHNhd2dKSG95MUprb0lnV1A3SGZ6aU9jLzdraWE3cnFxcCtaQjhiWWJjaXp4bm40N3U3bGU5emNjSm10d3RBenJub2JDSEw4dm5GUmExZWw5NWYvQ1UrSlFJTllZRjN1WElFZjRSWXVDVko4dks3N3d6VDdKeWRlWjZuNmJxaUtQL3FsYUpZVjZaSmtxYnBiRElKdy9EZFlacmRlb3B6THN1eVlSaUdaZlY2UGR0MTJjOXVvaVdTOUJsQndoVVVFTll4Y2tTak55RkVWcFE4ejIrdnIxVk42M1M3anV1YWhxRWJ4b2NiYUQ1MGZkbHVOdHZ0ZGpHYkpVbXkrOE0wSCs0Zk5DM0xkcHhPdHl2S05YNXg5Y2M1LzR3Z1lWWUdZV0dHZFNEYWt1V3FMSWUzdDZxcTFtbzFyMTYzYk50eEhFbVNraVNKdDlzb2lnTGZUOU5VbHVYZHE0cFZsV1hibG0yN3RWcTlYdGMwcmFvcTNEWUVZWUZUbmpnU3NSNWNMcGVyMWNweFhjZDFGVVdKd25BVFJmbGpOS2hpVlVVSXNSM0hyZFZjMTNWY1YxYVVxaXpMWDkxVC82eFpNSmFFRUJhV2hJZUhtRUJGWWJnT0FpckxFdWVVMGgycnFpeExSVkVhclZhOVh0ZE4wM1ZkempsakRLLy9JQ3dBZmdGUkE3RmpRUXNyS1lweWZubnBPSTVobW9aaE1NWStlZlgzV2N0MjdHRkJXQUI4Z3FwTTB6enI5eTNMMGcxRHJFOC9jNk1LWlEwUUZnQVBnU2hLcU5WcWc0c0xWVlhWOXplYkhWUFRlZ0JoZ1dOUWxTUko3VzYzUHhpSUxYOVJsWXJyWXlFc0FQWkxWWnl4NTE5OTVYcmVqNXRsNzQvYUFBZ0xnTDJncWlyTE5KODhmMjVaRnRyNFFWZ0E3SytxMnUxMnQ5KzNMQXN6S1FnTGdEMkZFTkx1ZEhxRGdhcXFIMDc4QUFnTGdQM3lsS2JyN1U2bjIrMVNXVDZJVzhnQWhBVk9DTkgxUlZFVTB6VGJuVTZyMjJWVjlUbVZud0RDQXVCQlZVVXBOVTNUdEt4MnU5MW90Zkk4TDRzQ1R3WkFXR0NQUENXNnZqaU9vK2w2Ly94YzAvV3FMTE1zdzhNQkVCYllHMVV4VmpIbXVLNWxXWlpsbmZYN2tpUXh4dlppVm9WOWZRZ0xnQitGSUVtMWVsMDNqSHF6NmJxdUpFbjd0VXVGOWpJUUZnQWZsb0dxcHAzMSs3VjZIZS8rd0dkQThRakFMbEVWUmR6dHZLZEZWV2d2QTJFQmNEQ3JKeHo2Z2JBQUFBRENBZ0JBV0FBQUFHRUJBQUNFQlFDQXNBQUFBTUlDQUFBSUN3QUFZUUVBQUlSMVFxQ0VHc0VGRU5aQklNc3lad3l0Uy9aY09ySXNmK1lKUjg0cHBiakxad2VnVzhPRHBnQ2hsQlpGNFMrWHdXcFZsaVdleVg2R1NaYmxMTXZXVVJTRm9heDhXbEp3emplYnpXd3lzVjFYMTNYcC9UMnZBTUk2TUZXbFNiSU9nczEyRzYzWGVaN0xzb3duczEvckMwb2xTY3J6ZkRJZWkyRGxlYTRvbjV3VTI4M203WGJyMVdxV2JkY2FEY2R4T09mUUZvUjFHRGxBQ05sdXQ0dlpMRTNUN1daVGxxVk1LV3kxaDJHS3d0QmZMTEk4WHdlQitNZlBzTlVIOFFWQkVBUkJ1RjdyaHRGc3RieGFqVkRLY0lrR2hMV2ZpQjJRbGU4djV2T3lMTGViamZncVExWDdwU3BabGpoZnpPZnJJTWpTTklsai90NDQ5ekpmMjI2M1VSUnR0MXRkMTEzWFBldjF4RTFsZVBJUTFoNnQvcmdrM1Z4Zng5dHRudWRabW9wL3hNUFpxemdwc2x3VXhlanVMbHl2OHl6TDg1d1FRaWdsOS8xOWtHVTVTOU0wU2VMTlpoMEVpcW8rZmY1Y1ZkWDliVnNJWVoySXFtUkZ5WkxrN2R1M1paNm5hY29ZSS9jMFhJUDdOVWllWlMrLy8xNTRxcXFxaHg1UkNDR0VrSXF4eldaRENQbjdkOS9KaXRJZkRKcXRWbG1XMk42Q3NIYWRBNXFteldlejJXU1NwbWxabHVJZVVMelkza05WcllQZzl1YW1Lc3VpS0NUT3BkMkdTZnl1TkVra1F0Nys4TVB3N3E3WmFnM096OUhTSHNMYXlRNElwWklrelNhVCtXeFdGTVdIN3h4VXRWK3FvbFNSNWVIZDNYS3h5TFBzeDRYWVk0V0pFRW1TeXJJc3kzS1VKTlBKcE5sdTkzbzlzVTVFdkNDc0IxRlZVUlRENGRDZno4dXloS0gyRTFtV2l6d2YzOTR1Rnd1eDlOdTNUOGc1TDR0aU5oNHZwdE5hclRhNHVOQk5FeThUSWF6N0pNdXk4WEM0OHYwUDJ4TjRKbnVuS2tvMzIrMTBQRDZVTURIR2ZOOWZMcGVlNS9YUHp4M1h4Wlk4aFBWRkk2RWtTVkVZVGllVHRlL0xtZ1pQN1cya3Rwdk44TzV1RTBXSGRVUkdXSFd6Mlh6M2w3ODRqbk0yR0RRYURld3dRRmlmT1BSeFhwWGxKb3B1YjI3eUxKTmxXZEUwUEpiOVhGdUZVVFFaRHVQdFZ0VzB3eTE1VTFVMXk3STNyMTY5bGFUTHAwKzlXazFUVlVLcFJBaU9vRUpZdnp6V1NaSlVGa1dXWlZFWTNsNWZVMHFwTEg5ZTZUTjQyRENWWlpabG16QWMzdDVXakNtS29oN0ZpQ0tFZTN0OXphcnFyTjl2dGxxNnJpdXFTZ2pCYWhIQytxY2NTSk1rTDRyNWRMcGFMaVZDRkZYRms5bkQxVk1jeDNtV3JZTmdQQm9waWtJcFZZNnU2bzFTU2ltZHoyYlR5Y1R6dk41Z29HbWFicG95cGFpRU9HbGhpVHZUdDV0TmxxYXoyVXpzZ01pN25WSnh6bEhEOWF1ZTRveUZZY2lxYWp3Y2JxS0l5cksyMnluVjdzTWt0TFhkYmwvKzlhK21aWFY3UGNNMGJkdFdGRVY4R0FqcmhISkExQ2lzZkQvTHN2bDBtb21OcXQycWlqSEdPVGRNMC9XOFBFMmpLT0tjbzByK0g4TWt5N0k0UUo1bDJXUTBLdktjeXZLT0o3K01NY2FZNDdxV1phVnB1b2tpYVllSEdRZ2hpcXJtZVg3ejVvMnNxdDF1MXpCTjEzVjF3NUJPc28vTmFRbExqRnBSRkcyaUtFbVN4V3dtSExGN1ZiR3FxamVicG1VNXJ0dG9OTklrV2ZsK0hNZmhlbDBXQlpYbFU1NXdpVGQ5OFhhNzNXeWlLQkt0eEhZLythMnFpbExxZVo1cFdmVm0wM1hkN1hZYitINmU1OHZGZ3Urd2FaODRCQ1p4UGg2TmlDUTFtazNIZFhYRGFEU2JwOWJIaGdSUmRBcC9weXpMRWlHcjVUS080ekFJdHRzdFkyekhMNVU0NTZ5cXFDeTMybTNETU9xTmhtR2F3bDlpclZFVVJiaGV4OXZ0eXZmVE5KVXBKY2MxNGVLY201WjE5ZlNwWmR1L3VLaWhzaXhKVWhRRVlSUnRvbWp6R0xOT3pubFZWWXFpTkpwTjI3YmRXczE4SHlieFNZcWlDRmFySkk2RElFampXRmFVSFk4dTRndWo2M3F0MFRBTm85RnVxNHB5SWllcmoxeFlZbWpLc3l4WXJhSXczRzQyYVpaSmo1RURaVm1hbGxXdjExM1BzeDFIMDNYTzJFKytZZTlPekZaVnZOMXVOcHRndFFyWGExbVdqMmFkK0srRTlhN2pCZWZMeGVKZG1OTDBzVlJsR0VhejFYSmMxN1p0VmROK1ljT0lFSm5Tb2loRW1OWkJFQWFCckNpNy83U2NjMVZWYmNjUjgzVGJjWXFpT0c1dEhhMnd4T0kvMlc0WDgza1loaisyRTluNVlNaXF5bmFjZHFmanVLNm02NnFxL3VxbUthVzBZaXpQc2lTTy9lVlNsRzRmUVYrdG53dUxFS0lvU3BxbS9uSVorSDZXNTBXZVN6dXZuQlFsWFY2OTNteTFYTS9UTk8xajlyWS9oQ25lYnBlTFJSZ0VmUGRoNHB4eHJpaUtydXUyNDNTNlhkdDEyZkdlckQ1Q1lWRktDYVhieldZNkhtODJtL0w5RWVWZHE2cXF1Q1RWYXJYTzJabGxXWXFxaWtuRUp6bFhrcVE4ejh1cW1rOG1LOTh2OHZ5ZzZ5MytVVmlTSkNtS3N0MXNwdE5wdEY1WFZWVVV4ZTdua2xWVlNZVFVQSzkvZnE1cG1xS3FzaXgvVXJhTE1CVkZrYVhwY3JGWUxoYTczMjBRejVZUW9tcWFhVm5kYnJkV3EzRkNqdStJNGxFSlMyeUNybGFyNldpVXBtbkZHR2RzOTd2WDR1dmVhclhPQmdOVlZXVlovc0xDUDBKSVdaYXNxdFpCTUJvT1JXSWY0cTY4RU5hejU4OHQyNDZpNk83NlduU25ZbzhScHFxcVpGbHVkVHBudlI2bFZGVlY2ZjE1ck0rTGtTUkpWVmt5emhmeitXdzZMZko4OTJFUzJwSmxXZFcwczE2djJXb1JRbzVwdG5Va3doSkc4SmZMdTV1YmQ4cmdYSG9NVmNtSzB1bDBCaGNYSC9abzczM2JJdDV1YjY2dmt5U2hoMWE5eFRtM2JkdHgzWFVRL0dOem5rY0owL25GUmFQUklKVGViNWpFTGlRaFpCMEV3OXZiTE1zZWF3dFN6T2dIRnhldGRsdFIxZU9ZYlIyOHNFUlY0WHcydTd1OS9kUTExLzJtb3F3b1Q1ODk4Mm8xTWNvOTlHL01zK3oyK25xOVhoOWMwZWtqSGpSaGpCbW1lWGwxNVhuZUxxWjFuRmVNL2YydmY4M1RsRC9Ta1dhUklMVkc0K256NTQrWUlCRFd1Mmk4ZnZreUNzUEhuVFVZaHZIMU45ODh5cVk0SWVUMjdkdmxjb216WnI4YUpzdTJmL1BWVitLbHg2N0RKRWszMTlmejJleHhYL2dxaXZMTjczOHZIL0kyNktFS0s4L3pWMy8vZTVabGp6VzVJSVJVWmRudDl3Zm41NTkvWS9BOWZSSkprdnpGNHZiMmxuUE8wWGozSncrSGtHYXplZlgwS2YrQ0xhcjdtbGNHUVhEOXd3L1M0MzBTc1JTNGZQS2sxVzd2WjRQRG94SVc1enhMMCtzM2J6YWJ6V050UEl2ZmUzNXgwV3EzSlVyM1JCQmlZWmdreVEvZmZ5K0tjUjVsSjN0L0VCUGV5NnVyZXJNcFU3b25uWWhGbU1MMWVuaDNseWFKSkVtY3NVZlpiTlUwYlhCKzN1cDBEdXQ3Y2tqQ3FxcHFkSGMzbTA0ZjdlV0xvaGlHY2RicjFSc05hUzlQY29rM1JFa2NqOGZqOVdyRkphazZwVzdPb3RhVVVxb2J4c1hscGV0NTdHZlZ1WHNTSmtwcEhNZmlMRGVycW1ybjFoQkRtbTNiNTVlWHJ1Y2RTZ2ViZ3hIV2RyTzV1N25aYkRhN1BrL0RtS3dvaXFwYWx0WHI5KzFEdUlYOHcrbnV4WHkrWEN6S29pakxVanJlUHBZaTAyUkZrU210TlJxZFRzZDJuUDAvcXZMaC9ySHBkQ3BlbTVaRnNlTXdNY1lVUlRtL3ZHeTEyd2Zock1NUTFpYUticSt2NHpqZW1hMUVBWUdtcXJwaHVMVmFxOVd5SEtjOHRITVBvZ1pTRkpISFNaSm4yWkZwUzRSRFZWWGRNR3ExV3J2YjFUVHQ0RTdWS2FwYTVQbHF0Vm90bDFtYVpyc05rL2lxbjE5Y25QWDcrKytzZlJjV0lTU0pZN0ZwdFJ0YmlTVzlwbW1PNjdxdTIyeTFsQU8vczFlOEV3alg2M1VRYkRhYkpJNGZva1pzOTdzd0VpR0dZVGlPNDNwZW85bFVGRVZNSkE4M1RJUlNmN0dJd2xCMEU5bGxtQmhqVDY2dTJ0MHVabGhmUkZtVzF6LzhFQVRCRG16RnFvcFFhanVPNjdxVzQ3UmFMWEVhOWpnbUk1UlNXWmJETUJSZEVNTDFXdlJzT2JnSmw2aFF0eXpMcTlkdDJ4YjdpY2NVSmlyTFVSaEc2L1YydXcyRG9Lb3E4dkJoNHB6THN2enN4UXZYZFNHc3ozK0lOMi9menFaVDlTRXJSOFNlbEN6TDRyeTc3YnJPSVd4VWZmNitpYUtrU1JLdTEzbWV6eWFUUXpub0l5SkNLVzExT3JadFc3YnRlVjVaVmZ4SXcwUXBMZkk4V0szRXlYQlJNZitnWVdLTVdaYjFtNisvVnZlNFVHdXZoWlVreVhkLy92UER6YTNFQkVyWDlYYW5ZMXFXNjdxYXJ1L25lNlY3endkQ3FjVDV5dmZMc2x3dUZ1RjZUZS83a01yOWhrblQ5WDYvTHl0S3JkSFFWUFVVd2lUNjJGUlZGWVZobHFhTHhVSjA4WDY0TUpWbDJUOC9QNys0Z0xBK2g3OSsrMjJhSkE4eHFvaSt0N1p0OXdZRFZkTnMyeFliUGFkV0x5NisrbkVjaXpuWGJEb1ZyNjcyNU9NeHhzcXliRFNiclhaYjB6VHg5djBFK3dLTEl6WHhkcHZudWI5Y3JwYkxCKzFqODgwZi82anJPb1QxeWRPcnYvenBUL2MrTzJWVnhUaHZ0bHJkYmxmUk5ORk04c1RQdFh4b2tKSW15U2FLcHBOSmtlZTdiNlQ1ajFSVnhTV3AwK2swbWszZE1BekRRSmhFMFdtV1pWbVdiYUxvN3VibUlVWVh4dGo1NWVWWnJ3ZGhmUm8zYjk4dUY0dDd6Qm54cHUvaTZzcHpYWEhkRzNMZzV5bkJxaXJQOHppT2g3ZTNhWnJLTys4dVg1YWxvaWk5ZnI5V3IydTZMdHJ0STB3L0dWNnFxc3F5TEluam03ZHZ5N0s4OXpEOXIvLzl2L2Z6bWUvcEpSU0Uwc1Y4Zmk5cjlROTlieStmUG5WZFYzbmZ5aFk1OEl2UGlsQ3FHNGFtNjE2dGxzVHhhRGdVYlpwMzhKWktuQmQ1K3Z5NWJkdmk5bENFNlplZmxDUlJTazNUTkF6RHE5ZTNtODFzTXZHWFMwM1Q3aVZNVlZsdU54dlJaQkV6ckk4aVM5TS8vK2xQWDM2WlRWRVU5VWJqck5kelBVODYzbEx2QnlWTmt2bHNOcHRPSDI3VHBLb3FyMWJyRFFhdTYrNm1PYy94U1N4TDArbDR2Rmd1djd4TEd1Zjg4dXFxM2VsQVdCL0xhclY2OCtyVkY4NndXRlgxejg4SDUrY1NidnIrd25tNHFxNTgvL1hMbHcrVWJMMSsvL0xxNmtUdWZYbTRsU0loeEY4dTM3NTVJMzNaWStTY04xdXRxMmZQc0NUODZJMk1QUC95WVpiSzhtUTBtazRtdmNHZzAra29pb0pzK05Ra2tEZ1AxK3ViNitzOFRlbkR6TEFJSWRQeGVEb2Vuejk1MG1nMkg2VmYxUkhNc0lMVmFqSWNicmJiZTdsa2MyL1BET3pwREdzeUdvMUhvL3RhR25ET2k2SVF6VFFNdzhDSzQyT2VXRm1Xd1dvMXZMbGh1N3B1UzlRcnRMdmRzMTd2dnJaampqNU1WVm1HWVhqejlxMjQ4dksrZnJKbFdWOS84dzFtV0IrOXFYR3Z0VGJpYk9COE5wdU1ScmJyWGoxOXFtcWEySDNIWVA3VEoxOVZaVkhNWnJQNWRDcU9hOUJkaVVOb2NUbWJ6Y2JqZXFNeHVMelVORTFjeTRndy9kTzNXWkxLc2l5S0l2RDkyNXNiOFlqdWQvNjd0MGVkbEQwT3l2My9URVZWMHlUNTY3ZmZ5ckw4OVBsend6UlZWWDIzVkR6aGxCQm45UE1zeTdKc05wMzZ5K1VqM3Q1S0tGVW9qYUxvMnovOXlYYWN3Y1dGWVpxNnJrTmJvbWcyenpMRzJOdlhyN2ZiN1lmTGZrNEg1UVNqTHQ1MnZmN1g1c051QUFBWU1VbEVRVlQrZTFtV08yZG5qVVpEMVRSZDEwK3QwbDFzMHpMR05sRlVGTVh3N2k3ZWJoVkYyWWNjRUZmc1pWbjIrdVZMUXVtVHAwOE4welFNUS92RnE1aFBJRXhGVVlqQ3E5SGRYWlpsc2l6ZnkxNFZoSFV3Q0cySjdkNUdzOWxzdFhSZE55M3JGQTUvaUxPMWFab21jWnhsMmUzMU5XZU15dksrRGRmaXFMWWtTZGR2M2tpUzFPbDJhL1c2NlB4ektrYytDY215TEUyU01Bd1hzNWxvc0hHYXFqcDFZZjNqdnNuSzkvM2wwbkhkWnF0bEdJWlhxeEZLK1RHbWhEanhIMFZSbnFhcjFTcFlyYXFxVWhSRjJ1LzJXR0owV2N6bmkvbmNzdTN1MlptcXFsNnRKaTZMbDQ0M1RHa2NoK3UxNy90aVAzRi9qbmxDV0krdnJlMW1zNGtpWGRlYjdiWnBtbDZ0cHV2NjBSUUhLWXBTVlZXNFhzZHh2UEw5N1dZamNVNFBhbVVod3BURThadlhydzNEYURTYnR1TTRybnMwWVJJelg4NzV5dmZUSkZtdFZzbDJ5emlIcHlDc2Y1a1BSVkdNaDBOTjAyekhjVDNQOVR6WGRjdXlQTkI4RUh0Mm9yOTdGSVpSRklrR0dJZmJjZlJkSy9ROEg0OUdtcTQ3anVPNmJxMWVOMHp6Y0x1WUVVSVVXVTZ6TEF5Q0tJcWlNRXpUVklRSnJvS3dmajBmcXFwYStYNFVob1pwMnJiZGJMWEU0WjRENm13cHZ1NVpsazBua3pBSWtqUXQ4dnlnVmZYek1KVkZzZkw5Y0wwV0svcEdzK200N21GcFMxUWt4TnZ0WkxrVWE4QXN6MFY3V0NRamhQVnAreWFpQ1ZHODNVWmhxQmxHdTkxdU5CcFVsdmU4ZDdoSTVrMFV6ZWZ6VFJRVmVWNlc1ZEdvNmlkL3FhakpFTDNxZ3lBd0RhTjlkbGF2MS9kL2RQbXdFVEdielpJNHp0SlUzR3dLVlVGWVg1UVNraVNsYVpxbWFiTGRqb2ZEWnJ2ZFBUdWpzcnlIdS9KVWxpWE9OMUYwZDN0YkZrVlJGRlZWN1cwcjBmdE5maTVKV1pwbWFSb255UjBoWjROQnM5bVVGYVhhdjlGRjdLbjd5K1ZzT3MyelRGeDhlNVFqeXYzbjQzNGV6UmtOaDlQeGVBOFBaNGlYTllTUVJxUFJPejhYTFpYMzRTMlYyS3hkekdiajhWaVNwQ0xQcFJQdVRzRTVWeFNGRU9MVmFsZlBudEc5dWZuNXh6Q05ScUx4MFg1MnA5QjEvWnMvL2hFenJHT1ljSWtLb09WeTZmdStydXZQWDd6UURlTVJxeG5GY1AzRDk5K0hZU2h5Z0h4eGc1RWpDSk13bE5qaFVsWDFOMTk5cFQxcWJUQ2x0Q3pMbTdkdlY3NHZQcDZJRVk1TVFsaTd5QWZ4MVUrUzVMdS8vSVVROHV6RmkxcXR0dU44RUxmU3YzM3pKb25qRDc4WENmQ1RxVlpabG1WWmZ2dm5QMnVhMXIrNGFMVmFPeTQ2SllTVVJmSFh2Lzg5enpMeGU5SHpDOEo2ekpUZ25MOSsrWkpTMnU1MG5qeDl1b010ZVVwcHNGcmQzZDZLeTV6Qng0UXB5N0szcjEvZnZIblRHd3pPZXIwZE9FdVc1ZVZpY1hkemM5QTN2RUpZeHdsamJEcVpUQ2VUV3IxKzllelpRN3pyRWZNM2Y3RVkzZDJKVXhxUE5jRWtoRFJiTFVWUlJuZDM5S0RlYWpIRzdtNXVSbmQzclhaN2NINHV5N0owNzVNZHpnbWx3OXZiNVdJaHJuMThSRTFmUFh0MmQzTnpOS2ZOSUt4N3ptUkprdFpCOFAvOXgzOTR0VnAvTUxBZDUxNldhZUt5bi9GdzZDOFdaVlU5VmpjRktzc3lwYjErdjlsdXE2bzZ1cnM3eEhwYThlam1zOWw4Tm5OZDk4blRwNnFtZmFneS8wSkI1SGsrR1kyV3k2WEUrU084bitWY2pDZWFycC8xZXVLRTdQRDJWdnc3aEFWK1dWdWlET3J2MzMxbjJuYXYzM2M5VHh3RSs2UjhFQnY4VlZVVmVUNGFEb1BWNmwzcDgyNW5OSnh6OFVzMXcrajMrL1ZHZzBzU3E2cER2eDFlcUdTejJmelhmLzZuVjZ0MWV6M1g4OFJmK25saFN1SjRPcG1zMTJzaWZ2aHVCU0hDUkJYRnNxeGV2Ky9XYWhMbmpERjJYQWN0SWF5SDFKYWlaR242K3Z2dlRkTnN0ZHYxUnVOajdxMGloRWlFc0xMTXl6S0tvdVZzRmdTQnFxcTc5NVFvRGxBVXhmVzhWcWRUcTlmTG9qaDBULzM4YWF1YUZzZnhxNWN2TGROc2RidjFlbDMwZDVSKzdjNGU4ZUt2eVBQTlpqT2ZUcU1va21WWjN2bk1WNVRhcUpybXVtNm4yM1U4cnlwTGRseGhnckIybUErcVdoYkY4TzV1TWg2M094MnZWck5zVzdRQS9zbk9nbGc1Vm1XWkpNbDJzNWxOcCtKbVFFM1RkcHdBa2lRcGltSmFsdTA0b21HeG1PZ2RkNWp5b2hqZTNvNkh3ODdabWV1Nklrdy8xOWFIQmxWUkZHM0MwRjh1NHpqZWZSOHg4YWxVVmJWczIzR2NWcnR0V0ZaWkZFY2NKZ2hyZHdraFJ1elpkRG9lRHJ1OW51MDR0bTNiamlPMDlhN3pVWnBHVWJUZGJKYUxSVldXdTIrbElHWlZobWs2anVNNFRxdlRvYkxNcXVwRVhuSjlPQll6SFk5bjQzRzkyZlJxTmR0eHJQZGQwc1FxTWt2VDlYcWRKc2wwT2hVYlZUdFdGYXNxUXFscG1vN3JXcGJWT1R1VEpJa3hkdHlxZ3JBZUFiR1Q1UytYaS9sY25LbldkTDNlYUtSSnNnNkM3WFlickZidk9oL3RWbFZDbXJiamVKNW51MjZ0WGhmWEMxY24rVDVlYUN0WXJmemwwdlU4cjFhemJkdXIxOFAxZXJ2ZGJqZWI1WHd1SzhxT1YzK2NjOUZuc2QzcGFJYmhlWjVYcngvQlppS0V0ZStJbDBkcG10N2QzcXFxdW9taU5Fblc2L1dqdkZTcUdDT0VkTHBkeTdJc3gzRmRsekhHVGlrSC92c3d4ZHR0dEY2YnRsMWJyOE13VE9KWWJIdnRXRlZWVlptbTJXZzJkY01RQlNXTXNiSW9UaTBvRU5ZakwwQVlZL1Baakx4Zk0rNDRCMVJOdTNyeVJGWVVyMWJUTkkweGhoTEhuNGRKVWRVOHkyYlQ2ZTViS1RER09HT081NGxldUs3bmlVVjZkYW9qQ29TMUZ5UDVqbk9nTE10M2Jld053M1hkRHkvbUVZdi9SbHM3UGt3and0RnN0UnJOcG1FWXBtV0pZZWJFSjc4UTFna2hlZ09jOVhwZXJXWlpscWlXUExWTGFQWWNvU1F1U1pkWFY3WnRpNXZvcEY4cnNJQ3d3RkZSRklXbTY0Tit2MUd2cTdvdU91UkFWZnVtcXJJc1RkUHNYMTA1bnZlaDhnNHhnckJPS0FmRVp1MlRwMCs5V2sxNDZzTi9oZWV6VjZwcU5CcmRYczl4SEVLcE9DU0VHRUZZSjVRRG5IUEg4L3I5dmxlcmlhb0ZQSlo5Z3pFbUVkSm9OQVlYRjdxbVNSaE9JS3pUcE41b25GOWVHb1loZWovQlZudW9LbGxSZW1kbnZYNWZWaFFZQ3NJNnlYQXFTcjNSdUhyMlROd2NjL1JYV0I4aW9vU2wyK3VKbmx4WStrRllKNGZvK25KK2VkbnVkS29UTHRMWmM4U3gwUDVnME81Mmk2TEFjQUpoblJDaW5Zam9wdkRzeFF2VE5GSDJ1YmRoVWxWVjFiVG5MMTZJUzZyekV6ajBCMkdCZHdrZ2xuNmk2MHYvL0Z6a0FHWlYreFltenJtbWFiS2l1SjczNU9wS1hEeUJFUVhDT2lWVmNhNFpocVpwOVhxOTIrdFJTakdyMmpmRWl6L1ROQ21sWjcxZW85bmNuMHZHSUN5d3F4eVFKTWQxTlUxcnRkdTFSdU5kS3dXa3dWNkZxYXFvTE51T294dEc5K3pNZFYzeDZnTmhnckJPU0ZXeW90UTh6elNNVnJkcm1hWm9UNHduczIrVFgxbVdYYzl6SEtmUmJKcVdKVXAyOFdRZ3JOTktBOGQxMjUyTzUzbUdaVlZsV2VHOTBsNWkyZlpacitkNm51aDRBVlZCV0NjNnZhbzNHcDF1OXpRN0h4MEtoQkRIZGM5NnZTelBvU29JNjlSQkRoekVaTGlzS2duMW53OFB4U01BNEI3bVdYZ0VFQllBQUVCWUFBQUlDd0FBSUN3QUFJQ3dBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBUHdDeDlWV2tPSXBnOC84NmxCS0tFV2M5aHhabGlWSk9wb3c3V3VMWklJT2p2c0xJWVFRNHZ2K1lqNFgrWERxazVoOUhWRWtTWnFPeDV4ejhva0pSZlkxQWZkVVdBclNZSThuVm1FWTN0M2NKSEVzeklWbnNtK1BRTVFsQ0lMYjYrc2l6ejluWHFic3F4bjJkQjZyNEhhTWZaeFlKVW55NXZYck5FbWdxbjFHakNocEhCUDZPWHMrbkhNVnd2b2tUTXVxcWtxQnR2Wmt5Y041V1piZi8rMXZhWnBTU3FHcXZRMVRITWQzTnplYktKSmwrZk5zOVNFQklheFBlVjZtaWUvZlBzeXBXRmxLaFB6dDIyK0ZxaWpGYStWOWhER1daZG5OOWZVbURHVkt2M0Jqa1RGbTJUYUU5UWxRU2gzWEZic2srRG8reXVxdkxBb3VTVDk4LzMwVVJWRFYzb2FwS0lxcUxOKytlYk9KSXZyRnF2b0FoUFhKazl0K3YvL3ErKy94RW1ySENTQkpVbG1XUlo2UGhzT1Y3OTlqRG9CN2pCTWxKRXRUeHRpOXE0cHozbXkxRkVYaGUxbGF0TCtiUkxiaklGVjJyNm9rU1pieitXSStKNFRnK1g5c2t1OHdUSlRTTkVuS3FocmUzS3pYNjNzZlVhcXE2cDZkOFgwdGhOeGZZU21xT3JpNHVIbnpSbEZWcE1TRDVvQllXV3czbTlWcTVTOFdqREdvNnRPZTRhNVVsYVZwbXFiejZkVDNmZm9BSXdybjNIWGR2VjBQN3JXd0pFbHFOcHVMMlN6TE11eGtQUkNVMHJJc296QU1WcXNnQ0lvOFZ4UUZ0dHE3RVlYU0lzOUZtRmErenpsL3VCZzllZlpzbjlOdHI0V2xxT3JGa3lldlhyNkVzTzRkV1piTHNsd3VGdXYxT2x5djh5eFRGQVYxSkh1b3FySW8xc3Rsc0ZxRjYzVlpscklzUDFBNkZFVnhmbkZoR01aZU8ySFBZK2E2Ym44d0dBMkhHUGJ2VVZXTXNmbHNGZ1pCRkVWNW5zdVVRbFg3T2FJRWk0WHYrL0YybTJlWi9KQ1QzN0lzTzkxdWJ6RFk4OG5Cdm45TnFTejNCZ1BPK1dnNFJGSjkrUUtRRURLZlR0ZEJzTmx1aXp6SHp2cCtob2x6dnBqTkZvdEZscVpabHNteS9LQm5QOHF5YkxmYkYwK2V5TExNOTd2dndMNHJnSE5PS1IxY1hFaVNOQjZOVUdiOTJUa2d5L0owUFBaOVA0bmpzaXpKKzhPeFlPOUdsTmxzTVovbldaYm4rUTdLU3NxeWJIYzZGNWVYcXFyeXZlK1NjZ0J6Rm5IV3ZIOStybW5hYURnc2k0SmlVdkFwK3lDS29pd1dpK2xvbEdWWldaYTdPUWJJR0lNUVAyMUVVWlRKYUxTWXovTThMNHRDdkJaODZNemluUGZQendmbjU0UVFmZ2c5blE1amtTV2MxZXAwNnMzbTdjM05hcm5FNGR1UFVaVXN5K3YxK3VidDI3SW9kcWFxcXFvMFRldDB1K1BoVUZhVVV3Z1QvN0l3aVpGNE1adGxlVjd0S2t4bFdUcU9jL1g4dVdFWVloRjZFSTlhT2F3TVZCVGw2Yk5uZy9QenR6LzhzTjFzTUliL0syUlozbTYzUDd4NlZlUzUrQzd1UmxXcXF2N202Njl0MnlhUzFHeTM3NjZ2MTBGdzlKVjBuLzFrTlUyYlRhZVQwU2pMc3AyRmlUR21LTXJ2ZnY5N3k3WkZCdkhENlpkNWVOdlloQkJkMTMvMys5L0hjU3hhblVCYlAxbGNwRW55NXZYcmVJY25NYXVxMG5YOTJZc1h0VnJ0d3orYXB2blY3MzYzM1c1SHQ3ZnI5UnJ2VFA0cDhXUjVIUVIvdTdsSjAzVEhLNVd2ZnZ0YjEvTU85YmtkNmlTY2M5TTAvKzEvL3M5MUVOeGVYNmRwaWhVaUlTUk5rdHVibTNVUVBGeTF6cytIYThNdytoY1h6V2J6RjhkcTI3YS8vdWFiS0lxR3Q3ZWk3UW5DbE1UeHpaczNtKzEyWjJPdFVOWFQ1ODliN1RaajdJQkZmOUN4cjZyS2NkMC8vdnUvcjViTDRkMmRhQ3gzbW1tUUpvazRyaXpMOHM2a29HbGFiekJvdGR1RWtQOG1EY1NCajIvKzhJZjFlbjEzYzVQdGNFNnhJeDE4ZkpqU2RIaDc2eStYcXFydXpGYXlMUGZQejN2OWZsVlZCMjJyZ3hmV08yMlZaYTFlYjdaYWkvbDhNaDVuYWNwUDVnNEx6bm1hcHJQSlpER2Y3Nnl6QWlGRVZkWHUyVm4zN0V3aWhESDJxdzljdkpEeVBPL2YvdjNmRjdQWlpEek9zK3pRaytmSEIvS3JZV0lzemJMWmVEeWRUbFZWVlhleXFTZjJmRnZ0OXZubHBXakJlQXhMNmFQSjI3SXNtNjFXczlWYXp1ZXoyU3hMMDZxcWpuWENSUWlwcWlwTFUxR3pJNzIvSE9XaEh6S2xWRGVNZXFNaFhvUlhWZlZKOXh0eHpzdWlhRFNiM2JPejBYRG9MNWRwa2h4OW1KSWs4UmVMOFdpa3FxcW1hYnNKazZicklreVUwcXFxanVhUkh0VStxQml4VzkxdXE5Tlp6R2JMeFNKSlUvR2UrSGh5Z05LcUxOTWs4WmZMMlhUNm9PZGdmNUlEdHVOWXR2M2s2a29zeHIva3ArVjUzajA3RzV5ZjMxNWZiemFiN1daelZOb2loRWhTV1pacEhQdStQeG1QWlZuZW1hcE0wL1RxOWJOZVQ5TzBzaXlQeVZiSEpxeDMycW9xU1pJNloyZnRzN1BwZUJ5RjRTYUt5ckk4OUplSllxZ01nMkFUUmRQUmlPMUVWYUwrMDZ2VkRNTzR2THA2TjZ1NnA1K2M1M24vL0Z5VzVkdWJteVNPb3pBOGpqQVZlUjdIOFhxMW1zMW1raVR0WUFISUdTT1VPbzdqdUc3bjdNd3dqTElzajJNTmVQekNFb2k4NnZYN1o3M2VaRFJLa21UbCt3ZGFmaTNxK3BhTFJaYW00K0ZRcU9xaFhjVVlJNFRVR3czRE5BY1hGL0xEckN3WVk0eXg4NHNMenZsa1BONXVObEVZRmtWeGlDOFRaVm5POHp3TWd2VjZ2WnpQcTUyMEZST3JpbHE5YmxwV3A5czFUYk9xcXFOVTFaRUw2eCsxMVQ4L1o0eVpscFdsNldJKzU0d2R5dUVlMFV4OU1admxXVFllajBWcnZaMnB5cmJ0ZHJlcmFWcFZWUSs2c25nWHBzR2dMRXQvdVl6Q01GeXZEMGhiVkpZNTU0djVQQXJEbGU5WFpVa2YvbDJ0Y0gycjFUSXNxOTNwR0liQkdEdGlWYjFiYlFkUkpKMEdzaXhYWmJsY0xPSTRucy9uZk8vN2FuTE82NDJHcXFyTHhVSTBRdHJGYXBxUVdyMHUvaU55WU1ldlhLbm9BTFZlcjRNZ1dLMnFxdHJ6TUJGQ2JOczJUSE81V0ZSVnRZTXBQR2VzS010T3QydFpWcXZkMWd5RDd6eE1FTmJ1QnNNaXo4UDFPZ3pEL1c4SFRBalprYW9ZRTM1c3RGcXU2K3E2TGdvUkh1dXZGbDJiTjFFVXJGYkx4V0kzN3hhKzhBSHVRbFdjbDBYUmJMZTlXcTNlYUR4dW1DQ3NuUTdqZVo3SGNld3ZGcXZsa3UxOVBqem9jRjB4Vm04MFdwMk82emlxcGtuN2NiaU1FQ0lSVWhaRnZObjR5K1Y4UGovbDI4WVlZMVZWMWV2MWRyZHJPNDZ1NjlKQm5RR0VzTzRqSDhROU1YRThuODFXdmkrZFdJc29VYnhXcTlmUCtuM2JzaFJWM2NNZUkrL0NWQlJabGszSDQ4VmlvWnhHQjRoL0RCT3JLdHR4ZW9PQnMwOGpDb1QxT1BuQU9XZU1wVWt5R1kxV3E5V0o5QWdzeTlKMm5Nc25UMHpURkUxZzlqa0hSRVNLc3F6Szh1YnQyMTBlbG54a1ZURm1tdWJnNHNLcjFjUTM4MlJWQldIOXd2Y2p6N0xydDIrak1EemlGV0pWVmJwaFBQdk5iMHpET01SV2lGVlZzYXA2L2VwVnZOMVNRcVFqMVJaalROZjF3Zmw1bzlVU0ZhRW5yaW9JNjEvUFBvcmk1ZC8rZG56WGl6SEdWRVY1OXRWWGxtVWQrdUtYYzE3aythdFhyN0k0SnNlMWtPZWNLNHB5Zm5rcE9pdWdEUW1FOVhFamVWbCs5NWUvSE1mSkJ2R1c3ZXJaczNxamNVd0ROU0ZrdTkyK2ZmTW1PNXBHSFlSY1BYMTY2RTFnSUt4SHk0Yzh6Ly8yN2Jmc2tPdGNaRmtlbko5M2VqM0dtSFNNeXdwS2FSQUV3OXZidzIxY0l6YW5uajUvM21nMnNmU0RzTDQwSHphYnpadlhyNnV5UEtCeFQzUVg2WFM3b3REL3VOTkFYTm5nTDVlajRiREk4ME1KazVqNWNzNmZQSG5TYUxleHB3NWgzVnMrRUVvRDN4OE5oM3ZleUVua2dLd296V2J6L1BMeUhvOHJIOFRRUWdoWkxoYmo0VkNjL3QzYmRhSUlFNkcwMSs5M3VsMUNLY2NhRU1LNjkzeVFKR201V014bnN5eE54Ym10L1VrSmNibUFxcXFOWnJNM0dNaXlmRHFxK3Fjd3lUTG5mT1g3NDd1N3FxckU3WDU3cFNvcXk2cXFObHV0WHI5UFpabWRaSmdnckIwaHJucGZMaGIrY3BuRWNWRVVqLzV5WGFoSzE3UjZzOWs1T3hPTmtCQW0wZUppUHAzbWVTN3VUMzU4VlZGcW1LWlhxMzNvVjRXRWdyQjJnYUlvUlZtdWxzdGd0ZHB1Tm5tZVAwbytpTE9RcG1YVmE3Vld0NnZyZWxWVjJBZjVpYmJtODNuZysvRjJXK1E1ZmFRd1VVcHQyL1pxdFdhblk1bG1VUlNJRG9UMUNOb3FpMkxwKzVzd0RGYXIzUnhVL3BBRGhCRFg4N3hhcmRscTZick9UdWJJL21jc0VobGp5L2s4Q3NOMUVPeW1wOEkvaHNseDNYcTlYbXMwYk5zdXl4SmhnckFlZFJoWGxLb28vT1V5VHBMNWRQclFIU0RFbHIvbmViVkdvOTVvUEVvVG1BT2RiUlZGc1E0QzBiam1vZnNyZkdpdFY2dlhYYzl6SEFlcWdyRDJiQml2cXBYdkozRThHWTM0QTF3TUlRNlh1WjdYN25Sc3g3RXNDNnI2REcxbFdiYmRidjNsTXZCOXNhOTA3NnJpbkRlYXpWcTk3cnF1aVRCQldQdXJMVXFycW9yQ01BckR5WGdzNm9QdVIxVlZaVG5PK2NXRnB1dVdaWjFhSTZUNy9OSVRRaWxOMDFSY08zU1BqVHBFQTR4V3U5MW9ObTNITVF3RFlZS3dEa05iUlZHa1NTSnFJTDVFVzJKV3BSdkdzK2ZQWlVXQnF1NVJXNFNRTE12eVBKOU5Kc3ZGNGt2NmJRbFYxUnVOYnE5bldaWjIyazFnSUt4RFRZbXlMUE1zbTR6SC9uSkpDZm1rWTdxYzg2cXFUTXU2ZXZaTTA3U1Q3ZG4yNEVHU3BLSW84alNkeldiejZWVDBCZnVFTUVsU1ZaYU82MTVjWGhxR29XZ2FRWmdncklOR1hHazF2TDBOUHJyZlZsRVU0aEpBMDdLVXZlOVhkVFJoU3BOa09wbk1wMU5WMDM0MVRHS2RMbnIxR0taNXNrMXJJYXdqaGZNMFRjZmo4V0kyKzlCLzdrTldDQitKbFlYbmVmMkxDOC96MEZya01hTEUwelNkanNlTCtmekRXdjdIUUx5UFUxbFZydXVlUDNuaXVDNkNCR0VkZVVxRTYzVVN4MG1TNUhuT0dSTUhsWFhETUMzTDh6eE4xekdmMm9jSlZ4aUc4WGFiSmtsUkZLeXFLS1d5b3BpV1pSaUdWNnRwbW9Zd1FWZ0FBUERMVUR3Q0FBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUJ3Ti96OXRySGkwcVlad3NnQUFBQUJKUlU1RXJrSmdnZz09JztcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1EYXRhLmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI3MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5mdW5jdGlvbiBmb3JtYXRJdGVtc09wdGlvbnMoaXRlbXMpIHtcXG4gICAgcmV0dXJuIGl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGl0ZW0uaWQsIGxhYmVsOiBpdGVtLmlkICsgXFxcIiAoXFxcIiArIGl0ZW0ucHJpY2UgKyBcXFwiIFxcXCIgKyBpdGVtLmN1cnJlbmN5ICsgXFxcIilcXFwiIH07XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmZvcm1hdEl0ZW1zT3B0aW9ucyA9IGZvcm1hdEl0ZW1zT3B0aW9ucztcXG5mdW5jdGlvbiBnZXRJdGVtc0Zyb21MaW5lKGxpbmVzLCBpbmRleCkge1xcbiAgICByZXR1cm4gbGluZXMuZmluZChmdW5jdGlvbiAobGluZSkge1xcbiAgICAgICAgcmV0dXJuIGxpbmUuaWQgPT09IGluZGV4O1xcbiAgICB9KS5pdGVtcztcXG59XFxuZXhwb3J0cy5nZXRJdGVtc0Zyb21MaW5lID0gZ2V0SXRlbXNGcm9tTGluZTtcXG5mdW5jdGlvbiBjYWxjdWxJdGVtQW1vdW50KGxpbmUsIGl0ZW0pIHtcXG4gICAgdmFyIGRpc2NvdW50ID0gbGluZS5kaXNjb3VudDtcXG4gICAgcmV0dXJuIHJvdW5kRGVjaW1hbChsaW5lLnF1YW50aXR5ICogaXRlbS5wcmljZSAqICgxIC0gKGRpc2NvdW50ID8gZGlzY291bnQgOiAwKSAvIDEwMCksIDIpO1xcbn1cXG5mdW5jdGlvbiBkaXNwbGF5SXRlbUFtb3VudChsaW5lKSB7XFxuICAgIGlmICghbGluZS5pdGVtKSByZXR1cm4gXFxcIjAgXFxcIiArIGxpbmUuaXRlbXNbMF0uY3VycmVuY3k7XFxuICAgIHZhciBpdGVtID0gbGluZS5pdGVtcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gbGluZS5pdGVtO1xcbiAgICB9KTtcXG4gICAgcmV0dXJuIGNhbGN1bEl0ZW1BbW91bnQobGluZSwgaXRlbSkgKyBcXFwiIFxcXCIgKyBpdGVtLmN1cnJlbmN5ICsgXFxcIiBcXFwiO1xcbn1cXG5leHBvcnRzLmRpc3BsYXlJdGVtQW1vdW50ID0gZGlzcGxheUl0ZW1BbW91bnQ7XFxuZnVuY3Rpb24gZGlzcGxheVRvdGFsQW1vdW50KGxpbmVzKSB7XFxuICAgIHZhciB0b3RhbCA9IGxpbmVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBsaW5lKSB7XFxuICAgICAgICBpZiAoIWxpbmUuaXRlbSkgcmV0dXJuIGFjYztcXG4gICAgICAgIHZhciBpdGVtID0gbGluZS5pdGVtcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT09IGxpbmUuaXRlbTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIGNhbGN1bEl0ZW1BbW91bnQobGluZSwgaXRlbSkgKyBhY2M7XFxuICAgIH0sIDApO1xcbiAgICByZXR1cm4gdG90YWwgKyBcXFwiIFxcXCIgKyBsaW5lc1swXS5pdGVtc1swXS5jdXJyZW5jeTtcXG59XFxuZXhwb3J0cy5kaXNwbGF5VG90YWxBbW91bnQgPSBkaXNwbGF5VG90YWxBbW91bnQ7XFxuZnVuY3Rpb24gcm91bmREZWNpbWFsKG51bWJlciwgcHJlY2lzaW9uKSB7XFxuICAgIHZhciB0bXAgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDIpO1xcbiAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIgKiB0bXApIC8gdG1wO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5kZWZhdWx0ID0ge1xcbiAgICBhbW91bnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbW91bnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vbnRhbnQnXFxuICAgIH0sXFxuICAgIGRlc2NyaXB0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVzY3JpcHRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlc2NyaXB0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNjb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2NvdW50ICglKScsXFxuICAgICAgICAnZnItRlInOiAnUmFiYWlzICglKSdcXG4gICAgfSxcXG4gICAgaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSRlEgSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lkZW50aWZpYW50IFJGUSdcXG4gICAgfSxcXG4gICAgaXNzdWVfZGF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lzc3VlIERhdGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RhdGUgZGUgY3LDqWF0aW9uJ1xcbiAgICB9LFxcbiAgICBpc3N1ZV90aW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXNzdWUgVGltZScsXFxuICAgICAgICAnZnItRlInOiAnSGV1cmUgZGUgY3LDqWF0aW9uJ1xcbiAgICB9LFxcbiAgICBsaW5lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGluZScsXFxuICAgICAgICAnZnItRlInOiAnTGlnbmUnXFxuICAgIH0sXFxuICAgIGxpc3RfaXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMaXN0IG9mIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdMaXN0ZSBkZXMgYXJ0aWNsZXMnXFxuICAgIH0sXFxuICAgIG5vdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb3RlJyxcXG4gICAgICAgICdmci1GUic6ICdOb3RlJ1xcbiAgICB9LFxcbiAgICBxdWFudGl0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1YW50aXR5JyxcXG4gICAgICAgICdmci1GUic6ICdRdWFudGl0w6knXFxuICAgIH0sXFxuICAgIHJmcV9pbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUkZRIGluZm8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm8gZHUgUkZRJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RfaXRlbToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhbiBpdGVtJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmV6IHVuIGFydGljbGUnXFxuICAgIH0sXFxuICAgIHRvdGFsX2Ftb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RvdGFsIGFtb3VudCcsXFxuICAgICAgICAnZnItRlInOiAnTW9udGFudCB0b3RhbCdcXG4gICAgfSxcXG4gICAgdmFsaWRhdGlvbl9jb2RlX2xhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIHZlcmlmeSB5b3VyIHZhbGlkYXRpb24gY29kZScsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgdsOpcmlmaWVyIGxlIGNvZGUgZGUgdmFsaWRhdGlvbidcXG4gICAgfVxcbn07XFxuXFxuLyoqKi8gfSlcXG4vKioqKioqLyBdKTtcIixcImNvbXBpbGVkQ29udGVudFwiOm51bGwsXCJieXRlQ29udGVudFwiOm51bGx9XX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ2NjJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVBPLUJ1aWxkRW1haWwiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVBPLUJ1aWxkRW1haWxcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQnVpbGQgdGhlIGVtYWlsIG5vdGlmaWNhdGlvbiBzZW50IGJ5IHRoZSBIYW5kbGVQdXJjaGFzZU9yZGVyIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1Njc0NDI2Njc0MTUsXCJyZXZpc2lvbklkXCI6XCJmNDc2NGE1ZWM1Yjg1MTk0OTk3ZjAyMTZkY2RjNTIxMFwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGphdmEubmV0LlVSTEVuY29kZXJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ1N1YmplY3QnLCAnUGxhdGZvcm0gNiBEZW1vIEFwcCAtIFB1cmNoYXNlIE9yZGVyIHRvIHJldmlldydcXG5cXG5wNi5waXBlbGluZS5wdXQgJ0Zyb20nLCAnbm8tcmVwbHlAcGxhdGZvcm02LmlvJ1xcblxcbmRlZiBJTlNUQU5DRV9JRCA9IHA2LmNvbmZpZ3VyYXRpb24uZ2V0KFxcXCJhcHBsaWNhdGlvbmlkXFxcIilcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpdGVtSWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGl0ZW1QayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGl0ZW1JZHMpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5leGlzdHMoaXRlbVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5cXG5kZWYgcG9ydGFsQmFzZVVSTCA9ICdwb3J0YWwucGxhdGZvcm02LmlvJ1xcbmlmICgnZGV2Jy5lcXVhbHMoSU5TVEFOQ0VfSUQpKSB7XFxuICAgIHBvcnRhbEJhc2VVUkwgPSAnZGV2LnBvcnRhbC5hbWFsdG8uY29tJ1xcbn1cXG5cXG5kZWYgaHRtbExpbmsgPSBcXFwiaHR0cHM6Ly8kcG9ydGFsQmFzZVVSTC8jL2VkaXQtdHJhbnNhY3Rpb24vJElOU1RBTkNFX0lEL3A2X2RlbW8uVHJhbnNhY3Rpb25zL1xcXCIrVVJMRW5jb2Rlci5lbmNvZGUoJ1tcXFwiJyt0cmFuc2FjdGlvbklkKydcXFwiXScsICd1dGYtOCcpXFxucDYucGlwZWxpbmUucHV0ICdocmVmJywgaHRtbExpbmssICd0ZXh0L3BsYWluJ1xcblxcbmRlZiBkb2NOdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uQnVzaW5lc3NEb2NOdW1iZXIudGV4dCgpXFxuZGVmIHRvdGFsQW1vdW50ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09ICdUb3RhbCBBbW91bnQnfS5WYWx1ZS50ZXh0KClcXG5cXG5pZiAoZG9jTnVtYmVyID09IG51bGwpIHtcXG4gICAgZG9jTnVtYmVyID0gJydcXG59XFxuXFxuaWYgKHRvdGFsQW1vdW50ID09IG51bGwpIHtcXG4gICAgdG90YWxBbW91bnQgPSAnJ1xcbn1cXG5cXG5cXG5wNi5waXBlbGluZS5wdXQgJ2RvY051bWJlcicsIGRvY051bWJlciwgJ3RleHQvcGxhaW4nXFxucDYucGlwZWxpbmUucHV0ICd0b3RhbEFtb3VudCcsIHRvdGFsQW1vdW50LCAndGV4dC9wbGFpbidcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDQyNjY3NDE1fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVQTy1IYW5kbGVBY3Rpb25SZWplY3RPcmRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uUmVqZWN0T3JkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFBPIFRyYW5zYWN0aW9uSW5mbyB1cGRhdGVzIGZvciBhIFJlamVjdGVkIE9yZGVyIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgSGFuZGxlUHVyY2hhc2VPcmRlciBXb3JrZmxvdyBTdGVwXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTY3MDEwMDM0NzgzLFwicmV2aXNpb25JZFwiOlwiMDg4ZjYyZGMwMWEzODMwZTUwMWUxNmM0ZTIzZjhjZWZcIixcIm1haW5TY3JpcHRcIjpcImltcG9ydCBncm9vdnkuanNvbi4qXFxuaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0XFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaXRlbUlkcyA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuaWRzJ1xcblxcbmRlZiBpdGVtUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCBpdGVtSWRzKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZXhpc3RzKGl0ZW1QaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuZGVmIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxcblNpbXBsZURhdGVGb3JtYXQgdHJhbnNhY3Rpb25fc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKVxcblxcbmRlZiBmb3JtYXRlZERhdGUgPSB0cmFuc2FjdGlvbl9zZGYuZm9ybWF0KGN1cnJlbnREYXRlKVxcblxcbmRlZiByZWFzb24gPSBwNi5waXBlbGluZS5nZXQgJ3JlYXNvbidcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSAnUmVqZWN0ZWQnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlID0gcmVhc29uXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNEYXRlID0gZm9ybWF0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5cXG5kZWYgaXBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSygnVHJhbnNhY3Rpb25JbmZvJywgdHJhbnNhY3Rpb25JZClcXG5cXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDEwMDM0NzgzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiSGFuZGxlUXVvdGVUcmFuc2FjdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVF1b3RlVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIHRoZSByZWNlcHRpb24gb2YgYSBRdW90ZSAoZmxpcCB0byBhIFB1cmNoYXNlT3JkZXIgVUJMIERvY3VtZW50LCBjcmVhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyBUcmFuc2FjdGlvbkluZm8sIHN0b3JhZ2UgdG8gZmlsZSBzeXN0ZW0pIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgQmxvY2tjaGFpbkV2ZW50SGFuZGxlciBzY3JpcHRcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDcyNDc5MDYsXCJyZXZpc2lvbklkXCI6XCI3YTE4NDhlZDZkMGIzMGNiYTRlM2M5NjA2NTZmZTJmMFwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmltcG9ydCBqYXZhLnV0aWwuVVVJRFxcbmltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5cXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG5kZWYgcXVvdGVDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICd1YmwnXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoZmFsc2UsIHRydWUpXFxuZGVmIHF1b3RlID0gc2x1cnBlci5wYXJzZVRleHQocXVvdGVDb250ZW50KVxcblxcbmRlZiBhcHBsaWNhdGlvbklkID0gJ0RlbW9BcF9EZXYnXFxuXFxuLy8gQ2FsY3VsYXRlIGlzc3VlIGRhdGUgYW5kIHRpbWVcXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZURhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXktTU0tZGRcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZVRpbWUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcIkhIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5cXG5kZWYgc2VsbGVyTmFtZSA9IHF1b3RlLlNlbGxlclN1cHBsaWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuZGVmIGJ1eWVyTmFtZSA9IHF1b3RlLk9yaWdpbmF0b3JDdXN0b21lclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiB0b3RhbEFtb3VudCA9IHF1b3RlLlF1b3RlZE1vbmV0YXJ5VG90YWwuUGF5YWJsZUFtb3VudC50ZXh0KClcXG5kZWYgdG90YWxDdXJyZW5jeSA9IHF1b3RlLlF1b3RlZE1vbmV0YXJ5VG90YWwuUGF5YWJsZUFtb3VudC4nQGN1cnJlbmN5SUQnLnRleHQoKVxcblxcbmRlZiBxdW90ZUlkID0gcXVvdGUuSUQudGV4dCgpXFxuZGVmIGNvbW1lbnRzID0gcXVvdGUuTm90ZS50ZXh0KClcXG5cXG5pbnQgbmJMaW5lcyA9IHF1b3RlLlF1b3RhdGlvbkxpbmUuc2l6ZSgpXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdQdXJjaGFzZU9yZGVyJ1xcbmRlZiBwdXJjaGFzZU9yZGVySWQgPSBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpXFxuZGVmIHN0YXR1cyA9ICdSZWNlaXZlZCdcXG5kZWYgc3RhdHVzTWVzc2FnZSA9ICdSZWNlaXZlZCBieSBEZW1vIEFwcCdcXG5cXG5kZWYgc291cmNlVVJJID0gXFxcImZpbGU6Ly8kUDZfREFUQS9yZXNvdXJjZXMvZG9jdW1lbnRzL1F1b3RlL1xcXCIgKyBxdW90ZUlkICsgXFxcIi54bWxcXFwiXFxuZGVmIHRhcmdldFVSSSA9IFxcXCJmaWxlOi8vJFA2X0RBVEEvcmVzb3VyY2VzL2RvY3VtZW50cy9QdXJjaGFzZU9yZGVyL1xcXCIgKyBwdXJjaGFzZU9yZGVySWQgKyBcXFwiLnhtbFxcXCJcXG5cXG5kZWYgb3JkZXJMaW5lcyA9ICcnXFxuXFxucXVvdGUuUXVvdGF0aW9uTGluZS5lYWNoIHsgbXlMaW5lIC0+XFxuXFxuICAgIG9yZGVyTGluZXMgKz0gXFxcIlxcXCJcXFwiPGNhYzpPcmRlckxpbmU+XFxuICAgIDxjYmM6Tm90ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTm90ZS50ZXh0KCkpfTwvY2JjOk5vdGU+XFxuICAgIDxjYWM6TGluZUl0ZW0+XFxuICAgICAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuSUQudGV4dCgpKX08L2NiYzpJRD5cXG4gICAgICA8Y2JjOlF1YW50aXR5IHVuaXRDb2RlPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUXVhbnRpdHkuJ0B1bml0Q29kZScudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5RdWFudGl0eS50ZXh0KCkpfTwvY2JjOlF1YW50aXR5PlxcbiAgICAgIDxjYmM6TGluZUV4dGVuc2lvbkFtb3VudCBjdXJyZW5jeUlEPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uTGluZUV4dGVuc2lvbkFtb3VudC4nQGN1cnJlbmN5SUQnLnRleHQoKSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uTGluZUV4dGVuc2lvbkFtb3VudC50ZXh0KCkpfTwvY2JjOkxpbmVFeHRlbnNpb25BbW91bnQ+XFxuICAgICAgPGNhYzpQcmljZT5cXG4gICAgICAgIDxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlByaWNlLlByaWNlQW1vdW50LidAY3VycmVuY3lJRCcudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5QcmljZUFtb3VudC50ZXh0KCkpfTwvY2JjOlByaWNlQW1vdW50PlxcbiAgICAgICAgPGNiYzpCYXNlUXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5CYXNlUXVhbnRpdHkuJ0B1bml0Q29kZScudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5CYXNlUXVhbnRpdHkudGV4dCgpKX08L2NiYzpCYXNlUXVhbnRpdHk+XFxuICAgICAgPC9jYWM6UHJpY2U+XFxuICAgICAgPGNhYzpJdGVtPlxcbiAgICAgICAgPGNiYzpEZXNjcmlwdGlvbj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uSXRlbS5EZXNjcmlwdGlvbi50ZXh0KCkpfTwvY2JjOkRlc2NyaXB0aW9uPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX08L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOkl0ZW0+XFxuICAgIDwvY2FjOkxpbmVJdGVtPlxcbiAgPC9jYWM6T3JkZXJMaW5lPlxcbiAgICBcXFwiXFxcIlxcXCJcXG59XFxuXFxuXFxuZGVmIG9yZGVyQ29udGVudCA9IFxcXCJcXFwiXFxcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPE9yZGVyIHhtbG5zPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpPcmRlci0yXFxcIlxcbiAgeG1sbnM6Y2FjPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25BZ2dyZWdhdGVDb21wb25lbnRzLTJcXFwiXFxuICB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gIDxjYmM6VUJMVmVyc2lvbklEPjIuMTwvY2JjOlVCTFZlcnNpb25JRD5cXG4gIDxjYmM6Q3VzdG9taXphdGlvbklEPnVybjp3d3cuY2VuYmlpLmV1OnRyYW5zYWN0aW9uOmJpaWNvcmV0cmRtMDAxOnZlcjEuMDwvY2JjOkN1c3RvbWl6YXRpb25JRD5cXG4gIDxjYmM6UHJvZmlsZUlEIHNjaGVtZUFnZW5jeUlEPVxcXCJCSUlcXFwiIHNjaGVtZUlEPVxcXCJQcm9maWxlXFxcIlxcbiAgICA+dXJuOnd3dy5jZW5iaWkuZXU6cHJvZmlsZTpCSUkwMTp2ZXIxLjA8L2NiYzpQcm9maWxlSUQ+XFxuICA8Y2JjOklEPiR7cDYudXRpbHMuZXNjYXBlWG1sKHB1cmNoYXNlT3JkZXJJZCl9PC9jYmM6SUQ+XFxuICA8Y2JjOklzc3VlRGF0ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvY2JjOklzc3VlRGF0ZT5cXG4gICA8Y2JjOklzc3VlVGltZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZVRpbWUpfTwvY2JjOklzc3VlVGltZT5cXG4gIDxjYmM6Tm90ZT5JbmZvcm1hdGlvbiB0ZXh0IGZvciB0aGUgd2hvbGUgb3JkZXI8L2NiYzpOb3RlPlxcbiAgPGNiYzpEb2N1bWVudEN1cnJlbmN5Q29kZT5TRUs8L2NiYzpEb2N1bWVudEN1cnJlbmN5Q29kZT5cXG4gIDxjYmM6QWNjb3VudGluZ0Nvc3RDb2RlPlByb2plY3QxMjM8L2NiYzpBY2NvdW50aW5nQ29zdENvZGU+XFxuICA8Y2FjOlF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPlF1b3RlSUQxMjM8L2NiYzpJRD5cXG4gIDwvY2FjOlF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpPcmRlckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPlJqZWN0ZWRPcmRlcklEMTIzPC9jYmM6SUQ+XFxuICA8L2NhYzpPcmRlckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpPcmlnaW5hdG9yRG9jdW1lbnRSZWZlcmVuY2U+XFxuICAgIDxjYmM6SUQ+TUFGTzwvY2JjOklEPlxcbiAgPC9jYWM6T3JpZ2luYXRvckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpDb250cmFjdD5cXG4gICAgPGNiYzpJRD4zNDMyMjwvY2JjOklEPlxcbiAgICA8Y2JjOkNvbnRyYWN0VHlwZT5GcmFtZXdvcmtBZ3JlZW1lbnRJRDEyMzwvY2JjOkNvbnRyYWN0VHlwZT5cXG4gIDwvY2FjOkNvbnRyYWN0PlxcbiAgPGNhYzpCdXllckN1c3RvbWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNiYzpFbmRwb2ludElEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAwMDcyMzExMTE1PC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAwMDcwMDExMTE1PC9jYmM6SUQ+XFxuICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEPlBhcnR5SUQxMjM8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKGJ1eWVyTmFtZSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+MTIzNDU2Nzg5MDEyMzwvY2JjOklEPlxcbiAgICAgICAgPGNiYzpQb3N0Ym94PlBvQm94MTIzPC9jYmM6UG9zdGJveD5cXG4gICAgICAgIDxjYmM6U3RyZWV0TmFtZT5Sw6VkaHVzZ2F0YW48L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT4ybmQgZmxvb3I8L2NiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+NTwvY2JjOkJ1aWxkaW5nTnVtYmVyPlxcbiAgICAgICAgPGNiYzpEZXBhcnRtZW50PlB1cmNoYXNpbmcgZGVwYXJ0bWVudDwvY2JjOkRlcGFydG1lbnQ+XFxuICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgPGNiYzpQb3N0YWxab25lPjExMDAwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5SZWdpb25YPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPkpvaG5zc29ucyBCeWdndmFyb3IgQUI8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIlNFOk9SR05SXFxcIj41NTMyMzMxMTgzPC9jYmM6Q29tcGFueUlEPlxcbiAgICAgICAgPGNhYzpSZWdpc3RyYXRpb25BZGRyZXNzPlxcbiAgICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+UmVnaW9uWDwvY2JjOkNvdW50cnlTdWJlbnRpdHk+XFxuICAgICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgICA8Y2JjOklkZW50aWZpY2F0aW9uQ29kZT5TRTwvY2JjOklkZW50aWZpY2F0aW9uQ29kZT5cXG4gICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgIDwvY2FjOlJlZ2lzdHJhdGlvbkFkZHJlc3M+XFxuICAgICAgPC9jYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpCdXllckN1c3RvbWVyUGFydHk+XFxuICA8Y2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNiYzpFbmRwb2ludElEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAyMzQ3MjMxMTExPC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEPlNlbGxlclBhcnR5SUQxMjM8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNlbGxlck5hbWUpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjA5ODc2NTQzMjExMjM8L2NiYzpJRD5cXG4gICAgICAgIDxjYmM6UG9zdGJveD4zMjE8L2NiYzpQb3N0Ym94PlxcbiAgICAgICAgPGNiYzpTdHJlZXROYW1lPkt1bmdzZ2F0YW48L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT5zdWl0ZTEyPC9jYmM6QWRkaXRpb25hbFN0cmVldE5hbWU+XFxuICAgICAgICA8Y2JjOkJ1aWxkaW5nTnVtYmVyPjIyPC9jYmM6QnVpbGRpbmdOdW1iZXI+XFxuICAgICAgICA8Y2JjOkRlcGFydG1lbnQ+U2FsZXMgZGVwYXJ0bWVudDwvY2JjOkRlcGFydG1lbnQ+XFxuICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgPGNiYzpQb3N0YWxab25lPjExMDAwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5SZWdpb25YPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPk1vZGVybmEgUHJvZHVrdGVyIEFCPC9jYmM6UmVnaXN0cmF0aW9uTmFtZT5cXG4gICAgICAgIDxjYmM6Q29tcGFueUlEIHNjaGVtZUlEPVxcXCJTRTpPUkdOUlxcXCI+NTUzMjMzMjI4MzwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICAgIDxjYWM6UmVnaXN0cmF0aW9uQWRkcmVzcz5cXG4gICAgICAgICAgPGNiYzpDaXR5TmFtZT5TdG9ja2hvbG08L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PlJlZ2lvblg8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgIDwvY2FjOkNvdW50cnk+XFxuICAgICAgICA8L2NhYzpSZWdpc3RyYXRpb25BZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5TGVnYWxFbnRpdHk+XFxuICAgIDwvY2FjOlBhcnR5PlxcbiAgPC9jYWM6U2VsbGVyU3VwcGxpZXJQYXJ0eT5cXG4gIDxjYWM6T3JpZ2luYXRvckN1c3RvbWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+MDk4NzY3ODMyMTEyMzwvY2JjOklEPlxcbiAgICAgIDwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICA8Y2JjOk5hbWU+TW9kZXJuYSBQcm9kdWt0ZXIgQUI8L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOlBhcnR5TmFtZT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gIDxjYWM6QW50aWNpcGF0ZWRNb25ldGFyeVRvdGFsPlxcbiAgICA8Y2JjOlBheWFibGVBbW91bnQgY3VycmVuY3lJRCA9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKHRvdGFsQ3VycmVuY3kpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwodG90YWxBbW91bnQpfTwvY2JjOlBheWFibGVBbW91bnQ+XFxuICA8L2NhYzpBbnRpY2lwYXRlZE1vbmV0YXJ5VG90YWw+XFxuICAke29yZGVyTGluZXN9XFxuPC9PcmRlcj5cXG5cXG5cXFwiXFxcIlxcXCJcXG5cXG5cXG5kZWYgdGFyZ2V0RmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCh0YXJnZXRVUkkpXFxuXFxuRmlsZVV0aWxzLndyaXRlU3RyaW5nVG9GaWxlKHRhcmdldEZpbGUsIG9yZGVyQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHtwdXJjaGFzZU9yZGVySWR9PC9JZD5cXG4gICAgPENyZWF0aW9uRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9DcmVhdGlvbkRhdGU+XFxuICAgIDxUcmFuc2FjdGlvblR5cGU+UHVyY2hhc2UgT3JkZXI8L1RyYW5zYWN0aW9uVHlwZT5cXG4gICAgPFRyYW5zYWN0aW9uTnVtYmVyPiR7cHVyY2hhc2VPcmRlcklkfTwvVHJhbnNhY3Rpb25OdW1iZXI+XFxuICAgIDxTb3VyY2VTeXN0ZW0+RGVtbyBBcHA8L1NvdXJjZVN5c3RlbT5cXG4gICAgPFRhcmdldFN5c3RlbS8+XFxuICAgIDxTZW5kZXIvPlxcbiAgICA8RmluYWxSZWNpcGllbnQ+U3VwcGxpZXI8L0ZpbmFsUmVjaXBpZW50PlxcbiAgICA8VHJhbnNmZXJQcm90b2NvbD5CbG9ja2NoYWluPC9UcmFuc2ZlclByb3RvY29sPlxcbiAgICA8RGVsaXZlcmVkVmlhPkFtYWx0bzwvRGVsaXZlcmVkVmlhPlxcbiAgICA8U291cmNlRG9jdW1lbnRGb3JtYXQ+VUJMPC9Tb3VyY2VEb2N1bWVudEZvcm1hdD5cXG4gICAgPFNvdXJjZURvY3VtZW50VVJJPiR7c291cmNlVVJJfTwvU291cmNlRG9jdW1lbnRVUkk+XFxuICAgIDxTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlPnRleHQveG1sOyBjaGFyc2V0PXV0Zi04PC9Tb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8UGl2b3REb2N1bWVudEZvcm1hdD5VQkw8L1Bpdm90RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxQaXZvdERvY3VtZW50VVJJPiR7dGFyZ2V0VVJJfTwvUGl2b3REb2N1bWVudFVSST5cXG4gICAgPFBpdm90RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvUGl2b3REb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRGb3JtYXQ+VUJMPC9UYXJnZXREb2N1bWVudEZvcm1hdD5cXG4gICAgPFRhcmdldERvY3VtZW50VVJJPiR7dGFyZ2V0VVJJfTwvVGFyZ2V0RG9jdW1lbnRVUkk+XFxuICAgIDxUYXJnZXREb2N1bWVudENvbnRlbnRUeXBlPnRleHQveG1sOyBjaGFyc2V0PXV0Zi04PC9UYXJnZXREb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzQ29kZT4ke3N0YXR1c308L1RlY2huaWNhbFN0YXR1c0NvZGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNNZXNzYWdlPiR7c3RhdHVzTWVzc2FnZX08L1RlY2huaWNhbFN0YXR1c01lc3NhZ2U+XFxuICAgIDxUZWNobmljYWxTdGF0dXNEYXRlPiR7Zm9ybWF0dGVkRGF0ZX08L1RlY2huaWNhbFN0YXR1c0RhdGU+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzQ29kZS8+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzTWVzc2FnZS8+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzRGF0ZS8+XFxuICAgIDxGbGFncz57XFxcImFhdmlzaWJsZVxcXCI6IHRydWV9PC9GbGFncz5cXG4gICAgPE9yZ1BhdGg+LyR7YXBwbGljYXRpb25JZH0vPC9PcmdQYXRoPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5TZWxsZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChzZWxsZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QnV5ZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChidXllck5hbWUpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgICAgPEtleT5Db21tZW50PC9LZXk+XFxuICAgICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoY29tbWVudHMpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+SXNzdWUgRGF0ZTwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgICAgPEtleT5MaW5lIGl0ZW1zPC9LZXk+XFxuICAgICAgICA8VmFsdWU+JHtuYkxpbmVzfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PlRvdGFsIEFtb3VudDwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEFtb3VudCl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkN1cnJlbmN5PC9LZXk+XFxuICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHRvdGFsQ3VycmVuY3kpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QXBwbGljYXRpb248L0tleT5cXG4gICAgICA8VmFsdWU+cDZfZGVtbzwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT4gICAgXFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoJ1RyYW5zYWN0aW9uSW5mbycsIHB1cmNoYXNlT3JkZXJJZClcXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUodHJhbnNhY3Rpb25JbmZvLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNjQ3MjQ3OTA2fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uRGVjbGluZSIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvbkRlY2xpbmVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFJGUSBUcmFuc2FjdGlvbkluZm8gdXBkYXRlIGZvciBEZWNsaW5lZCBSRlEgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBIYW5kbGVSZXF1ZXN0Rm9yUXVvdGF0aW9uIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDUxMjIzNDQsXCJyZXZpc2lvbklkXCI6XCI2NjU2Y2JkNzNkMzhhMjhkYmYwN2UyZTFmMjliZWVkMVwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuaW1wb3J0IGphdmEudXRpbC5VVUlEXFxuXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgcmZxSWQgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5kZWYgcmVhc29uID0gcDYucGlwZWxpbmUuZ2V0ICdyZWFzb24nXFxuXFxuZGVmIG5vdyA9IGhlbHBlci5ub3coKVxcblxcbi8vIEZldGNoIHRoZSBSRlEgdHJhbnNhY3Rpb24gaW5mb1xcbmRlZiByZnFQayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIHJmcUlkKVxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZ2V0KHJmcVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG4vLyBEZWNsaW5lIFJGUSBsb2NhbGx5XFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcblxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZSA9ICdEZWNsaW5lZCdcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSByZWFzb25cXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHJmcVBrKVxcblxcbi8vIERlY2xpbmUgUkZRIG9uIHRoZSBibG9ja2NoYWluXFxuZGVmIGRlY2xpbmVJZCA9IFVVSUQucmFuZG9tVVVJRCgpXFxuaGVscGVyLmRlY2xpbmVSRlEoZGVjbGluZUlkLCBVVUlELmZyb21TdHJpbmcocmZxSWQpLCBub3cpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NTEyMjM0NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXIiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVBPLUhhbmRsZUFjdGlvbkFjY2VwdE9yZGVyXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkhhbmRsZSBQTyBUcmFuc2FjdGlvbkluZm8gdXBkYXRlcyBmb3IgYW4gQWNjZXB0ZWQgT3JkZXIgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBIYW5kbGVQdXJjaGFzZU9yZGVyIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ4NjcsXCJyZXZpc2lvbklkXCI6XCJhZmUwNzhkYzQ3MjEzYzA4YmYxMTJkNjdhZTUyNTM4NFwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXRcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpdGVtSWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGl0ZW1QayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGl0ZW1JZHMpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5leGlzdHMoaXRlbVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXFxuU2ltcGxlRGF0ZUZvcm1hdCB0cmFuc2FjdGlvbl9zZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpXFxuXFxuZGVmIGZvcm1hdGVkRGF0ZSA9IHRyYW5zYWN0aW9uX3NkZi5mb3JtYXQoY3VycmVudERhdGUpXFxuXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gJ0FjY2VwdGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNEYXRlID0gZm9ybWF0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG5cXG5kZWYgc2FsZXNvcmRlcm51bWJlciA9IHA2LnBpcGVsaW5lLmdldCAnc2FsZXNvcmRlcm51bWJlcidcXG5cXG5pZiAoc2FsZXNvcmRlcm51bWJlciE9bnVsbCAmJiAhJycuZXF1YWxzKHNhbGVzb3JkZXJudW1iZXIpKSB7XFxuICAgIFxcbiAgICBpbnQgbmJLZXlWYWx1ZXMgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuc2l6ZSgpXFxuICAgIHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZVtuYktleVZhbHVlcy0xXSArIHtcXG4gICAgICAgICAgICAgS2V5VmFsdWUge1xcbiAgICAgICAgICAgIEtleShcXFwiU2FsZXMgT3JkZXIgTnVtYmVyXFxcIilcXG4gICAgICAgICAgICBWYWx1ZShzYWxlc29yZGVybnVtYmVyKVxcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblxcbmRlZiB0cmFuc2FjdGlvbklkID0gdHJhbnNhY3Rpb25JbmZvLklkLnRleHQoKVxcblxcbmRlZiBpcGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdUcmFuc2FjdGlvbkluZm8nLCB0cmFuc2FjdGlvbklkKVxcblxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIGlwaywgJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ4Njd9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJCbG9ja2NoYWluRXZlbnRIYW5kbGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQmxvY2tjaGFpbkV2ZW50SGFuZGxlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJIYW5kbGUgZXZlbnRzIHJlY2VpdmVkIGZyb20gdGhlIGJsb2NrY2hhaW5cIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg0MTIsXCJyZXZpc2lvbklkXCI6XCI2MmExZjI0NmMyZmZlZDU0ZmFiOGVkOGJjOGVkMjhjYlwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiB0b3BpY3MgPSBwNi5waXBlbGluZS5nZXQoJ2xvZ1RvcGljcycpLnNwbGl0KCcsJylcXG5kZWYgZXZlbnRIYXNoID0gdG9waWNzWzBdXFxuZGVmIGRhdGEgPSBwNi5waXBlbGluZS5nZXQoJ2xvZ0RhdGEnKVxcblxcbmlmIChldmVudEhhc2ggPT0gUkZRU21hcnRDb250cmFjdEhlbHBlci5SRlFSZWNlaXZlZEV2ZW50SGFzaCkge1xcbiAgICBkZWYgKHJmcUlkLCBpc3N1ZWRBdCwgdWJsKSA9IGhlbHBlci5yZWFkUkZRUmVjZWl2ZWRFdmVudCh0b3BpY3MsIGRhdGEpXFxuXFxuICAgIHA2LnBpcGVsaW5lLnB1dChcXFwidWJsXFxcIiwgdWJsKVxcbiAgICBwNi5jb250cm9sLmNhbGwgJ3A2X2RlbW8uUmVjZWl2ZVJGUVRyYW5zYWN0aW9uJ1xcbn1cXG5lbHNlIGlmIChldmVudEhhc2ggPT0gUkZRU21hcnRDb250cmFjdEhlbHBlci5SRlFEZWNsaW5lZEV2ZW50SGFzaCkge1xcbiAgICBkZWYgKHN1cHBsaWVyLCByZnFJZCwgcXVvdGVJZCwgaXNzdWVkQXQpID0gaGVscGVyLnJlYWRSRlFEZWNsaW5lZEV2ZW50KHRvcGljcywgZGF0YSlcXG5cXG4gICAgbG9nLmluZm8gXFxcIlJGUSBcXFwiICsgcmZxSWQgKyBcXFwiIHdhcyBkZWNsaW5lZC5cXFwiXFxufVxcbmVsc2UgaWYgKGV2ZW50SGFzaCA9PSBSRlFTbWFydENvbnRyYWN0SGVscGVyLlF1b3RlUmVjZWl2ZWRFdmVudEhhc2gpIHtcXG4gICAgZGVmIChzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0LCB1YmwpID0gaGVscGVyLnJlYWRRdW90ZVJlY2VpdmVkRXZlbnQodG9waWNzLCBkYXRhKVxcblxcbiAgICBwNi5waXBlbGluZS5wdXQoXFxcInVibFxcXCIsIHVibClcXG4gICAgcDYuY29udHJvbC5jYWxsICdwNl9kZW1vLkhhbmRsZVF1b3RlVHJhbnNhY3Rpb24nXFxufVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg0MTJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGUiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFJGUSBUcmFuc2FjdGlvbkluZm8gdXBkYXRlIGFuZCBRdW90ZSBjcmVhdGlvbiAtIFNjcmlwdCBjYWxsZWQgYnkgdGhlIEhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb24gV29ya2Zsb3cgU3RlcFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQ0MTQ0NjI5MixcInJldmlzaW9uSWRcIjpcIjA3MzAxYjEwZGVhM2U4NzE0NWE4MmFiNWUwNjA2MGEwXCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsXFxuaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0XFxuXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIHhtbCA9IHA2LnBpcGVsaW5lLmdldFhtbCAneG1sJ1xcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIHJmcUlkID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuLy8gRmV0Y2ggUkZRIGZyb20gZGF0YWJhc2VcXG5kZWYgcmZxUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCByZnFJZClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmdldChyZnFQaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuLy8gQ2FsY3VsYXRlIGlzc3VlIGRhdGUgYW5kIHRpbWVcXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZURhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXktTU0tZGRcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZVRpbWUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcIkhIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5cXG4vLyBVcGRhdGUgdGhlIFJGUVxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZSA9ICdRdW90ZSBwcm92aWRlZCdcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSAnJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZSA9ICdIYW5kbGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG5kZWYgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCggdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKSlcXG5cXG5TdHJpbmcgcmZxQ29udGVudCA9IEZpbGVVdGlscy5yZWFkRmlsZVRvU3RyaW5nKHNyY0ZpbGUpXFxuZGVmIHJmcSA9IHNsdXJwZXIucGFyc2VUZXh0KHJmcUNvbnRlbnQpXFxuXFxuZGVmIHNlbGxlck5hbWUgPSByZnEuU2VsbGVyU3VwcGxpZXJQYXJ0eS5QYXJ0eS5QYXJ0eU5hbWUuTmFtZS50ZXh0KClcXG5kZWYgYnV5ZXJOYW1lID0gcmZxLk9yaWdpbmF0b3JDdXN0b21lclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiByZnFJc3N1ZURhdGUgPSByZnEuSXNzdWVEYXRlLnRleHQoKVxcblxcbnA2LnRyYW5zYWN0aW9uLnNhdmUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCByZnFQaylcXG5cXG5kZWYgbGluZXNDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICdsaW5lcydcXG5cXG4vLyBDcmVhdGUgUXVvdGUgZG9jdW1lbnRcXG5cXG5Kc29uU2x1cnBlciBqU2x1cnBlciA9IG5ldyBKc29uU2x1cnBlcigpXFxuZGVmIG15TGluZXMgPSBqU2x1cnBlci5wYXJzZVRleHQobGluZXNDb250ZW50KVxcblxcbkRlY2ltYWxGb3JtYXQgdWJsX2RmID0gbmV3IERlY2ltYWxGb3JtYXQoXFxcIiMwLjAwXFxcIilcXG5cXG5kZWYgcXVvdGF0aW9uTGluZXMgPSAnJ1xcblxcbmRlZiB0b3RhbEFtb3VudCA9IG5ldyBCaWdEZWNpbWFsKDApXFxuZGVmIHRvdGFsQ3VycmVuY3kgPSAnJ1xcblxcbmRlZiBxdW90ZUlkID0gVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKVxcblxcbnJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5lYWNoIHsgbXlMaW5lIC0+IFxcblxcbiAgICBkZWYgaW5wdXRMaW5lID0gbXlMaW5lcy5maW5kIHsgaXQuaWQgPT0gbXlMaW5lLklELnRleHQoKSB9XFxuICAgIGRlZiBpdGVtRGV0YWlsID0gaW5wdXRMaW5lLml0ZW1zLmZpbmQgeyBpdC5pZCA9PSBpbnB1dExpbmUuaXRlbSB9XFxuICAgIFxcbiAgICBCaWdEZWNpbWFsIHVuaXRQcmljZSA9IG5ldyBCaWdEZWNpbWFsKGl0ZW1EZXRhaWwucHJpY2UpXFxuICAgIFxcbiAgICBpZiAoaW5wdXRMaW5lLmRpc2NvdW50IT1udWxsICYmICEnJy5lcXVhbHMoaW5wdXRMaW5lLmRpc2NvdW50KSAmJiAhJzAnLmVxdWFscyhpbnB1dExpbmUuZGlzY291bnQpKSB7XFxuICAgICAgICBCaWdEZWNpbWFsIGRpc2NvdW50ID0gIG5ldyBCaWdEZWNpbWFsKDEwMCkuXFx0c3VidHJhY3QobmV3IEJpZ0RlY2ltYWwoaW5wdXRMaW5lLmRpc2NvdW50KSlcXG4gICAgICAgIHVuaXRQcmljZSA9IHVuaXRQcmljZS5tdWx0aXBseShkaXNjb3VudCkuZGl2aWRlKG5ldyBCaWdEZWNpbWFsKDEwMCkpXFxuICAgIH1cXG4gICAgXFxuICAgIGRlZiBsaW5lUXR5ID0gbmV3IEJpZ0RlY2ltYWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LnRleHQoKSlcXG4gICAgXFxuICAgIGRlZiBsaW5lQW1tb3VudCA9IGxpbmVRdHkubXVsdGlwbHkodW5pdFByaWNlKVxcbiAgICBcXG4gICAgdG90YWxBbW91bnQgPSB0b3RhbEFtb3VudC5hZGQobGluZUFtbW91bnQpXFxuICAgIHRvdGFsQ3VycmVuY3kgPSBpdGVtRGV0YWlsLmN1cnJlbmN5XFxuICAgIFxcbiAgICBxdW90YXRpb25MaW5lcyArPSAgXFxcIlxcXCJcXFwiPGNhYzpRdW90YXRpb25MaW5lPlxcbiAgICAgIDxjYmM6SUQ+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLklELnRleHQoKSl9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpOb3RlPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5Ob3RlLnRleHQoKSl9PC9jYmM6Tm90ZT5cXG4gICAgICA8Y2FjOkxpbmVJdGVtPlxcbiAgICAgICAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uSUQudGV4dCgpKX08L2NiYzpJRD5cXG4gICAgICAgIDxjYmM6UXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5RdWFudGl0eS4nQHVuaXRDb2RlJy50ZXh0KCkpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LnRleHQoKSl9PC9jYmM6UXVhbnRpdHk+XFxuICAgICAgICA8Y2JjOkxpbmVFeHRlbnNpb25BbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC5jdXJyZW5jeSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbCh1YmxfZGYuZm9ybWF0KGxpbmVBbW1vdW50KSl9PC9jYmM6TGluZUV4dGVuc2lvbkFtb3VudD5cXG4gICAgICAgIDxjYWM6UHJpY2U+XFxuICAgICAgICAgIDxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC5jdXJyZW5jeSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbCh1YmxfZGYuZm9ybWF0KHVuaXRQcmljZSkpfTwvY2JjOlByaWNlQW1vdW50PlxcbiAgICAgICAgICA8Y2JjOkJhc2VRdWFudGl0eSB1bml0Q29kZT1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC51b20pfVxcXCI+MTwvY2JjOkJhc2VRdWFudGl0eT5cXG4gICAgICAgIDwvY2FjOlByaWNlPlxcbiAgICAgICAgPGNhYzpJdGVtPlxcbiAgICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlucHV0TGluZS5pdGVtKX08L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX08L2NiYzpOYW1lPlxcbiAgICAgICAgPC9jYWM6SXRlbT5cXG4gICAgICA8L2NhYzpMaW5lSXRlbT5cXG4gICAgPC9jYWM6UXVvdGF0aW9uTGluZT5cXG4gICAgXFxcIlxcXCJcXFwiXFxufVxcblxcbmRlZiBxdW90ZVVCTCA9IFxcXCJcXFwiXFxcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPFF1b3RhdGlvbiB4bWxucz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6UXVvdGF0aW9uLTJcXFwiIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIiB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gIDxjYmM6VUJMVmVyc2lvbklEPjIuMDwvY2JjOlVCTFZlcnNpb25JRD5cXG4gIDxjYmM6Q3VzdG9taXphdGlvbklEPk9JT1VCTC0yLjE8L2NiYzpDdXN0b21pemF0aW9uSUQ+XFxuICA8Y2JjOlByb2ZpbGVJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiMzIwXFxcIiBzY2hlbWVJRD1cXFwidXJuOm9pb3VibDppZDpwcm9maWxlaWQtMS4yXFxcIj5Qcm9jdXJlbWVudC1RdW9TaW0tMS4wPC9jYmM6UHJvZmlsZUlEPlxcbiAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChxdW90ZUlkKX08L2NiYzpJRD5cXG4gIDxjYmM6Q29weUluZGljYXRvcj5mYWxzZTwvY2JjOkNvcHlJbmRpY2F0b3I+XFxuICA8Y2JjOlVVSUQ+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9jYmM6VVVJRD5cXG4gIDxjYmM6SXNzdWVEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgPGNiYzpJc3N1ZVRpbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICA8Y2JjOk5vdGUgbGFuZ3VhZ2VJRD1cXFwiZGEtZGtcXFwiPkJlc3RpbGxpbmcgYWYgY29tcHV0ZXJlPC9jYmM6Tm90ZT5cXG4gIDxjYWM6UmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPkc4NjdCPC9jYmM6SUQ+XFxuXFx0PGNiYzpVVUlEPiR7cDYudXRpbHMuZXNjYXBlWG1sKHJmcUlkKX08L2NiYzpVVUlEPlxcblxcdDxjYmM6SXNzdWVEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHJmcUlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgPC9jYWM6UmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgICA8Y2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+TEVWMDAxMjM8L2NiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYmM6RW5kcG9pbnRJRCBzY2hlbWVJRD1cXFwiREs6Q1ZSXFxcIj5ESzE4Mjk2Nzk5PC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUlEPVxcXCJESzpDVlJcXFwiPkRLMTgyOTY3OTk8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNlbGxlck5hbWUpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgIDxjYmM6QWRkcmVzc0Zvcm1hdENvZGUgbGlzdEFnZW5jeUlEPVxcXCIzMjBcXFwiIGxpc3RJRD1cXFwidXJuOm9pb3VibDpjb2RlbGlzdDphZGRyZXNzZm9ybWF0Y29kZS0xLjFcXFwiPlN0cnVjdHVyZWRESzwvY2JjOkFkZHJlc3NGb3JtYXRDb2RlPlxcbiAgICAgICAgPGNiYzpTdHJlZXROYW1lPkFybmUgSmFjb2JzZW5zIEFsbMOpPC9jYmM6U3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+MTU8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+S8O4YmVuaGF2biBTPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICA8Y2JjOlBvc3RhbFpvbmU+MjMwMDwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPkRLPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDxjYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgICAgIDxjYmM6UmVnaXN0cmF0aW9uTmFtZT5EZWxjb21wdXRlciBBL1M8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+MTgyOTY3OTk8L2NiYzpDb21wYW55SUQ+XFxuICAgICAgPC9jYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgPGNhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICAgPGNhYzpQYXJ0eT5cXG4gICAgICA8Y2JjOkVuZHBvaW50SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjU3OTgwMDA0MTY2MDQ8L2NiYzpFbmRwb2ludElEPlxcbiAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjU3OTgwMDA0MTY2MDQ8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKGJ1eWVyTmFtZSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgPGNiYzpBZGRyZXNzRm9ybWF0Q29kZSBsaXN0QWdlbmN5SUQ9XFxcIjMyMFxcXCIgbGlzdElEPVxcXCJ1cm46b2lvdWJsOmNvZGVsaXN0OmFkZHJlc3Nmb3JtYXRjb2RlLTEuMVxcXCI+U3RydWN0dXJlZERLPC9jYmM6QWRkcmVzc0Zvcm1hdENvZGU+XFxuICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QmVybnN0b3JmZnN2ZWo8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj4xNjE8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+Q2hhcmxvdHRlbmx1bmQ8L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgIDxjYmM6UG9zdGFsWm9uZT4yOTIwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+REs8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPkdlbnRvZnRlIEtvbW11bmU8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+REsxMjM0NTY3ODwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICA8L2NhYzpQYXJ0eT5cXG4gIDwvY2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcblxcdDxjYWM6UXVvdGVkTW9uZXRhcnlUb3RhbD5cXG4gICAgPGNiYzpQYXlhYmxlQW1vdW50IGN1cnJlbmN5SUQgPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKHVibF9kZi5mb3JtYXQodG90YWxBbW91bnQpKX08L2NiYzpQYXlhYmxlQW1vdW50PlxcbiAgPC9jYWM6UXVvdGVkTW9uZXRhcnlUb3RhbD5cXG4gICR7cXVvdGF0aW9uTGluZXN9XFxuPC9RdW90YXRpb24+XFxuXFxcIlxcXCJcXFwiXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdRdW90ZSdcXG5kZWYgY29tbWVudHMgPSAnJ1xcbmludCBuYkxpbmVzID0gcmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLnNpemUoKVxcblxcbmRlZiBzdGF0dXMgPSAnQ3JlYXRlZCdcXG5kZWYgc3RhdHVzTWVzc2FnZSA9ICdDcmVhdGVkIGJ5IERlbW8gQXBwJ1xcblxcbmRlZiBzb3VyY2VVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvXFxcIiArIHRyYW5zYWN0aW9uVHlwZSArIFxcXCIvXFxcIiArIHF1b3RlSWQgKyBcXFwiLnhtbFxcXCJcXG5cXG5kZWYgIHNvdXJjZUZpbGUgPSBwNi51cmkuZmlsZUZyb21Vcmwoc291cmNlVVJJKVxcbkZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZShzb3VyY2VGaWxlLCBxdW90ZVVCTCwnVVRGLTgnKVxcblxcbmRlZiBhcHBsaWNhdGlvbklkID0gJ0RlbW9BcHBfRGV2J1xcblxcbmRlZiBuZXdUcmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9JZD5cXG4gICAgPENyZWF0aW9uRGF0ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChmb3JtYXR0ZWREYXRlKX08L0NyZWF0aW9uRGF0ZT5cXG4gICAgPFRyYW5zYWN0aW9uVHlwZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0cmFuc2FjdGlvblR5cGUpfTwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9UcmFuc2FjdGlvbk51bWJlcj5cXG4gICAgPFNvdXJjZVN5c3RlbT5EZW1vIEFwcDwvU291cmNlU3lzdGVtPlxcbiAgICA8VGFyZ2V0U3lzdGVtLz5cXG4gICAgPFNlbmRlci8+XFxuICAgIDxGaW5hbFJlY2lwaWVudD5TdXBwbGllcjwvRmluYWxSZWNpcGllbnQ+XFxuICAgIDxUcmFuc2ZlclByb3RvY29sPkJsb2NrY2hhaW48L1RyYW5zZmVyUHJvdG9jb2w+XFxuICAgIDxEZWxpdmVyZWRWaWE+QW1hbHRvPC9EZWxpdmVyZWRWaWE+XFxuICAgIDxTb3VyY2VEb2N1bWVudEZvcm1hdD5VQkw8L1NvdXJjZURvY3VtZW50Rm9ybWF0PlxcbiAgICA8U291cmNlRG9jdW1lbnRVUkk+JHtwNi51dGlscy5lc2NhcGVYbWwoc291cmNlVVJJKX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3A2LnV0aWxzLmVzY2FwZVhtbChzb3VyY2VVUkkpfTwvUGl2b3REb2N1bWVudFVSST5cXG4gICAgPFBpdm90RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvUGl2b3REb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRGb3JtYXQ+VUJMPC9UYXJnZXREb2N1bWVudEZvcm1hdD5cXG4gICAgPFRhcmdldERvY3VtZW50VVJJPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNvdXJjZVVSSSl9PC9UYXJnZXREb2N1bWVudFVSST5cXG4gICAgPFRhcmdldERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1RhcmdldERvY3VtZW50Q29udGVudFR5cGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNDb2RlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHN0YXR1cyl9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChzdGF0dXNNZXNzYWdlKX08L1RlY2huaWNhbFN0YXR1c01lc3NhZ2U+XFxuICAgIDxUZWNobmljYWxTdGF0dXNEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGZvcm1hdHRlZERhdGUpfTwvVGVjaG5pY2FsU3RhdHVzRGF0ZT5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNDb2RlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNEYXRlLz5cXG4gICAgPEZsYWdzPntcXFwiYWF2aXNpYmxlXFxcIjogdHJ1ZX08L0ZsYWdzPlxcbiAgICA8T3JnUGF0aD4vJHtwNi51dGlscy5lc2NhcGVYbWwoYXBwbGljYXRpb25JZCl9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QnV5ZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChidXllck5hbWUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwodWJsX2RmLmZvcm1hdCh0b3RhbEFtb3VudCkpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkFwcGxpY2F0aW9uPC9LZXk+XFxuICAgICAgPFZhbHVlPnA2X2RlbW88L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIHF1b3RlUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdUcmFuc2FjdGlvbkluZm8nLCBxdW90ZUlkKVxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZShuZXdUcmFuc2FjdGlvbkluZm8sICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlUGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDQxNDQ2MjkyfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGV29ya2Zsb3dUYXNrRW5oYW5jZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWRkIEF0dHJpYnV0ZXMgdG8gV29ya2Zsb3cgVGFza3NcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ5MDIsXCJyZXZpc2lvbklkXCI6XCIxNTBkMGU3MDhhOGRlNTc1YTc1ZTQzNTE5OGRmMGU3MlwiLFwibWFpblNjcmlwdFwiOlwiZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGlkcylcXG5kZWYgaXRlbSA9IHA2LnRyYW5zYWN0aW9uLmdldChpcGspXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IG5ldyBYbWxTbHVycGVyKCkucGFyc2VUZXh0KGl0ZW0pXFxuXFxuZGVmIHRyYW5zYWN0aW9uTnVtYmVyID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uTnVtYmVyLnRleHQoKVxcbnA2LnBpcGVsaW5lLnB1dCAnVHJhbnNhY3Rpb25OdW1iZXInLCB0cmFuc2FjdGlvbk51bWJlciwgJ3RleHQvcGxhaW4nXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9IHRyYW5zYWN0aW9uSW5mby5UcmFuc2FjdGlvblR5cGUudGV4dCgpXFxucDYucGlwZWxpbmUucHV0ICdUcmFuc2FjdGlvblR5cGUnLCB0cmFuc2FjdGlvblR5cGUsICd0ZXh0L3BsYWluJ1xcblxcbmRlZiBlbmRwb2ludCA9IHRyYW5zYWN0aW9uSW5mby5FbmRwb2ludC50ZXh0KClcXG5wNi5waXBlbGluZS5wdXQgJ0VuZHBvaW50JywgZW5kcG9pbnQsICd0ZXh0L3BsYWluJ1xcblxcbi8vIEFkZCBjb21tb24gd29yayBpdGVtIGF0dHJpYnV0ZXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkIGIyYm94ICdXb3JrIEl0ZW1zJyB2aWV3XFxuZGVmIHN0ZXBYbWwgPSBwNi5waXBlbGluZS5nZXQgJ193Zl9zdGVwWG1sJ1xcbmRlZiBzdGF0dXNNYXAgPSBwNi53b3JrZmxvdy5sb2NhbGVUZXh0IHN0ZXBYbWwsIFxcXCJTdGF0dXNMYWJlbHMvTGFiZWxbQG5hbWU9J1xcXCIgKyBwNi5waXBlbGluZS5nZXQoJ193Zl9zdGF0dXNJZCcpICsgXFxcIiddXFxcIlxcbnA2LnBpcGVsaW5lLnB1dCAnU3RhdHVzJywgc3RhdHVzTWFwLCAnYXBwbGljYXRpb24vYjJib3guaTE4bidcXG5cXG5kZWYgYXNzaWduZWVNYXAgPSBwNi53b3JrZmxvdy5sb2NhbGVUZXh0IHN0ZXBYbWwsICdBc3NpZ25lZS9MYWJlbCdcXG5wNi5waXBlbGluZS5wdXQgJ0Fzc2lnbmVkVG8nLCBhc3NpZ25lZU1hcCwgJ2FwcGxpY2F0aW9uL2IyYm94LmkxOG4nXFxucDYucGlwZWxpbmUucHV0ICdfQVNTSUdORURUT05BTUUnLCBwNi5waXBlbGluZS5nZXQoJ193Zl9hc3NpZ25lZFRvSWQnKSwgJ3RleHQvcGxhaW4nXFxucDYucGlwZWxpbmUucHV0ICdTdGFydERhdGUnLCBwNi5waXBlbGluZS5nZXQoJ193Zl9pbnN0YW5jZVN0YXJ0RGF0ZScpLCAndGV4dC9wbGFpbidcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDEwMDM0OTAyfV0sInBsYXRmb3JtNi5jb3VudGVycyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRSRlFzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRSRlFzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIiMgb2YgUkZRcyB3aXRoIFxcXCJSZWNlaXZlZFxcXCIgdGVjaG5pY2FsIHN0YXR1cyAob3ZlciB0aGUgcGFzdCA5MCBkYXlzKVwifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJhbm9ueW1vdXNAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1Njc0NDAwNjAwNTYsXCJyZXZpc2lvbklkXCI6XCI3YTYwYTAyZjViYzFiOWY4ZmVlNWY0YjZjMzJiYjMzZVwiLFwibGFzdFN5bmNEYXRlXCI6MTU2NzQ0MDA2MDA1NixcInZhbHVlXCI6MC4wLFwidHlwZVwiOlwiQ09VTlRcIixcInF1ZXJ5XCI6XCIvVHJhbnNhY3Rpb25JbmZvW1RyYW5zYWN0aW9uVHlwZSA9IFxcXCJSZXF1ZXN0IEZvciBRdW90YXRpb25cXFwiIF1bVGVjaG5pY2FsU3RhdHVzQ29kZSA9IFxcXCJSZWNlaXZlZFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1Njc0NDAwNjAwNTZ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJDb3VudFF1b3Rlc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFF1b3RlcyB3aXRoIFxcXCJTZW50XFxcIiB0ZWNobmljYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAxMTcyMDA1MSxcInJldmlzaW9uSWRcIjpcImQxMWE1YzM1YzA4ODMzMjQ4OTRlOGRjOWM4MzRjNTNmXCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3MDExNzIwMDUwLFwidmFsdWVcIjowLjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9UcmFuc2FjdGlvbkluZm9bVHJhbnNhY3Rpb25UeXBlID0gXFxcIlF1b3RlXFxcIiBdW1RlY2huaWNhbFN0YXR1c0NvZGUgPSBcXFwiU2VudFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTE3MjAwNTF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIiMgb2YgRmFpbGVkIFJvdXRpbmcgT3JkZXJzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQ0MjcwMDEyMSxcInJldmlzaW9uSWRcIjpcImI1YjVlYWUyZmNmM2QwNGMzMTJhOGZkNjg5NDBmYTI3XCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3NDQyNzAwMTIwLFwidmFsdWVcIjo4LjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9yb3V0aW5nT3JkZXJcIixcInRhcmdldFwiOlwiRmFpbGVkUm91dGluZ09yZGVyXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1Njc0NDI3MDAxMjF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRSZWplY3RlZFBPcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkNvdW50UmVqZWN0ZWRQT3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiIyBvZiBQdXJjaGFzZSBPcmRlcnMgd2l0aCBcXFwiUmVqZWN0ZWRcXFwiIGZ1bmN0aW9uYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAwODI0MDAzNSxcInJldmlzaW9uSWRcIjpcIjBkMjYwM2ZkYTY2Mjc4MzQ3ZWY1Y2ViN2JhMjA3ZjAzXCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3MDA4MjQwMDM1LFwidmFsdWVcIjowLjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9UcmFuc2FjdGlvbkluZm9bVHJhbnNhY3Rpb25UeXBlID0gXFxcIlB1cmNoYXNlIE9yZGVyXFxcIiBdW0Z1bmN0aW9uYWxTdGF0dXNDb2RlID0gXFxcIlJlamVjdGVkXFxcIiBdW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA8IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MG19XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMywyKSldW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA+IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEzLDIpKV1cIixcInRhcmdldFwiOlwiVHJhbnNhY3Rpb25cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImFub255bW91c0BhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzAwODI0MDAzNX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5jb3VudGVycyIsIm5hbWUiOiJDb3VudEFjY2VwdGVkUE9zIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRBY2NlcHRlZFBPc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFB1cmNoYXNlIE9yZGVycyB3aXRoIFxcXCJBY2NlcHRlZFxcXCIgZnVuY3Rpb25hbCBzdGF0dXMgKG92ZXIgdGhlIHBhc3QgOTAgZGF5cylcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiYW5vbnltb3VzQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTY3MDA4MTgwMDkwLFwicmV2aXNpb25JZFwiOlwiMjc5YmM0YTMyZjZmYThkNDA2YWZkZTRkODU0M2U0ZWZcIixcImxhc3RTeW5jRGF0ZVwiOjE1NjcwMDgxODAwOTAsXCJ2YWx1ZVwiOjAuMCxcInR5cGVcIjpcIkNPVU5UXCIsXCJxdWVyeVwiOlwiL1RyYW5zYWN0aW9uSW5mb1tUcmFuc2FjdGlvblR5cGUgPSBcXFwiUHVyY2hhc2UgT3JkZXJcXFwiIF1bRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSBcXFwiQWNjZXB0ZWRcXFwiIF1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpIDwgY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwbX1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEzLDIpKV1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpID4gY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTMsMikpXVwiLFwidGFyZ2V0XCI6XCJUcmFuc2FjdGlvblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiYW5vbnltb3VzQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDA4MTgwMDkwfV0sInBsYXRmb3JtNi5ob21lcGFnZXMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmhvbWVwYWdlcyIsIm5hbWUiOiJEZW1vIEhvbWUiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJEZW1vIEhvbWVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVtbyBIb21lXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE3OTY1LFwicmV2aXNpb25JZFwiOlwiMzFhYmNjZWUwYmE1Zjc0NWY3NjlhMjE5NDNiMmE2YTRcIixcIm1vZHVsZXNcIjpbe1wiaWRcIjpcInA2X2RlbW8uQ291bnRSRlFzXCIsXCJvcmRlclwiOjAsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9LHtcImlkXCI6XCJwNl9kZW1vLkNvdW50UXVvdGVzXCIsXCJvcmRlclwiOjEsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9LHtcImlkXCI6XCJwNl9kZW1vLkNvdW50QWNjZXB0ZWRQT3NcIixcIm9yZGVyXCI6MixcInR5cGVcIjpcImNvdW50ZXJzXCIsXCJ3aWR0aFwiOlwic21hbGxcIixcImhlaWdodFwiOlwibWVkaXVtXCIsXCJkYXRhXCI6bnVsbH0se1wiaWRcIjpcInA2X2RlbW8uQ291bnRSZWplY3RlZFBPc1wiLFwib3JkZXJcIjozLFwidHlwZVwiOlwiY291bnRlcnNcIixcIndpZHRoXCI6XCJzbWFsbFwiLFwiaGVpZ2h0XCI6XCJtZWRpdW1cIixcImRhdGFcIjpudWxsfV19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE3OTY1fV0sInBsYXRmb3JtNi5kYXRhbW9kZWxzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5kYXRhbW9kZWxzIiwibmFtZSI6IlRyYW5zYWN0aW9uSW5mbyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRyYW5zYWN0aW9uSW5mb1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUcmFuc2FjdGlvbkluZm8gZGF0YW1vZGVsXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE3OTM0LFwicmV2aXNpb25JZFwiOlwiNzMyZWFjNmEwMzViOTdjZDgzNjViY2U4Y2I3YmU3NWRcIixcInNjaGVtYVwiOlwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIiBlbmNvZGluZz1cXFwiVVRGLThcXFwiPz5cXG48eHNkOnNjaGVtYSB4bWxuczp4c2Q9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hXFxcIiBhdHRyaWJ1dGVGb3JtRGVmYXVsdD1cXFwidW5xdWFsaWZpZWRcXFwiXFxuICAgICAgICAgICAgYmxvY2tEZWZhdWx0PVxcXCJcXFwiXFxuICAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PVxcXCJxdWFsaWZpZWRcXFwiXFxuICAgICAgICAgICAgZmluYWxEZWZhdWx0PVxcXCJcXFwiPlxcbiAgIDx4c2Q6ZWxlbWVudCBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIlRyYW5zYWN0aW9uSW5mb1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJJZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJDcmVhdGlvbkRhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHJhbnNhY3Rpb25UeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRyYW5zYWN0aW9uTnVtYmVyXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZVN5c3RlbVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXRTeXN0ZW1cXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiU2VuZGVyXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkZpbmFsUmVjaXBpZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRyYW5zZmVyUHJvdG9jb2xcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiRGVsaXZlcmVkVmlhXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50Rm9ybWF0XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50VVJJXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50Q29udGVudFR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiUGl2b3REb2N1bWVudEZvcm1hdFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJQaXZvdERvY3VtZW50VVJJXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlBpdm90RG9jdW1lbnRDb250ZW50VHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudEZvcm1hdFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudFVSSVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudENvbnRlbnRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkF0dGFjaG1lbnRzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkF0dGFjaG1lbnRzXFxcIi8+XFxuXFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJUZWNobmljYWxTdGF0dXNDb2RlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlRlY2huaWNhbFN0YXR1c01lc3NhZ2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiVGVjaG5pY2FsU3RhdHVzRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzQ29kZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzTWVzc2FnZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGbGFnc1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIk9yZ1BhdGhcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJLZXlWYWx1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJLZXlWYWx1ZVxcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiSXNzdWVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIklzc3Vlc1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiQXVkaXRUcmFpbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlJlY29yZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkNvZGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJNZXNzYWdlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PlxcbiAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIldvcmtmbG93XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIldGSW5zdGFuY2VzXFxcIi8+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgICAgPHhzZDp1bmlxdWUgbmFtZT1cXFwiVHJhbnNhY3Rpb25JbmZvXFxcIj5cXG4gICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPVxcXCIuXFxcIi8+XFxuICAgICAgICAgPHhzZDpmaWVsZCB4cGF0aD1cXFwiSWRcXFwiLz5cXG4gICAgICA8L3hzZDp1bmlxdWU+XFxuICAgPC94c2Q6ZWxlbWVudD5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJUaHJlYWRcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHJhbnNhY3Rpb25JbmZvSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiQnVzaW5lc3NEb2NOYW1lXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIk1lc3NhZ2VDb250ZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkRhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIktleVZhbHVlXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIktleVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJWYWx1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiQXR0YWNobWVudHNcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJBdHRhY2htZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkF0dGFjaG1lbnRcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJBdHRhY2htZW50XFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlVSSVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJDb250ZW50VHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiSXNzdWVzXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiSXNzdWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwiSXNzdWVcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJJc3N1ZVxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJMZXZlbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIk1lc3NhZ2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRmllbGRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRmllbGRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlZhbHVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlBhdGhcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiTGlzdE9mVmFsdWVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkxpc3RPZlZhbHVlc1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIkxpc3RPZlZhbHVlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlZhbHVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkluc3RhbmNlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZsb3dOYW1lXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkFjdGl2ZUluc3RhbmNlSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJJbnN0YW5jZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJXRkluc3RhbmNlXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiV0ZJbnN0YW5jZVxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJpZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGFydERhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZW5kRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJsYXN0VXNlckVtYWlsXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInN0YXR1c1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJmbGlua1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJGTElOS1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJzdGVwXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIldGU3RlcFxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIldGU3RlcFxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGVwSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwic3RhdHVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImFjdGlvbmVkQnlFbWFpbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGFydERhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZW5kRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJhc3NpZ25lZFRvTmFtZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJhc3NpZ25lZXNcXFwiIG5pbGxhYmxlPVxcXCJ0cnVlXFxcIiB0eXBlPVxcXCJXRkFzc2lnbmVlc1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZGVzY3JpcHRpb25cXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiV0ZEZXNjcmlwdGlvbk1hcFxcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJwYXJhbWV0ZXJcXFwiIG5pbGxhYmxlPVxcXCJ0cnVlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJLZXlWYWx1ZVxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIkZMSU5LXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInZpZXdcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJpZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJ0eXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkFzc2lnbmVlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcImFzc2lnbmVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkRlc2NyaXB0aW9uTWFwXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiPlxcbiAgICAgICAgIDx4c2Q6YW55IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lc3BhY2U9XFxcIiMjYW55XFxcIiBwcm9jZXNzQ29udGVudHM9XFxcImxheFxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbjwveHNkOnNjaGVtYT5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTc5MzR9XSwicGxhdGZvcm02LndvcmtmbG93c3RlcHMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LndvcmtmbG93c3RlcHMiLCJuYW1lIjoiSGFuZGxlUmVxdWVzdEZvclF1b3RhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJvdmlkZSBRdW90ZSBvciBEZWNsaW5lIFJGUVwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAxMTMxMzY4MyxcInJldmlzaW9uSWRcIjpcImYyYTBlYzk2ZDFjZmZkODdiMWQxMjA0ZmFmZWRlZDcxXCIsXCJ4bWxTdGVwXCI6XCI8V29ya2Zsb3dTdGVwIGVuYWJsZWQ9XFxcInRydWVcXFwiPlxcbiAgICBcXG4gICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgPEVOPlJlcXVlc3RGb3JRdW90YXRpb24gLSBBbnN3ZXIgb3IgZGVjbGluZTwvRU4+XFxuICAgICAgICA8RlI+RGV2aXMgLSBSw6lwb25kcmUgb3UgZMOpY2xpbmVyPC9GUj5cXG4gICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgXFxuICAgIDxBbGxvd1RyYW5zYWN0aW9uRWRpdD5BU1NJR05FRTwvQWxsb3dUcmFuc2FjdGlvbkVkaXQ+XFxuICAgIDxUcmFuc2FjdGlvbkRhdGFNb2RlbD5wNl9kZW1vLlRyYW5zYWN0aW9uSW5mbzwvVHJhbnNhY3Rpb25EYXRhTW9kZWw+XFxuICAgIDxWaWV3TmFtZXM+XFxuICAgICAgICA8SXRlbT5wNl9kZW1vLlRyYW5zYWN0aW9uczwvSXRlbT5cXG4gICAgICAgIDxXb3JrSXRlbT5wNl9kZW1vLldvcmtmbG93IFRhc2tzPC9Xb3JrSXRlbT5cXG4gICAgPC9WaWV3TmFtZXM+XFxuXFxuICAgIDxBbGxvd1JlY2FsbD5mYWxzZTwvQWxsb3dSZWNhbGw+XFxuICAgIDxBbGxvd0FwcHJvdmVyRGVsZWdhdGlvbj5mYWxzZTwvQWxsb3dBcHByb3ZlckRlbGVnYXRpb24+XFxuICAgIFxcbiAgICA8U2VuZEVtYWlscz5mYWxzZTwvU2VuZEVtYWlscz5cXG5cXG4gICAgPFR0bCBpZD1cXFwiZXhwaXJlXFxcIj4xMjA8L1R0bD5cXG4gICAgXFxuXFx0PFdvcmtJdGVtIHNjcmlwdD1cXFwicDZfZGVtby5XRldvcmtmbG93VGFza0VuaGFuY2VyXFxcIi8+XFxuICAgIFxcbiAgICA8QXNzaWduZWUgbmFtZT1cXFwiRGVtb0FwcFxcXCIgcGF0aD1cXFwiLyR7SU5TVEFOQ0VfSUR9XFxcIiB0eXBlPVxcXCJVTklUXFxcIiBzY29wZT1cXFwiKj0qXFxcIj5cXG4gICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICA8RU4+U3VwcGxpZXI8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Gb3Vybmlzc2V1cjwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICA8L0Fzc2lnbmVlPlxcbiAgICBcXG5cXHQ8U3RhdHVzTGFiZWxzPlxcblxcdCAgICA8TGFiZWwgbmFtZT1cXFwiUmVjZWl2ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+UmVjZWl2ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5SZcOndWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJDcmVhdGVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPkNyZWF0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5DcsOpw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiRGVwcmVjYXRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5EZXByZWNhdGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+QW5udWzDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJQcm92aWRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5RdW90ZSBwcm92aWRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlF1b3RhdGlvbiBmb3VybmllPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiRGVjbGluZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+RGVjbGluZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Ew6ljbGluw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvU3RhdHVzTGFiZWxzPlxcbiAgICBcXG4gICAgPEFjdGlvbnM+XFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJzZW5kXFxcIiBzdGF0dXM9XFxcIlByb3ZpZGVkXFxcIiB0eXBlPVxcXCJGT1JNXFxcIiBzdG9wPVxcXCJ0cnVlXFxcIiBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uUHJvdmlkZVF1b3RlXFxcIj5cXG4gICAgICAgICAgICA8U3R5bGU+aWNvbjpmYS1jaGVjayxidG46YnRuLXN1Y2Nlc3M8L1N0eWxlPlxcblxcbiAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgPEVOPlByb3ZpZGUgUXVvdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+Rm91cm5pciBRdW90YXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvTGFiZWw+XFxuXFxuICAgICAgICAgICAgPEZvcm1HZW5lcmF0b3I+cDZfZGVtby5XRkhhbmRsZVJGUS1Qcm92aWRlRm9ybUZvclF1b3RlQ3JlYXRpb248L0Zvcm1HZW5lcmF0b3I+XFxuICAgICAgICAgICBcXG4gICAgICAgICAgIDxQYXJhbWV0ZXI+XFxuICAgICAgICAgICAgICAgIDxOYW1lPnJmcTwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPnJmcTwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+cmZxPC9GUj5cXG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgPE1hbmRhdG9yeT5mYWxzZTwvTWFuZGF0b3J5PlxcbiAgICAgICAgICAgICAgICA8SW5wdXRUeXBlPlRFWFQ8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8UGFyYW1ldGVyPlxcbiAgICAgICAgICAgICAgICA8TmFtZT5saW5lczwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPmxpbmVzPC9FTj5cXG4gICAgICAgICAgICAgICAgICAgIDxGUj5saW5lczwvRlI+XFxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XFxuICAgICAgICAgICAgICAgIDxNYW5kYXRvcnk+ZmFsc2U8L01hbmRhdG9yeT5cXG4gICAgICAgICAgICAgICAgPElucHV0VHlwZT5URVhUPC9JbnB1dFR5cGU+XFxuICAgICAgICAgICAgPC9QYXJhbWV0ZXI+XFxuICAgICAgICA8L0FjdGlvbj5cXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJkZXByZWNhdGVcXFwiIHN0YXR1cz1cXFwiRGVjbGluZWRcXFwiIHR5cGU9XFxcIkFDVElPTlxcXCIgc3RvcD1cXFwidHJ1ZVxcXCIgc2NyaXB0PVxcXCJwNl9kZW1vLldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvbkRlY2xpbmVcXFwiPlxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLXRpbWVzLGJ0bjpidG4tZGFuZ2VyLGNvbG9yOmRhbmdlcjwvU3R5bGU+IFxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgPEVOPkRlY2xpbmU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RMOpY2xpbmVyIHF1b3QuPC9GUj5cXG4gICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIDxQYXJhbWV0ZXI+XFxuXFx0ICAgICAgICAgICAgPE5hbWU+cmVhc29uPC9OYW1lPlxcbiAgICAgICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICA8RU4+UmVhc29uPC9FTj5cXG4gICAgICAgICAgICAgICAgICAgIDxGUj5Nb3RpZjwvRlI+XFxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XFxuICAgICAgICAgICAgICAgIDxNYW5kYXRvcnk+ZmFsc2U8L01hbmRhdG9yeT5cXG4gICAgICAgICAgICAgICAgPElucHV0VHlwZT5URVhUQVJFQTwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgICAgICBcXG4gICAgICAgIDxBY3Rpb24gaWQ9XFxcImV4cGlyZVxcXCIgc3RhdHVzPVxcXCJFWFBJUkVEXFxcIiB0eXBlPVxcXCJFWFBJUkVcXFwiIGRpc3BsYXk9XFxcImZhbHNlXFxcIj5cXG5cXHRcXHRcXHQ8RXhwaXJ5IGVycm9yPVxcXCJmYWxzZVxcXCIvPlxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgIDwvQWN0aW9ucz5cXG4gICAgXFxuPC9Xb3JrZmxvd1N0ZXA+XFxuXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDExMzEzNjgzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LndvcmtmbG93c3RlcHMiLCJuYW1lIjoiSGFuZGxlUHVyY2hhc2VPcmRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVB1cmNoYXNlT3JkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWNjZXB0IG9yIFJlamVjdCB0aGUgT3JkZXJcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTEzMDI0MTIsXCJyZXZpc2lvbklkXCI6XCI4NWIzZmI0YjEzNDk1NGMxYzI2YjU4YjNjMTExNzkwZVwiLFwieG1sU3RlcFwiOlwiPFdvcmtmbG93U3RlcCBlbmFibGVkPVxcXCJ0cnVlXFxcIj5cXG4gICAgXFxuICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgIDxFTj5QdXJjaGFzZU9yZGVyIC0gQWNjZXB0IG9yIHJlamVjdDwvRU4+XFxuICAgICAgICA8RlI+Q29tbWFuZGUgLSBBY2NlcHRlciBvdSByZWZ1c2VyPC9GUj5cXG4gICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgXFxuICAgIDxBbGxvd1RyYW5zYWN0aW9uRWRpdD5BU1NJR05FRTwvQWxsb3dUcmFuc2FjdGlvbkVkaXQ+XFxuICAgIDxUcmFuc2FjdGlvbkRhdGFNb2RlbD5wNl9kZW1vLlRyYW5zYWN0aW9uSW5mbzwvVHJhbnNhY3Rpb25EYXRhTW9kZWw+XFxuICAgIDxWaWV3TmFtZXM+XFxuICAgICAgICA8SXRlbT5wNl9kZW1vLlRyYW5zYWN0aW9uczwvSXRlbT5cXG4gICAgICAgIDxXb3JrSXRlbT5wNl9kZW1vLldvcmtmbG93IFRhc2tzPC9Xb3JrSXRlbT5cXG4gICAgPC9WaWV3TmFtZXM+XFxuXFxuICAgIDxBbGxvd1JlY2FsbD5mYWxzZTwvQWxsb3dSZWNhbGw+XFxuICAgIDxBbGxvd0FwcHJvdmVyRGVsZWdhdGlvbj5mYWxzZTwvQWxsb3dBcHByb3ZlckRlbGVnYXRpb24+XFxuICAgIFxcbiAgICA8U2VuZEVtYWlscz50cnVlPC9TZW5kRW1haWxzPlxcbiAgICA8RW1haWxUZW1wbGF0ZSBtb2RlbFNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUJ1aWxkRW1haWxcXFwiPmZpbGU6Ly8ke0IyQk9YX0RBVEF9L3Jlc291cmNlcy90ZW1wbGF0ZXMvcDZkZW1vX1BPUmV2aWV3LmZ0bDwvRW1haWxUZW1wbGF0ZT5cXG4gICAgXFxuICAgIDxUdGwgaWQ9XFxcImV4cGlyZVxcXCI+MTIwPC9UdGw+XFxuICAgIFxcblxcdDxXb3JrSXRlbSBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlclxcXCIvPlxcbiAgICBcXG4gICAgPEFzc2lnbmVlIG5hbWU9XFxcIkRlbW9BcHBcXFwiIHBhdGg9XFxcIi8ke0lOU1RBTkNFX0lEfVxcXCIgdHlwZT1cXFwiVU5JVFxcXCIgc2NvcGU9XFxcIio9KlxcXCI+XFxuICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgPEVOPlN1cHBsaWVyPC9FTj5cXG4gICAgICAgICAgICA8RlI+Rm91cm5pc3NldXI8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgPC9Bc3NpZ25lZT5cXG4gICAgXFxuXFx0PFN0YXR1c0xhYmVscz5cXG5cXHQgICAgPExhYmVsIG5hbWU9XFxcIlJlY2VpdmVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPlJlY2VpdmVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+UmXDp3VlPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQ3JlYXRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5DcmVhdGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+Q3LDqcOpZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIkRlcHJlY2F0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+RGVwcmVjYXRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPkFubnVsw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQWNjZXB0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+T3JkZXIgYWNjZXB0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Db21tYW5kZSBhY2NlcHTDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJSZWplY3RlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5SZWplY3RlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlJlZnVzw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvU3RhdHVzTGFiZWxzPlxcbiAgICBcXG4gICAgPEFjdGlvbnM+XFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJhY2NlcHRcXFwiIHN0YXR1cz1cXFwiQWNjZXB0ZWRcXFwiIHR5cGU9XFxcIkFDVElPTlxcXCIgc3RvcD1cXFwidHJ1ZVxcXCIgc2NyaXB0PVxcXCJwNl9kZW1vLldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXJcXFwiPlxcblxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLWNoZWNrLGJ0bjpidG4tc3VjY2VzczwvU3R5bGU+XFxuXFxuICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICA8RU4+QWNjZXB0IE9yZGVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjY2VwdGVyIGNvbW1hbmRlPC9GUj5cXG4gICAgICAgICAgICA8L0xhYmVsPlxcblxcbiAgICAgICAgICAgPFBhcmFtZXRlcj5cXG4gICAgICAgICAgICAgICAgPE5hbWU+c2FsZXNvcmRlcm51bWJlcjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlNhbGVzIE9yZGVyIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TnVtw6lybyBkZSBjb21tYW5kZSBjbGllbnQ8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVDwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcblxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgPEFjdGlvbiBpZD1cXFwicmVqZWN0XFxcIiBzdGF0dXM9XFxcIlJlamVjdGVkXFxcIiB0eXBlPVxcXCJBQ1RJT05cXFwiIHN0b3A9XFxcInRydWVcXFwiIHNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUhhbmRsZUFjdGlvblJlamVjdE9yZGVyXFxcIj5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8U3R5bGU+aWNvbjpmYS10aW1lcyxidG46YnRuLWRhbmdlcixjb2xvcjpkYW5nZXI8L1N0eWxlPiBcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgIDxFTj5SZWplY3Q8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+UmVmdXNlcjwvRlI+XFxuICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8UGFyYW1ldGVyPlxcblxcdCAgICAgICAgICAgIDxOYW1lPnJlYXNvbjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlJlYXNvbjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TW90aWY8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVEFSRUE8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvQWN0aW9uPlxcbiAgICAgICAgXFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJleHBpcmVcXFwiIHN0YXR1cz1cXFwiRVhQSVJFRFxcXCIgdHlwZT1cXFwiRVhQSVJFXFxcIiBkaXNwbGF5PVxcXCJmYWxzZVxcXCI+XFxuXFx0XFx0XFx0PEV4cGlyeSBlcnJvcj1cXFwiZmFsc2VcXFwiLz5cXG5cXHRcXHQ8L0FjdGlvbj5cXG4gICAgICAgIFxcbiAgICA8L0FjdGlvbnM+XFxuICAgIFxcbjwvV29ya2Zsb3dTdGVwPlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzAxMTMwMjQxMn1dLCJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyIsIm5hbWUiOiJEZW1vU21hcnRDb250cmFjdCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkRlbW9TbWFydENvbnRyYWN0XCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkRlbW8gU21hcnQgQ29udHJhY3QgSkFSIGdlbmVyYXRlZCBieSBodHRwczovL2dpdGh1Yi5jb20vYW1hbHRvL3NvbGlkaXR5LWphci1idWlsZGVyXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYzMTgyMzc0NzYxLFwicmV2aXNpb25JZFwiOlwiYzYxMzI0YmI4ZGFiZTExMjFiZGU2MjczYjBiYzgwNzNcIixcIml0ZW1CeXRlc1wiOlwiVUVzREJCUUFBQWdJQUU2YTJrNExsNHRkbkFBQUFCRUJBQUFVQUFBQVRVVlVRUzFKVGtZdlRVRk9TVVpGVTFRdVRVYU56ckVPZ2pBUUJ1Q2RoSGZvQ3h5aFlCQzdpUzZhTUVrYzNKcjJqQmRwYWNwSjR0c0xJMkZ4L2UrL0wzK3JQVDF4WkxoakhHbndTc2dzVDVPTEN6MDY5S3g1RHFFajdsRUppMjRBSFFLTVRrY0dNM2lPMnZDbXZyWnVBUTA5eWZ4SE5SL3FMVnp0RzVhL2hhZzMvbG56VEJTNVBFQmVRVkYxY3E5a3JZcnlrU2FuaVBQVlF2TlZvdFVUZW5HTTVrVVRSbEZtdSsyZTlkWTArUUZRU3dNRUNnQUFDQUFBVHByYVRnQUFBQUFBQUFBQUFBQUFBQWtBQUFCTlJWUkJMVWxPUmk5UVN3TUVDZ0FBQ0FBQVRacmFUZ0FBQUFBQUFBQUFBQUFBQUFNQUFBQnBieTlRU3dNRUNnQUFDQUFBVFpyYVRnQUFBQUFBQUFBQUFBQUFBQTBBQUFCcGJ5OXdiR0YwWm05eWJUWXZVRXNEQkFvQUFBZ0FBRTJhMms0QUFBQUFBQUFBQUFBQUFBQVNBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2VUVzREJBb0FBQWdBQUUyYTJrNEFBQUFBQUFBQUFBQUFBQUFWQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVRXNEQkFvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQVBBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZVRXNEQkFvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQWtBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2VUVzREJBb0FBQWdBQUU2YTJrNEFBQUFBQUFBQUFBQUFBQUE4QUFBQVRVVlVRUzFKVGtZdmJXRjJaVzR2WTI5dExtRnRZV3gwYnk1d2JHRjBabTl5YlRZdlpHVnRieTFoY0hBdGMyMWhjblF0WTI5dWRISmhZM1F2VUVzREJCUUFBQWdJQUUyYTJrN1k4NmZBb2dFQUFPZ0NBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpRdVkyeGhjM09WVWwxUEUwRVVQVk9XcmkyclZGUVVVZU1ETVMyWURrSGtCZEtYUmhKTjFRalk5OW5kMnpKa08xTm5aekg4STE1OU1DUTgrQVA0VWNTN0N3L0dHQU9aek55UE9mZk9PWk43Y1huK0M4QW1YalF3ZzhVbUFqd084U1RFa2tEZEgrcDhaVjFnYmFDdG5HYktqNnliYk1tVUpsYm1pZHlqYndYbGZ0ZTZMNFgxeW10cjhtMHUyOUZHKzU1QXQzMkx1czVRSU9qYmxBVG1COXJRcDJJU2t6dFFjY2FaaFlGTlZEWlVUcGZ4ZFRJbzZRbEU3NDBoMTg5VW5oT0gzWnUvdWJLeHlYUWIrM3BzbEM4Y3Qvd3dzRzRzdjFQODVraXFXTXVEa3ludDBZZ2NtWVIyL3JwTUZmZGhRQzdIeEF5VXAxUisxY1p2dk4zYTduSGo1cjR0WEVLN3VpUzc5QzhDM1NOMXJGanZPNU5rTnRkbS9KSDhvVTFEUEkyd2pHY1JabEdQRU9LNXdPdmJxQkpZL284T2djNk5td25NbWRoOUhwV1o4bmRmdFR0Ly9NTFVXVzhUbThuRU91TDZDWVA2S3N0WS9FeTdNOFJMSHFtQXAwdTBXcVdVMHVNZDRnN2JCbnM5MUhnQnpkVzFueENyWjZqOTRLaUdKcC8xQ251S09UNFhyMUNJY0Erb3ZObnFQc0I4aFcvaGZtVVg4SUJ0Z0lkNGhMc1Zqb2xVRmZnTlVFc0RCQlFBQUFnSUFFMmEyazZ3NEpEeG13RUFBT0FDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01UZ3VZMnhoYzNPVlVsRnJFMEVRL2phOTVwcDRtbGkxV3F2U2h6NGtyV1FWUlFvdGVUQllFS0pnVS9QU3A4MWxrbTY1N01TOVBjV2Y1WU1JUHZnRC9GSGkzT21EaUVqTHNqc3pPOTgzTXgvTTl4OWZ2d0Y0aWdjTnJHQ2ppUWkzWTl5SnNhbFFEMmMyMzNta3NEZTBySmVaQ1RQMmkyZDZTZ3ZXZWFxUDZWMUJlVGhpLzZiZ1lJSmxseDhJN2RBNkcvb0t2YzRsZU4yeFFqVGdLU20waHRiUjYySXhJWDlpSnBuOHJBODVOZG5ZZUZ2R3Z6K2pjanlGNUtWejVBZVp5WE9Tc0hmeG5qdVA5MlhjeHNqT25RbUZsNUtESWZ1NS9rQ1RKK2ZhVEt3KytiaWtZNXFSSjVmUzRWL0pxWkU2QXNqMTJ6RGJId1Z2M2Z5Z0x4V2JJeTU4U2tlMm5ITHpYNTE3NSthOUVhRXZYSnB4THJ4WEZNNTRHdU51Z2kzY1M3Q0tlb0lZOXhVZVhrYU93dFovQkNoMEwxeE1ZVzFPb1l5RjF1bWNQdS8rb1g3cE9YREttVTdaazlBWGdocVlMQlB0SzUzdUdOdXlTcEZzbFdxM1N5V2xKemZHbXRpR2VIM1U1QUROM2IzUFVMdGZVUHNrVVExTmVlc1ZsbkZGM28xZktDUzRCbFRlYXBXUDBLcndiVnl2N0RwdWlJMXdFN2R3dGNMSklCVURQd0ZRU3dNRUZBQUFDQWdBVFpyYVRzU0M1K0JDQVFBQUdnSUFBREVBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVE0TG1Oc1lYTnpsVkZMUzhOQUVKN3RLMjJOVnVzRHhLc0hxK2dLaWhSYWVyQllFS0pnVzN2ZkpOTjJTN3BiTnh2Rm4rVko4T0FQOEVlSmsraEpSSFJnWHQvTWZEdkR2cjIvdkFMQUtXeFZJUTkxQjlZZDJHQlFha3NsYllkQmZxOHhZbERvNmhBWjFEeXA4RHFaKzJpR3dvOElxWHM2RU5GSUdKbm1YMkRCVG1YTXdMMVVDazAzRW5HTWxCNTZVdk5GSk94WW0va1pEM0d1ZVJ6d1B0NGxHTnVlTmplSnRzSktyZUxkWm90QlpTQW5TdGpFRUdQWDAyYkNIOUEvbVhIaFN6NThYR0FmeDJoUUJkaitWZ3dGMFZCRHpHL3R1RG13UnFwSnEwT00xWUZPVElBOW1TNjUvZFBEUnpOeEwrak9DeFZFT3FhNUs3UlRIVHF3NlVJQmlnd08vbkVEZzUxZnRtYlErRE1YSEVPT2ZpY1ZSa3Fia0M5UnhNbW5TSEgvR2RnVEJUbHd5Sll5OEJ6S1pOM1BCcWpBVWpicVpsM0xzSkw1R3F4bTZCclphcWFNMEZUS0gxQkxBd1FVQUFBSUNBQk5tdHBPYW14THF6UUNBQUFhQkFBQUpBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKR1VWTjBZWFIxY3k1amJHRnpjNDFTNzAvVFVCUTliK3ZXcnBUQktxSWdJcitVYlNBRm5IN1pRaUFJQ2NrQ1FuSEpZdnpRZFk5WjByV21QL1ozeVVqRWFEUjg5bzh5M2xjWEE1R0FyOG05T2UrZWUrNTVyKy9ucjY4L0FGUlF5VUhDb29vaVNqTEdaSlJWNUxFa3dyS0NFWldLeTRMeFhFRkI1QlVGdXNpR2pGVUc1WWpiM09ueE5zTk0zZkdOajY0Vm5maEI5NVhSNWwzZkNHM2phUGZRakt3b0RxdkVmczF0MS9FRWUvZ3c5aVArSnZCN1RsdGdlYUd4VlgrN1l6TE12cnRiS051ejNKaUhEUFBGMG4vUXBXMi96UmxHNmpSN1ArNjJlSEJzdFZ6YWtST2RneE9HU3JGK2F2VXN3N1c4am1GR2dlTjFxcVc3bGZXNmIxdHV3d29jSVRoUWxUeXJ5MFh0SDBWeVhuTThKOXBnR0w5aDRGNnBRZDNSQjRkT2xqT2Rqa2RUQWxKS0YwVkJxWW5MUzVyWHIvVHVlSEczZHBmVERScXRtbjRjMkh6WEVSNXp4enlNVm9TS2hudml0NDlwV01NNncvVHRTaG9tOEVMRE5KNW9HTUdvaG9JSU9rWVo4dGM5TVdSczEvZG8xbGl4ZE1YdlFldVUyeEg1ZVhuMUJyWmRLd3lyTi8yRDY2clZ6VlY2ZkhsNnVkTG1oSEFBVUM0TXNpN3k2S1E0a1dBZ2gvc1lCOE1EUW5PVXhWTDdZSitSdWtUNkV5R0doeFN6U1cyZitCT1lIUEFyU0NXN3FpNlZ2eUJ6Q1Vud1U5ZjRqeWhxZjFpWXd1T2tUbGREVVNpc0lVMGZJSmVYcGk2UVBidWxYY2FNc0k3WmhETUhCZk9KWVNIem5nNGkxdFkzU0UxZFRsOUFPVWN1QWFxVWdLRUVhSmtFREdlL0UwcjM2UVUxcFQ2R3pHYW1qMkh6SE96czczbFZHZ0ljWUpGTXBBWkRGL0EweWM5K0ExQkxBd1FVQUFBSUNBQk5tdHBPZ3dUMmhxTUJBQURqQWdBQU1nQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTFMbU5zWVhOemxWTEJiaE14RUgxT3Q5a21MRFFVV2lnRnhLR0hwRVV4Q0ZwVmFwVURFUkZJQWFscHlRVUp5ZG1kYmwxdDdOVHJCZkZaSEJCU0QvMkFmbFRGN01JQklZUmFXZmJNZU42TTM3TjljWGwyRHVBbEhqY3doNVVtQXR3TGNUL0Vxa0RkSCt0OC9abkE1bEJiT2N1VVA3SnV1aTBUbWxxWngzSkVwd1hsZm1EZGZtRzk4dHFhZkpmTDlyVFJ2aWZRYlYranJqTVdDUG8ySVlIRm9UYjB2cGhPeUIycVNjWTdTME1icTJ5c25DN2ozNXRCU1U4Z2Vtc011WDZtOHB3NDdGNzl6UFhuVzB5M2NhQlRvM3podU9XYm9YV3AvRUtURnlkU1RiUTgvRHFqRVIyUkl4UFQzbC9KUkhFZkJ1UXlKV2FnUENYeWd6WitaN2ZIYlpzSHRuQXhEWFJKZGZWZngzZFAxR2ZGYWwrYk9MTzVOdWs3OHNjMkNmRWd3aG9lUnBoSFBVS0lSd0pQcjZOSllPMC9LZ1E2VjI3R2I1bVNIdzMyQmRydGo2ODZmMXpBekZsdlk1dkoyRHJpNHFuMTFGZFp4c3JuMnAweG52QnZDdmhqaVZhcjFGRjZQRU1zc0cydzEwT05COURjMlB3T3NmRUR0VzhjMWREa3RWNWhQK0VHcnl1L1VJaHdDNmk4K1NvZllMSEN0M0M3c2t1NHd6YkFYU3pqWm9WaklsVUZmZ0pRU3dNRUZBQUFDQWdBVFpyYVRzL0NvRTJnQVFBQTVRSUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4T1M1amJHRnpjNVZTWFU4VU1SUTlYWVlkZGgxbFJVRVJOVDd3c0F0bWk0RVFDR1FmM0VnMFdVM2tZMTk4NnM1Y2hwTFpkdWwwTVB3c0g0eUpEL3dBZmhUaHp1aURNY1pBbXZiZTI1NXplMDdUcSt1Zmx3QTI4TEtCS1N3MEVlQkppS2NoRmdYcS9rVG55MnNDcXdOdDVTUlQvdGk2OGFaTWFHeGxIc3Q5T2lzbzkzdldmUzZzVjE1YmsrOHdiVmNiN1hzQzNmWWRlSjJoUU5DM0NRbk1EclNoVDhWNFJPNVFqVExlbVJ2WVdHVkQ1WFJaLzk0TVNua0MwUWRqeVBVemxlZkVaZmYyZHk2LzJXYTVqUU9kR3VVTHh5M2ZENnhMNVZjYXJaOUtOZEx5OEdKQyszUk1qa3hNdTM4ZEpvcjdNQ0NYS2JFQzVTbVJSOXI0clowZXQyMGUyTUxGdEtkTHFZdi91cjU3cXM0VnUzMW40c3ptMnFRZnlaL1lKTVN6Q0V0NEhtRWE5UWdoWGdpOHZvc25nYVgvdUJEbzNMcVp3RXhLdnF5WjFtNS9lZHY1NHdrbXpub2IyMHpHMWhIVHg0enFxeXhqNzFQdHpoQ3YrRDhGL0xWRXExVTZLVE9lSVdZNE5qanJvY1lEYUs2c2ZvZFkrWUhhTjY1cWFQSmFyN0FXOTNoZCtJVkNoQWRBbFUxWDV3Rm1LM3dMRDZzNGgwY2NBenpHUE81WE9CWlNNWEFEVUVzREJCUUFBQWdJQUUyYTJrN0ZrczQ1b3dFQUFPWUNBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpNdVkyeGhjM09WVWwxUEUwRVVQVk9XcnEyckZGQVVVZU1ESVMyWWpnSGxCZEtYeGlhYXFxRmczMmQzYjh1UTdVeVpuZFg0Yy93SlBoZ1NIdndCL2lqajNkVUhZNHlCVE9aK3pKeDc1NXliK2Y3ajhodUE1M2pjd0FMV21naHdMOFQ5RU9zQ2RYK3E4ODFuQWp0RGJlVThVMzVpM1d4ZnBqU3pNay9raU00THl2M0F1cVBDZXVXMU5ma0JseDFxbzMxUG9OdStSbDFuTEJEMGJVb0NTME50NkcweGk4bWRxRGpqazVXaFRWUTJWazZYK2UvRG9LUW5FTDB5aGx3L1UzbE9uSGF2L3VibTdoN1RiUnpycVZHK2NOenk5ZEM2cWZ4SThkNlpWTEdXSjUvbU5LSUpPVElKSGY1MW1TcnV3NEJjVG9rWktFK3BmSytOMzMyeGY5RGp4czFqVzdpRUJyb2t1LzR2QXQwejlVR3gzcGNteVd5dXpmUU4rVk9iaG5nUVlRTVBJeXlpSGlIRUk0R24xMUVsc1BFZkhRS2RLemZqOFpqWXZadU1Ca2NjYjdVN2Y4eGc3cXkzaWMxa1loMXg5Y3g2NnFzc1kra0w3YzRZVC9oREJmeTNSS3RWQ2lrajNpRnVzRzl3MUVPTkY5RGMzdmtLc1gyQjJoZk9hbWl5clZmWXo3akpkdTBYQ2hGdUExVzBXTjBIV0tyd0xTeFhmZ1dyN0FQY3dWM2NxbkJNcEtyQVQxQkxBd1FVQUFBSUNBQk5tdHBPMkliNzBJRUJBQUNDQWdBQVNBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpGSkdVVkpsWTJWcGRtVmtSWFpsYm5SU1pYTndiMjV6WlM1amJHRnpjNlZSVFU4VVFSQjl2YnV3c0s3eW9TS29GeE1QNG9FK1NMeG9URnhrRTVLSmhzVnc4ZFF6VTh6MlpxWnI3ZTVaZjVjbkVnNzhBSDZVc1dZZzhRS0pDWmYzcXJvKyt2WHJxejhYbHdEMjhYS0FMcDcxc2RQSGM0VnV5WVhDWHNLKzBMOG9mVGZUYzgrUk15NTF4cDUwUlhIS2VkQ2V3cHhkSUoxdzhVR2hZM09CSHlPRkZSdENUZm5ucUxDVnpNekM2TXJFcVI3WjRzaEZLc2hMZDdkT1M0WE42M0pwWEtGUG9yZXVXYlQ4MFRvYlAwblBtOTFUaGQ0QjU2U3dsbGhIWCtzcUpmL2RwQ1UxdzV5Wjh0UjQyK1EzaDcwNHRVRmhlekkrbmxCR2RrSDU0WUpjbk55SVZSZ2VPVWYrb0RRaGtIUitTU3pyZVduaUdmdnF2YzZwWWgweVBhR2ZOWVU0Wm45Y2N6VFJ5dkRydTVhSzZNRUoxejZqc1cxRTdOdzJ2ZGM4ZFlnaEh2YnhRbUYwLzJzVjF2L1o5eTJkVVNhTzcvNzNYcnhDUi80ZDZFRjh3NUpFWWo3NkxhOWd0ZVVCSHJTc0d1R0NqeVRUYlE0c3ZUMkgraTFCQjJ1Q3k4MmhHbU5kNHVGMUF6YndwSzAvYlhFTGo0VUhVdXRnRzV0WS9RdFFTd01FRkFBQUNBZ0FUWnJhVHFJeTErZElBUUFBSVFJQUFERUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTNMbU5zWVhOemxWRkxUd0l4RUo3S1l3RlJGQitKOGVwQk5GcmpBdzhRRGhKSk5LdUpnTnpMN3JDVUxDMTJ1eHAvbGljVEQvNEFmNVJ4ZHZWa2pORko1dlYxK3ZXYjlPMzk1UlVBam1HOUJCbW9PckRpd0NxRGZGTXFhVnNNTXR1MUFZTnNXL3ZJb09KS2hkZnhkSWltTDRZaElWVlhleUljQ0NPVC9ndk0yckdNR0pRdmxFTFREa1VVSWJWN3J0UjhGZ283MG1aYTV6NU9OWTg4M3NXN0dDUGIwZVltMWxaWXFWVzBkZHBnVU96SlFBa2JHMks4ZExVSitBTU9qeVpjRENYdlA4NndpeU0wcUR4c2ZqdjBCZEhRUU1RREpBSENvczl2cGJLSEovVkdpNGhMUFIwYkR6c3kwYnJ4MC92N0UzRXZhTjF6NVlVNmtpcTRRanZXdmdOclpjaENqc0h1UDFaaHNQbUxlQWExUDNQQkFjelJKeVhHeUVrSjVUeFZuSEtDNUhhZWdUMVJNUWNPeFh3S25rR0JZdmx6QUlvd24xNHRwMU1Mc0pqbUNpeWw2RExGVXVxTTBNUUtIMUJMQXdRVUFBQUlDQUJObXRwT0ZGaXBBUkVjQUFCSmFRQUFMd0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpMbU5zWVhOejFWd0pnQnhGdWY0cnU5bmVuVXhDV0VnZ2dBbEh3TTNtMkw2bk95U1I3R1lES3lHQmJCSmNFTENucDJjelpET3p6TXlHUkgzS3FZaUFJQ0lpeWlFSXFNaWhrQkFDSXFpbzRJbWllSXYzOWU1TGVlL3ArLy9xNnA2ZWEzY21HVjU0aE8ycXJ1TS92L3JycjU2ZWVlNnZqMzhPQUhUMnB4aTBNWmt1aXNUVVRxYkY0RmFtMDhXZ2kwbVhoTVNzVHZpS3hHeUpMWTlCbkowY1l5dllTb210a3RnYllqQ2JuU0t4MVRIb3BySS9Cb2V6VTJMUXhRWWt0a1ppZ3pFNGtxMk53UkhzMUU3NGxzUk9pOEV4Tkc0b0J2T3BmR01NanFYeTlCZ2NUK1c2R0N5azhvd1luTVRXZHNJTEVsc2ZnMFZzUTR5ZHljNGlPVGQyd3ZjbE5oeURaV3hUSi95b0UzNHFzYzB4VUduV0ZocHdkaWU4TExFM3hTREJUdW1FWDBoc0pBYkxxZmVjTHV3OWw0YThXV0xueldEbnN3dGk4QWIyRnFvNU0xaVN1WFJKU2N5VFdEb0dhOWxvREFiWjFpNnNaYWgySVEzY05nTm1zREVKbnFmbTdYVEowaVZIbE1hSndVVXpXSjRWSkZhTXdTYTBCSnRnT3lSMk1YSGRHWU96MmE0WWV5dDdHOVhlVG0xL1IxUGVJYkYzeHVCOE50cUZGODdxRXFwZFNwZkw2SEk1WGJKMHlVbnNpaGlNa29uYjJKVTArVjBTZTNjTXR0SGtiU3hEbDB2cGNobGRMcWRMVm1KWHhTRHZUM2tQWGE2bXkzdnBjZzFkcnUxazExSDVQcnBjVDVjYjZQSitpZDNZeVQ0Z3NadGljQWtibGRnSFkzQVpsVGZINEFxeXpUdlloenJaTFJMN2NBeXVZcmRLN0NNeHVKcjZQeHFEYTZpOExRYlhVWGw3REs1bm81M3NEb25kR1lNYmFlakhZbkFUZGQwVmc1dXB2RHNHdDFENWNRWkhibHg3MWhyUEhjdGt2ZFRnRGk5YjNPZ1Z4blBaZ3NjZ1BwVE5ldm1CTWFkUThBb01qanBySWxmME5ucXVsOWxSTlpiSTFPbnE2QjlhdjNyakNJUHVkUmM2TzV5K01TYzcyamRjekdleW95Y3ptRG1BbzRwT3RyakZHWnZBMFRQV2JsNC9jTUdwZzV1UUlQWUdkMmR0M3JCcGtNRWgvSDdONE1DNm9mV0RmTVJzM2pLOHVmK01vV0RRckVnVEgrTTNyTy9mdUdFdDNnOEhrM2dEbjROTmh3ZWMramVQREc1Y3ZXYk54c0ZoYkQ2VTlCb2NHQnphTXJqbWdzRXRnK3MzTVZpd0xwY2Y3YnZZUzJvWDlqbkpURi9LS1RyRlhlTmVvWTlyamtvZHhxbFd6aU5hUXZTd3JXTkZKcHNwcm1Ld3E2ZmFPaEUrNC9sY01lZm14dnJPcHR0b2o1dmZOVjdNOVEza3ZSUXl6emhqaFpOOVN0dWQ0dGErL3N6b1VMYm9qWHI1T3EyTHRqQm9IOGlsMFBTSHJFTVFySi9ZbnZUeW01emttRWNleTduTzJCWW5uNkY3MGRoZTNKcEJPQ3hlbDhuMWpZODV4WFF1djkzc1MzbmJjMzBGdDIramQ5R0VWeWl1emVVSkxrNHhnKzVGaXh6aTVyTEZ2T01XVjZkU2VhK0E4NmR6OFJGVzliVkVOTGdsdFJqTW4xeHRCcDJqVHVITWZNWkZLZWZXVnRjZnN5NnpQVk5rRUZ2amplYzkxeWw2S1Fiek5rNGduZTNlbGt3aGczcXV6bVlEOFVOaTNEZWxPVWlzMEVxdmxYcUxPL3RReXI0QlliTlRTYXZjamt4SytPc3d0N3FEd1VtTkVXRHc5djBWR3FsdXlqdlpBbEpFdTV6aFpKMzZ1S3FQdHU1aUZRMEd4MDNKaHNHT0ZzdmRzTDA3UnIwaUR5UTlQZWYyTDZyRjBzM2xQWVQrZGd5UUE4N1lHQW83TFlPWW1uWnVQd0l1UFpIbGpCa2NYemR5ckJWamNHYlhjR1kwNnhRbjhvamlheHRrdUNLcXpNVDRHRkljOVRCNEUwejdObEdEdG1JeVA1V1p0T2E0VmZpUEZvOVg1TnNBZ3p0YkpwcHhnS0tkMjE4OTBoYzNsdkozTnU2OFUxRGdZR2dWTGh0ejZ2UjgrcUloOUd0bnBsQ1k4RktyTVlhODh3Q3BycWc3WnJ0WDNKcExGZnJ5WWllTllwaHZ0ZU5GcnVTTXdrUVN3NWx3eThaSjVLazJVNE42dDAwa3h4amMwSExTQjY1OGw2ODhkL0NaUFMxWC9IMHRKdGtDaGJQSi9JWTA2b3ZiMGtrOURhcXhxcUdCZFpZaHh4am55aUdHZkEvQktOQS9zY3ZMaDV2NThtWVlsSzlUVEwzODhGcVdQaUxORFQwSFpLeEZQck9KWW1hc2IxMm1RR25aVElxMXFWSm11cWJ4RkdaaHZmeVdqT05SQTg5ZlVlenV3ZExkMlpuaTFuVzVVUWE5NVp0TnNORXNyQjU3Y3ZrR0tiUmhzUEtBaklHNDJVRmN5QkNZL2xhYnBpdVlqUnJNaVhTdnp1ZWRYV0xNM1BKc0VHMHBNc0lWRmZSV05LNHQrZi9jV3Z4V3RNSTNSSDNtY05GeHQ1M2hqSE5oSlhZUEhrWWxkaStEbTFxTHI1WUpmR1Mrb25mdFdPNWkzOURyR2hHWjgrc2JMRzVkbXhrcjhsMElCY3Q3SlAwT2IyZGZRQTA1ZGFUNUNBYmFmcEJsOFA0V1N0TXk2MTFjWDZnMVh0cVpHQ3YyaitYY2JXYzZlUWVGTEU4REd4bGUzNW94UE1ibS9lRU0rcG9raXptRmwwMkp5VThlSEIxYTVvTzVRWlpZR2RMWE5zR2gvdE1HNUhEZWdZYU1TYWlUQmpjZnZOZ3doV1JIWFZUVlg0b1BIemhJSzNJS21aOTY3ZU41Q2cxRWlsTDJvS3pRZEFKUjh6bGJpemJBMnJSSjlvTzd6OVdYaS9hNXN0NFNqZy9pemxKZjN2OGZVYm0rL08xak9RZlBybmNkckFlTlRUMHZ2T2NnUHFOcVN0Q1AvdDgvQVd4S3Zqc095a096cGtUc1NIbmpZN2xkREs2b3VjSmFhYm1HVHNzUHZ3YkVhR0xWODhYOTdzWmtQakNuTm1TOVIxNGJralJyd0t2MzMrbE54WmFHYkxqbk5TTk1zMmE4OW9DODMzcExQdjVha3FkWlk4WWMxL1VLaFlXeUxETzRvS2VKMlZOL3psRGo4ZGkwblRKZEZHUTh1TlAxeGprcGlkMVhFa1FoUVlJYmxXN3Vib2xVL3VlbWphZXA5T1JvVWJuN0puK2tObTJueW1CWmN3eEttbXBSdFhXNjZWeEJXUmIvNExhdGh6NGlpZzNuSnZLdWg2bW9SeDhsMXRCK0dkazd6ajdCUGhsbm4yTDNNMWpVc09IWVVjK2FzaVdic2k0YnFxWmJzbUtZNkFwRk5oSW1Zc09TMHlramFXQy9qSDJHanFYaS96bXlrcFExeFZaTVRWTVN0bXpRdkpTbUlDMmNyNmswVzdQcG10YlNYcU04Tk95Z1BzdnkrelREbEQxWmNYRzJsblJOMTBpNmlxTFFDSnlSS0d2VnNWWFRiYjgxcGVpS2Eyc1diMFcyZm1zNm9kbTJpNUx6VmlVdFdoM1pWUXhGODF2VkJITDJKVENOSlBYTGxxZWpEbW5lTDFzcGY1WmllSnFIeXZOV1JiZjhWczFOcC9XVTRmSldWVXY0clpabEpmU2txdnF0bG1va2pHUkpjNkthMUgwTGF5YjlyOHFXb2dnck9WcTVsY2dpZ1ErczBBY2t1WjRraWJtVjBRdVdiaW1HU3JSazhvbGZJbTNranhiMGFidWVrVWg3TkFlMU15UGpjWXlzb1p3cVVjRjJwZFJuS3dieU5SUmIwTFR4enRJNFpmUUoxZ0xKRlprOGhETmxtby9VNUpBRzhVNXJKSzBoKy85cy9rZGppYTVDMGdncUdyY3N6dGFJcXltMFFDb2E1NEVHOGkxUUxpRlJ0dldBdWlFSFZyRlJMNXQ0azlVVk0xM0g2dWpjQnExdUdGcVoxYzBhVnVkelE2c3JsbDNINm5wTkhqWGFJbk8wcWhWcFZyZlU5S3k1LzU1Tlc1TjRWdkhraGp5cnFzWitlOVlzZWJhdWQxWFRpM3JYTEhsWHhSVmFHWGtxYkd3cG1vSGpUV1RQY1lFNE5HeWtqeTJjRzkxVHFFTFpoUGU1NWRERGlrSFdKU3RhK09mamluU3ZMWlVWa2NxMm9sTFZrRWtWTXFsVk1pbGNBcFczS0NWclc3ekdkZWQ5cHM3dHl2OEw4YWltOUNoZkd1bjdnV3JCR004c0d5TVQ1OEFuUG00dERTT0xUalBLdUdqWWtPQTBNSTVHYWRnK3ZqZ21aTi9LNUQ5ZERwREVmV29MRFdqbndIN05WbjM5b2lzQS82R3NscTV4NnJaS01wRmQwQXQ0WnhzRzdTaVduWXJHQSs2MXlUQ2lHZW1wdlZHQkR5V3d1eGxLUFluZEVhbFQybDF6MUFPM3U2c2ZSTHM3S2JlRzNYVTVoVmRYdDhwWHo2UXJKNWpqQlRUVU5OMGJlcFJHWmV4RGVWU01JUFhwVnZzVmRlSXhOTlRXdHhMVmtJZUNOWjJva3BkdDFKNXFOTmRmaVg0T2tVaE5nUjNkNTBBU2xUZ0UvSFNpaTVLclBQNGlITW5QS2xtSDloUkR0MHpVaFVjQ3NjL0tNcysyVUNVZUhVZzZXU2Yva2c5UlFrSTQrdGN5Nkk2R29XOW9aOWNObFNJcGVnM25FQ2YwcGlxaXM2RXFQSGVoaUUxKzFOTW16NHNvQThLeGhrNkl3VkwxVndENVhzd3lmU3piZkNYSXNvOFhxcW0wRnlSUlI1Nlo4RjZ4WHZ6ZGtqQkxOR1RFcTZYNm51TDdCYWNXN0NqVjFrUjl6RnIyRkxiMHVYTTcycnFOSzVhUVNYVFNhWnlwY1lzcElUWWJ3WU0yT1I3UWQveVBhUGplVUpJQ0dZYmxUSUdNU2swNHIrQU90VkhJTWx3amhlK2RBVHBVN3I4QUhWcGRkTkNLMENMb01EZzZETm1mYjBUUWdXc0dkeVJmQTZVQ0haZ1VsNkhEcEF4N1NuVFFyQU5GaDRuaHRGbDBXTFZzU3JFZ1FJaXRxQ0pINGRZa2YvSzZuYkJ0bTF1QjBNTDNYcUVsSDZHTGxXOUcrUVk1RjBVOThuMGs3dFhDbHRaWXJLRVl6U05NZ0NUVG1XcC93dTIybHQ2bFZXRUkrUVZTekZSRi9oRkVWSmRiaHZCUUM2OWtGZTV6UHl1UktjSllDZUpvR1R3akp1UWsrRnpxOVROUFN4YlIzcWVHOUN6S2tNa2pWdEpLa055MFIxbE9hVS9STkxJdHRmampiTlBuaWRtalNVajF2WWljeUpLNmJlUHh6L0lqQTNwUnRoTktBdVZCdFBQWVNWSFE0RWczYkkya3BOM0hKcnNtVEI3Ui9XanBZNStqRUhjYVUvZnoyaUNmNHJ1TkZrUmxuczJMZkoxeTVYQ2ZKMXZ3ZkY5Vy9YT3k0V2RtcXA4L2N4cGk3WEpkVmNVTjF5MHZoY1d0RU0rMEVQd1ROMXBFWUZVcDRiYldPZDNmQjZ0UDczNjd3SmFnS2RkWVJWVllxaE5oL1ROTjJTbVRRZ2JYSDQvay9GN3pjNW9HOThUeVZlcnppZHE3SkRsZkJXcWdQWG1OdEtuTUN5THJJK0ZuQmo3ZS9MeUxzaDN1VVlOanJFWkdRU3ZXVmhKcDNkQmtMMkVpSGhLeW9xWVVCVVZFeERuSlJNTEFrNitoNlRoR1NiaHBUSjd4UktTcExxSTRwYWZjbEs0bDdZUnNSL0lSazRkbnpQWDhtbzZZbEtlSUcvcCt4ZzNMVFU0Wk4ycnVRWFhqaHBYVzl5TnVKR3JHRFl2SERkekRncnFQUnB5WGlNUUhNNHdQZGxWOHNNUDRZQWpPR3E1N2xXSUFjakZGZExBd09sQlVvQXplNUZFaWdkbVFJVTZoS0VsVlhDQ1B0VFl1MlBRa2FhcTRZSW4xVEpuRmxIRkJDN0kvb29jMjhlT0R4dlVKNG9OV0p6N29Zb1ZYeDRkSXRLbnlvazFlck1aaEtaTWx2OUxlYXB0VjFxQ2NVd2trdFFSaVpVWGM2Mmg1UDROUXJSU3RVNjRGM1pGRkhEOHErT2NzLzBtWGhjNUVMVlMrZnVqWmoycFp2QVZYTnoxd01aS09ZdG1hUmtFMjZhVTkzRUJNTGVFWWpxYnJIbG9PTnltVGduOWFkZ3hQOTF4Yk14TzJtbkF0Vy9HOFpEcUJlSEx4ejhPL2xQK0hmRlE2R1FXSUlOVGFISDJVYzlOZjJWTVR4OVltZVdyaUpKSU5QVFZ4WEhtL241b1k5WitaaExISHFEcXRJVzQ0WG1TN1JwYWorYzgvbmJUWmREYWlUQnBWa3NwVStZMGVZSy91S1FyeFJKR0ZJMHNUTVlNQ2hJdXJYVU9NQlhIZXNPZ29qenhOc2NhNUg0M3E5VjF2ejVvYy9iWDJMTTVUSUo3TG92Q3NuVkRyci9sRWdIQ2J4eU9LQ3BRNThWVVJSQ0RWejdFU2FWZFBvSmVTbm1VbVpCTnovSlRyeXFacXBwTzY1V0dRU1JwYTBrMjU2UlFldU0xa1NqYlRLVDJKdTVMdFdDbGttVXpoS3JGTGZ4elZZdmNveDdhL1k5VkV0eXVyazZBNzZUa05vZHRWMDYxLzJ1c29BdHRhUlRZdTg3T0dYMWNqZGIzRzV4ellZNHZUU3hBL0xUNGllczRTVDEvcGRLTFhPdCtVbnJud1V4ZnBqMmVxOEJUbE92eUpLT250NDRTZXNDQUhucmxTZjBvTkpQQ2xJL3dTanBXZ04rRS9KZUJqZ24yR3QrTmVTRHV4VVRxUFJVNVlPQ2FaRUJpbjhaNS9JcWE2cC9ydGR2RGtCdmNnbWt2UG9wQnZ3Q0Y0V3E3NHV3VDN1ZXRaaHBuMkhOVTBURFhoNEQ4VnozOG9ucTJuOWJRbXF3azVvYVJTRGg0OGROdlJ2WFRLVXpCbFNCcWVuVXBqQXAvRVNaaG9tV21GTXRTMGl2SFlSQkptMHRRVG1wazJYVlBUTlRJeHVralcxRGc4eUQ1Tmx3Zm84aUJkSG1KdzdGUWZWakk0cHQ0UWVndWR3YUo2M2FWdkd2WHZLbm9GeFNTV0QwdnNNM0gyV2ZZSWc2UExKeEsxamJqdjVMMHNmWWR3U2VOdlhpa2FVWDYwdVRsNmM4TU5Zckdid2ZGVGY5TGNIR0Z1bFQxMGVheTVpWW5taGx2TkRiZWJHcTdLelExWG1odXVOb1N5elpsc0VWY2ptWEt2eEI2UHMzM3NpVGg3a24ydXpHdmxzemNYMDViL1loWk5lNm81c1RRR2g5ZDZIeUhPUHMrZWJvNVVjMmhVRFFheks5OHNpOE9uNEg3NmpQc1pCb2ZWZUtkVll2ZkUyUmZZRjBuUkw4WFpzK3pMRXJzM3pyN0N2aHBuejdIbkdmUTArcGsrZy80RGYxbWR4RmdhWjE5alg0K3piN0JGY2ZaTjh0YTMyTGZqN0FYMmZCeWVBN3k4Q0UvRTRRZHdaNXg5aDMwM0RudmdNWW05R0dmZmcxZWFzNWNwc2UvSDJVdnNCd3lVcGw5dWpiTWZzaCtSdUQrVzJFL2k3S2ZzWjNIMmMvWnlIUDRDcjhUaDAzQS9neld0ZU5rNXpuNUJKdmdscWd2ZlJlM1pyK0Q1NXRSTXhKbEVNajFBTWpYbm96by9ROUFNZHl2T1poSDNCK0VodWhEUTRHbTZmSmtCeE5tdjJXL284bHU2L0k0dXYyZnd1a2xmU21Fd0k0SWVCb3ViaUY5TmpWYWJHczEzbXo4d21Gbm15cVpJNkVUaWowMU5NWm9hYlRZMU90SFVhTXYzUzRDWXB1WTJ0NjBvelcwclNuUGJpb0p1bjFNejVqR1lWZjZDRm9QdVVzTlFrVGFjWEQ0SXM4aHhhRVA0MGhhQzJ0dkpxWEFNaDYrWWw0TG5ycDZEOXk3V2ZHK241MDc0ZWNvWkUyUEZ6UGlZeDhkczlJb1RlUlJlcnkvY1pLK3Z2YmZXbTg0SDdUYzFybngxcFduNHR3dXVhNTBjcmZuNWg2dGVkWUVhdHMxMCtnbURMVUVlVTBwVkNndzY2RWRDYU5HZDJITnVSTG9OeVFzOXQrWjNpNWMxOHlJa01UWHEycUZFdHZLZTVwM1o0dmRBa2VUeFBSRkdiaTdyVHVUeEJGVHNveFhLdjl4SWcrYjExUGZwbk5MMGdkelltT2VLMzAzcDhyYVBGM2VKNk5WVHcyckhpRmhRT3JsRUhNcmd0SVlpUVVNdkFzK3BZVzZ1ZTVVRXc5aFZFWkZHR3BBalFwNy9aRktqZ21WYkY0b2IreFo4ZXlIelZvKy90enFFTnoxRFpJWE9UTGloekMzelU3RFI0RHhwcTFOWWovc0tuM29PVHMzeW04T0Q4ZEVGNHY5bUN0OXE1RWwrR3FET2U3ZHRZelR4TUtTd1BwY2R5cWJRUmFuZzYvVnQyRXJlSEtySmxYNmZSUHlRVkp1VFNsVzRQVmk5S1B5UjllSUw3cnNlMzZsSzMwYWJVL043V2NoaHV6Tk9QMzFRL3IydDROZGV5aUJhN3p2RDNTanZRT1V2STVWYk5QeWxyTUtyL1AyejJ1dmpxSEp3Y2tnT1p0MGMvOG1oRG8vWEdHaFRnYmltUnJQUVJmNXEyNVFiejdoNGhxbTFTQnYrS21ENHhmVFphTlVLMkhRV0pzYkh4eklrdE1TL1FVcy80ekxiLytKUjlMSEozcDZxZGZ6cTd0R05iSVlOUnBJbjlsUDJBOWxHV3lqK1V5MDBmUk01U1FzMWVLYTFEamc0U3B6WVFGN0NmelN1NTV4RlcrQTRhSU5iQWMvV2NCVGNBWGNDZzQvaDNUUm9oM2x3VitRK2h2ZDNSKzZQeHZ1UFIrNTc4UDZleVAxU3ZMODNjaS9qL1gyUmV3WHZQeEc1Ti9IK2s1RjdHKzgvQmZkamZSNDlIdUhsQTd3OEFXVjdFQjVDdVIvR3V5eEkwSUhsck43dTlzVkxsczVybnpkOUQweC9tTlA0REY1aldBS2NEak5oSFh3V2E2djgwZkFJUEFyQWE3czVWNnJ0Z2NmNDZGbXdGeDVIK2xUYkIwOGdQNm85aWJYcDhEays2eW44NjhCWm44ZVNwSGthNjhRemlhM1R5WnFCTkh1Z28xS1dEVEFEenVTeTZQN1lVSlo0S0VzOGxDVWV5aEtIWitBTHlJMzRmWEV5N2FWS2pwdFErODFOYVA4bGVMWXA3YjljWC92T1NsbmVoTnFQTktGOUlFdWdQWU92d0ZleGoramVqalNwYi9NKzZCcnBqclUvQ1RORzJ2WkJmR1R4SHBnNS9Cak02bmdTRHFHVzJTTzllK0RRNFpIMmZkQk4xY09HUjZidmc4T3BPb2ZHN1lHNVoreURJMGIyd1pFanZVdjJ3THc5Y05SRG9lRGQzQVJ2aGpsd0hxeUU4MkVOWE1BVk9OWm5IaXF3bVo0M29vQnI0RkQ0R253ZFozK0QwL2dtdG4wckZQcFJJZlEyTHZUUjFVSjNDcUdQSWZGZXg0V2VUOVVGWE9oanFYcmM4RWpIUGppZXFpY01qMGo3WUNGVlR5eFg1U1N1eXV0cnFMSWRWY25DTU9UZ0hCaVBxTEl0VkdXYlVPV2NDbFcralcwdndIZUVLcmRDRi9maFNxNUtUMGU1S2lSNGZHUUpyNkxnaTBhVzdvRmVFdkV4d1A2NXk5dDc1N1h2aGlXVndsMENpK0V5V0FaWFlraDRWd1FvSzBQaFZncmhxUFpkckUzanRSY1JvRzA0UitJQ3R3dUJ2NGZqdmc4dkNZRWZSb0ZwQVF4eGdaZEtqUWhNbGw0MlFsanVpd2cvdlhmZTlCckNYdzBKdUFhV3cvWFFEemRFVnR4UUtQeFFLUHhRS1B5UUVKNXFQOEExMEk2emZUV21DelYraUROK0JEK3VhWGU1aHQwWGtScTlYSTFscEViZjFIYS9DZTErTTlyOXcyakRXNmUwT3duczI1MEVycmI3VDNEY1QrRm5RdUJ0WXZFdjVnSXJiU2d3eXRNdWdLNFNlRFVCM25XOWk3djEzV0JVaWtkci9RNDRCcG1kZ0RzRWlUZlhKeW5FT3dFNnVRQk1DUEJ6ckwxY1J3Q3pRb0FFQ1dCTkljQTlTT0plRk9BK1pQV0pCZ1g0UlIwQjdBb0JscE1BSjBjRVdGRkRnRThqaVFkUWdBZVIxVU1OQ1BCTHJQMEtmdTBMd0M1QUowbllmbC92WjJEbDR0MndDcVBFRzBhVzdJVlRHRWJiMWV1eDFvOW5vZlo1N1h0aGdNRXRjQW5WMWxDUUgxeU9NRm83c2dkT1hkNHhyNE53Zjlxak1PVFgzdGkyRjA2ZmhvTm03SVYxTlBnTS9QOVJXQzk2Mnl0NjlVZGhnK2lhWHRHMTRsRTRjK204anQxdzF0bjMvdTN0U3gvaWV3dHB2d3gzREVBZHUxRExJM0NQTUZEZVZiZy9uSVk3WXhyM3hrdHhsL29Jd3ZFdTNLUHV3UjBxV0hXcndJUGZ3Ryt4Wm1DMCt4MzhnY1A1dmhETzk4RWY0VTlvb3k3RTF0L0RQNkNkanNBMSs0L3dUMmlwZnhiVzlmditKZXo3Vit6N04rdzdGS2I5RlJaSThPOFMvSWNFLy9rS1JpcmY2SDlHZ24rQlY0VFgzNGdxa0l2bTlqNENHeGZ2aGVGcEtPc21jdmJtM2JDbDVPQU92cXFlaVRoMWJpam1YUGd2K08vUXFmL0Q2ZjlWME0raFNnU05CZnZnN0pIRlMzcDN3NXYyd01qNnBlaml4K0NjM1hEdTJiMUxkOE9iUzR4bThTanpiU3hmd0h6cU81eGhyMDhpWkxnQS9vYlNrRUFMR0dNMGN4YnFTMEswK1VLd2FjQllXNGlzT3dTeVhrWmtuZGNJc3ZhV0krdDhSTllGRVdTOXhhODVsY2hDZ0NRbkJaMWJCM1IrYjZvTzdoQ1NudWpxcU9hWURpRTVFSUdraVFrVjRMN1NoVHZMRVJnQkRRelFxekJBbjRZaDJzWFlkeW5HdnR0eDdUK09VZUJGREVNLzVwSGdseEZvM2dhL1llMGNtdmVHMEh3NWRNSExJVFJmQ3FINVhCVTBYd3FoaVgxc2VqMW9QaVc4aGlDalQvWW1nK1lvUVhOckRXaitkbXBvc2s1T2YycG9uaGVCWnFZU21uL0c4aThJelZmMkU1cGRLRVFzaE9hbEFwclBJalF2YkFTYXQ1VkRjeHRDY3l3Q3plMzFvWm1kRkpxNVNhRTVYaCthRjRYNE96K0NQeFhUWVVCVGQ4SGY0QWkwZzRIR1dJWEw4alJjbGk3aTZsSkV3KzNvOE1mUklVK2pZNzZJZGlsaDczTEUzZ3lPdld0QzdEMGIydmpaRUh0UGh0aDdzQXA3VDRiWXd6NFdyNGU5dTRWYlpxSmJaazJPdlR4aHIxQ05QWnc3TmZZTzRmU254dDZGRWV3Vks3REhYZ2V6Mkh5WXh4YnNKL1ptUXhjN2xIV0xvOWxiRUhsazJWbjdvRzJrVnh5SEppcVZXeGpKdFB6REdFQndHUE9QWlhUODg0OWwrMFNTNkIvRzJtc2N4b2ovWVpQeDMxSEpmOUdVL09rQTFnei93OFZoY0JPMmtnWGpBZjg5Y0hFbDk2VVJTOGREN3ZHUWV6elUzai8rdFhFT2MrcHoyRm5KUVptU1E2QmZpY05jZG9RQTB1bEloVFNlMmQyRzlMdmJ1M2M5Qm0rdFpHRkVUbEF6T1dIZ05SS2Q4Um9SRmljb2RpUm5NRzhTQm0rclpHRFhZVUNTVnpNNGlqTTRHalVtQmxzUUJmd0F6eGtzOVRtOHZaTERxb2lWWm9VY1pvVXErTDZmRnZxK1RmamU1M2hNQlFibTRrcWFoUHZmVlhJZnFNTTkwRzl5N3ZPajNHZDNzZ1hzV0dIYzVWalNySTVlRFAzVEtyZTAza2hZNldESGlWWGV3WTZuRkpxZEFCUnJHVnVJRkU5c09jV1QyT3NGaGdkUkcvS3JoUGJaRGF3MlNkLzFVa2hTUXBMMzgzNko5ZUFTbm9Za2UxdFBjbkdMU1VJblc0SkwzaWY1Szl4RTZMOUg5c0U3UnJyZkdUeXB1UVIzM0V2NUVmWXlyRjNPVDdCWFlPMUsvM0QwcnMvU29SY252RHQ0U25MVkNJYTE5L0FaVitPNDkvSVoxMkR0V241eXZ3NXI3K09QU0s3SDJnMGhsZk00bGZkTGdzcU5ST1VEbk1wTk9PNkRuTXJOV1BzUXAzSUwxajRjenIyUTVHZGMvL2s4dlZnSlBiaXRLckFhenhuOWNER2E2NU93Rm0weWlQQmN4a0hhQngvRktkUFFSdHZRU2g5QjNjL0g4allzMTJKNU81WjU4UDhiRmVVbVVTNFhaVUtVcWloUEV1VkNVUjR2eW1ORk9WK1V4NGp5U0ZFZUxzcHVVYzRXNVMzODJnazNpL0ltVWQ0b3l1dEZlWjBvcnhIbDFhSzhTcFJYaVBJeVVWNGl5a0c0Rlg0UFhmOExVRXNEQkJRQUFBZ0lBRTJhMms3S01QTytCZ1FBQU1BSkFBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNall1WTJ4aGMzT3RWdnR6RTFVVS9tNmFkRW02UUtFdFVrVHdVU0ZOSDdjQzFrZHJ0WStOUnJmQlBpd2lJbTUyTCtsMnRudmo3azBwLzQ4ei9vcU9CWkVaaG5IR0YvNVBqdWR1WWlOdEdKcVJKSHNmNTl6N25mT2RlKzdaUFA3NzU0Y0FMc0hMb2grVE9RemdyU3hOMzg1Ujg0NkJkM1BJYUVrR1V6bWN4M1FQM3NPTWdmZDdrTU1IQm1hMVpzN0F2TzRYREZpNkx4cjRNRWRvSHhrb0dmall3Q2NNM1dyZGo0Y21HRVpzWC9KYTRLaWJNdHFjNUo3WWxEeDIrYkw0cGk1aVZaVFJVbDBxUi9reWpLZG8yN1FmK21xR1lUemZ3YjdoTlliMHZQUUV3MUhiRDBXNXZsa1IwYXBUQ1VoeTNKYXVFNnc1a2EvblRXRmF1OGRnbHNKUVJQT0JFOGVDcHVNSHR6bDBZWkxjelRpMVduQ2I0ZVJ5Y1dsWnVNTGZFcDYxSlVLMUxPSWFyU0pMS20vTHFNcHZpY3JGRFY2THBKS3VETGdySThFM2hWcVhYc3lqNW1KdXkrclVjQWMrUE0wcWVkWVZ5S29tMUpGdGhoNmhjZGFjZ0l3WldLVG9XUzNCRlYrdDJ4cTI4QjlZdGMzblphZ2l4MVZEKzljUzVHRjF1eWE4VmtBV25nL0JjM2w3dzlseWVPQ0VWWDY1c2lGY1JiSGJKMkxJV2R1dXFDVjRCc29NMlJXL0dqcXFIcEV2MyszZm9MMkxCTEVobzl2OFpqMTBrNjI4MkJ4TmR4YlM1MEYyUnJOWWtmWElGVVZmWis5Z3UvM2ptZ3BkQUN0MEF4bjdZWFV4OGNmQVpST2ZZc25FQ3pocFloRExKbGF3YXVJejBLMlorLy91bVJqQzZ5YXU0SE1EVjAxOGdXc01wMXN4Y2lvKzl4d0NvU3lJK1NxMUpyN0VkWWJVdFRrVFgyR1dvVDg1aEUxSHJmTTV2MW9LbGFpS3lNUU5mTTNRMnpxZ0ZSVVJLeE1PS2d5am5aeUNpVmZ3R3UzcDVIWS9ZYnFSR3d4bm41RWNCbHlHL0VFdkIwTmZ5OFJ1bGpJTUg5aFBxanpSbm1NcEJ2SldvOGJaQjZrOENTYTMxRHBsbGhKUm8veTBLUDZMcGl0S1hwZlpZem9OckhtcnRHWXQzTERXclBJcVJjVisybkVuSHVuc2RWeFh4QlRXQ1hvamZOdEphWDhHZEtlMXRZTzYxVmNWcWl6RFV1aUpiZUUxdEZRUDg4MGlVMWQrd0cwLzF2U09QQ21oV05GZWhvRjhxVzFGT2tUYUJJOVNQOTkyUmNyM2FKa2Z4M1hoelJMU0NidmRGZEdIVXE4RStoVzM5NWFRYXFBdFY3eE1MK29CRUNSWWI2K3VDZlJ2b0l1ZVFad2k2WXMwbWtHS3ZrQ3VNTElEVnJpSDFQYzBTK0UwdGQyMEJ2Z0ZMMUY3b3JFS1p3Z1R5VWlqTWZyU2JXdGkvVW5ZYWVyOXdvOWdQNkJyNUNla0Z4OGdjL1VldXN0amhHK01qZDdGb2E3N3lLYndDTG43NkdIVW0vVGJ3ZUZFbDk2ak83S0RvNGtpczBmUnU0TmpZM2QyWFQwRGc5cGZZZUkzb3Z3N0Vmd0RiNUpEWlR4R0ZYOGxGQW9ONTNZcCtMcVdrZXNtcnVNY2hnbXBuK3BrQVNQbzZwMGxXcU1rMGJRdU5rT1VMWXc4d3ZHNzZMdlROa0ptTXM0MjRjZm9TWk5rbkZxZXJKL0FHMGwvZ1FDMTdoSTVlSlpHcHlocS9XaDhNaVI5bFRET3cwWWUyWDhBVUVzREJCUUFBQWdJQUUyYTJrNU8xN0xkbFFFQUFMQUNBQUJLQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rVVhWdmRHVlNaV05sYVhabFpFVjJaVzUwVW1WemNHOXVjMlV1WTJ4aGMzT3RVc3R1RXpFVVBVNmFUaG9DTFFVS0xRK3BFZ3ZLb2w2QTJJQXEwVUtrU0NNZUtlcUdsV2ZtZHVMSVkwOXNUL2d1VmtoZDlBUDRLRlI3T2hJYmtGaXd1ZWNlMy9lOS92bnI0aExBU3p3Wm9ZL2RCQThUUEdMb0sxTXlIS2JHbHZ3YlpTOFd2TGJHbTl3b25odEx2Q0kvTjRYamxseHR0Q09lbXZJMXc5QTFkYTBrV1lidGRDRldnaXVoUzM3cXJkVFJQckRueTJuQjBQdDZ6SkFzRytNcDBxRjBycUhpcldmWXVRNnJoSi96WTFsT3RhZVNiQWp0TjVsaVdIOGp0ZlJIZ1Q0N09HTllPekVGTVd5bVV0T0hwc3JJZmhHWm9samQ1RUtkQ1Nzajd4N1gvRnc2aHIzUHNlNk1jcElyS3Q2dlNQdFpOd2JEZUtvMTJSTWxuS1BnTzBtbDRiVVMvdHpZNmhVdnFETGM1WHhHeTRhY254Z2Jjd2t2US9EVHY2Y043WTlPVFdOem1zall5TzZmNGcvajRHUGN3bWFDeHd6di9rZGhocTNmVi9pWUxTZ1BLejc0NTh6WVJ5LzhDbUFkWVhzWUJDMmNBRW1MUTJ5ME9PcndCc1l0M3V6c0xJNFM1Rlpndk9YQTRQa1BzTzlCNmVGMmx4YnNFN2FEUHI1MndCM3N0UGI3clh5QWV3Rkh3ZGJESHU1aTR3cFFTd01FRkFBQUNBZ0FUWnJhVG5JdHpmMUhBUUFBSXdJQUFESUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhNQzVqYkdGemM1VlJTMHRDUVJRK2syKzdaZGtEb20yTGpIQ1V3bzNpSWtrb0xFakYvWGp2VVVldU16WXp0L0JudFFwYTlBUDZVZEc1dDFZUlVRZk82enRuUHI3RHZMMi92QUxBT2V3WElRWGxIT3prWUpkQnRpV1ZkRzBHcWVQS2lFRzZvd05rVU9wSmhiZlJZb3htS01ZaEllV2U5a1U0RWtiRy9SZVlkak5wR1hoWFNxSHBoTUphcExiYWs1b3ZRK0VtMml3YVBNQ0Y1dGJuZmJ5UDBMcXVObmVSZHNKSnJleFJ2ZFprVUJqSXFSSXVNa1I1M2RObXloOXhmRGJuWWl6NWNMWEVQazdRb1BLeDlXMFlDT0toQmN1blNBcUV3NEJmckJ6YWVxUFpKdUxpUUVmR3g2Nk14Ujc4SktBNkZ3K0M3cjFVZnFpdFZOTWJkRE1kNUdEUGd6UmtHSnorNXhZR2g3K29aMUQ1TXhuVVlJMitLVFpHVGxJb1o2bmlsR01rYy9JTTdJbUtOY2hSekNaZ0YvSVV2YzhGS01CNjh0Ukx0alpnTThrbDJFclFiWXJGeEJtaHNlVS9BRkJMQXdRVUFBQUlDQUJObXRwTzV3TGUyRVlCQUFBaEFnQUFNUUFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKRFV1WTJ4aGMzT1ZVVXRQQWpFUW52SUdVUlFmaWZIcVFUUmFqY29Gd2dFaWlXWTFFUWozc2p0Q3lkSmkyOVh3c3p5WmVQQUgrS09NczZzblk0eE9NcSt2MDYvZnBHL3ZMNjhBY0FaYkpVaEROUS9yZWRoZ2tHdEtKVjJMUVhxdk5tU1E2ZWdBR1ZROHFmQW1tbzNRRE1Rb0pLVHFhVitFUTJGazNIK0JHVGVSbGtINVVpazBuVkJZaTlRZWVsTHplU2pjblRhek9nOXdwcm4xZVEvdkk3U3VxODF0cEoxd1VpdTdlOTVnVU96THNSSXVNc1I0NVdrejVvODRPcDF5TVpKOHNKaGpEKy9Rb1BLeCtlMHdFRVJEQTVhUGtRUUlod0Z2THh6YWszcWpSY1Nsdm82TWoxMFphOTMrNmYyanFYZ1F0TzZGOGtOdHBScGZvNXZvSUErYlpjaEFsc0hCUDFaaHNQT0xlQWExUDNQQk1hVG9rMkpqNUtTRWNvNHFUamxHc3Z2UHdKNm9TRUdlWWk0QjIxQ2dXUDRjZ0NJc0pWZkx5ZFF5ckNTNUFxc0p1a2F4bERnak5MYkNCMUJMQXdRVUFBQUlDQUJObXRwTzRqYzdQa2NCQUFBakFnQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREV4TG1Oc1lYTnpsVkZMUzBKQkZEN2o2NnBabGowZzJyYklDQ2NwM0NndWtvVENnbFRjai9jZWRlUTZZek56QzM5V3E2QkZQNkFmRloxN2F4VVJkZUM4dm5QbTR6dk0yL3ZMS3dDY3cxNFIwbER4WU51REhRYTVsbFRTdFJta2o2b2pCcG1PRHBCQnVTY1Yza2FMTVpxaEdJZUVWSHJhRitGSUdCbjNYMkRHemFSbFVMcFNDazBuRk5ZaXRiV2UxSHdaQ2pmUlp0SGdBUzQwdHo3djQzMkUxblcxdVl1MEUwNXFaUS9yOVNhRHdrQk9sWENSSWNycm5qWlQvb2pqc3prWFk4bUhxeVgyY1lJR2xZK3RiOE5BRUE4dFdENUZVaUFjQnZ4aTVkRFdHODAyRVJjSE9qSStkbVVzZHY4bkFiVzVlQkIwNzZYeVEyMmxtdDZnbStuQWc5MFNaQ0RMNE9RL3R6QTQrRVU5ZytxZnllQVVVdlJOc1RGeWtrSTVSeFduSENQWjQyZGdUMVNrd0tPWVM4QXU1Q21XUGhlZ0FHdkowMUt5dFE0YlNTN0Rab0p1VVN3bXpnaU5MZjhCVUVzREJCUUFBQWdJQUUyYTJrNHZqTHpnVVFFQUFCb0NBQUFxQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVMmx0Y0d4bFUzUnZjbUZuWlNReExtTnNZWE56alZITFRrSXhFRDFGQkVFVW4yaml6aGlqTHFqdmhSbzJSQk1OdWhCMTRhN2NPMXhLTGkzcExUNCt5NVdKQ3ovQWp6SU9WemU2VUp0TXp6eE96OHlrYis4dnJ3QjJzVmpFQ09ieW1NK2pJcEE3MGtiN21rQjI3WGI5aHFGdVF4SW9ON1NoaTBHdlJlNUt0V0xPekRSc29PSWI1ZlF3L2twbWZVY25BcVZUWThqVlk1VWt4T0ZxUTF2Wmo1VnZXOWZibHlIMXJFd0MyZFM5Zmt4TmI1MkthR1hyVUNEenNDa2diZ1VLVFIwWjVRZU9OYzhhMWtYeW5sbzdYYWxhV2w0OTl1bVMydVRJQkhUMG94Z3FyendURWhrUmo2QThoZkphRzcrOXQzOVk0dzdGcGgyNGdFNTB1c0szQ2FwZGRhZDQwMk1UeERiUkpqb24zN0ZoSGdzbFpERXFzUEtmTFFTV2ZobFhZUGx2RVd3aXcxOHlQSUtOZXpQbTJEdmdmSVl4dDdIMERQSEVYZ2I1WVp6eXFoamp1L0xKUUFIanFVSU9KVXh3UFl2SmxGL0dWSXJUbUVtMVova3VwaWJTbDhEWUIxQkxBd1FVQUFBSUNBQk5tdHBPb1djZnMwWUJBQUFoQWdBQU1RQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERXVZMnhoYzNPVlVVdFBBakVRbnZJR1VSUWZpZkhxUVRSYWlZWUxoSU5FRXMxcUloRHVaWGVBa3FYRnRxdmhaM2t5OGVBUDhFY1paMWRQeGhpZFpGNWZwMSsvU2QvZVgxNEI0QngyU3BDR2FoNDI4N0RGSU5lU1NybzJnL1JCYmNnZzA5RUJNcWg0VXVGdE5CK2hHWWhSU0VqVjA3NEloOExJdVA4Q00yNHFMWVB5bFZKb09xR3dGcWs5OXFUbWkxQzRzVGJ6Qmc5d3JybjFlUS92STdTdXE4MWRwSjF3VWl1N1gyOHlLUGJsUkFrWEdXSzg5clNaOEVjY25jMjRHRWsrV0M2d2gyTTBxSHhzZlRzTUJOSFFnT1VUSkFIQ1ljQXZsZzV0dmRGc0UzR3ByeVBqWTFmR1duZC9ldjlrSmg0RXJYdXAvRkJicVNZMzZLWTZ5TU4yR1RLUVpYRDBqMVVZN1AwaW5rSHR6MXh3Q2luNnBOZ1lPU21obktPS1U0NlI3T0V6c0NjcVVwQ25tRXZBTmhRb2xqOEhvQWdyeWRWeU1yVUthMG11d0hxQ2JsQXNKYzRJamEzd0FWQkxBd1FVQUFBSUNBQk5tdHBPaWRnQ3VDUU9BQUNOTXdBQUtBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVXVZMnhoYzNQTldnbEFITmQ1L2g0c0RLeEdXRUlTRXJKc2JBbkpIRUk3dTdNWE1sYURBUjBKd2k1Z3FUaHQ3V0gyTGF5MTdKTGRBVW1PMnpSdG5UcE83SnhOWStkdzJyVE4zVHFIUVFwMjRpWnQycVQzZmQvM2ZhZXQwenI5LzVuWmcyVlhHZ1Myak1TYmQvNy85My92Zi85Nzg0YXZ2Zmo1THdBSWkzNC82dkMwZ2s4MzRUTituTVJuT2ZrY0o4OXdzcVJndVFscEJaZjh1SXpQSzFoUjhLd2ZXL0djSDAzNGdvSXY4dmpubTVCVDhGTis3TUNYL1BneWZwb3JmNllKaXdxKzRzY2VQTmRNNVovbHlwOVQ4TlV0K0JwKzNvOTkrQVhPL2VJVy9CSittWk5mVWZDckNuN05qd1A0ZFQvMjR6ZWFLZmViblBzdDd2amJXK0RINzNEZDczTHlleXpoOTFud0gyekJIK0tQRlB5eEh3SEc5U2Y0VXdWL3h0ciszSThRL3NLUHY4UmZjZTZ2dWU1dk9QbGJUdjZPazcvbjVCLzgrRWY4RStmK21aTi80ZVJmT2ZrM0JmL2VoUDlROEo5K0RPSHJDdjdManhGODNZOUIvTGVDL3hHNGVjTEs1bVJpMkxDTW9Wa2pNeU1USTRzeVk0M0wvSHcyazVjQzZxbE1SdWFHMGtZK0wvTUNqWGVlR2hzY254Sm9IWDNBV0RRQ2FSb1RtTEJ5cWN6TTdRSmJoMmlRWldTc00wWjZnUWJmY1B5ZXNhSDdKaWJ2R2g4WkhoNmNIQlJvY21wR0pndlpFNXpkWGVveWRISnc3TVRJOEgwalowYkdxS1ZqTkp1YkNaeVgwL29EQVdNNkZVZ1FVT3Zpdk13SGJKeWtzM0VnbFVsWnh3UXVkcTJGVkRaNlBwZTFzbVkySFRqTHhmSVdNM2R4M3NvR2hvZ0hFcGt5MHZuYkhVbHpoalVidURNMWN5cGp5Um1acTFIYmZVYkFONVJOc0wyanFZd2NXNWlibHJsSll6b3RtYWFzYWFUUEdMa1VsOTFLbnpXYklpNDdSMVBad0h6YXNKTFozRncwa0pCejJVRGVERXlrNXViVGt1ZkZtSkZrNEExbU5tUGxETk1hVENSeU1rOERHMnpjQW50cm15ZXd4U3paUS9OOFpYdHBObWFNL04yNWxFbncycXJiNmZRWlRjMmxMQUgvc0p6UFNkT3daRUtnZlh5QjVNekpNNmw4aWd3Y3pHU3lORXNwOG9XaU1IdFNTbU5JV0g0enA2dlVhbDBJRU1yQWtNdlpDYllxdTVoS3VCTzF3MXpiSUhESW13Q0JoNjRWTkVtZHpCbVpQRWtrWGs0YkdhTzJROVYyczFacmpReUJXNitxUm1CeGszRjc1dHVmTDhZWG9ybXJ1NXBTazNvRXhzbjdMVGxrcE5Qc2FNbUZqSzFRWUgvTkFIRGM3VVA5bXlkU014bkRXc2lSOXg3enBHU2dPc25IU0ZoOVhwS0REM1RWbUFhUEZtVGtlVGNJdm40RGtnWnE5cG1UMW13MmtRL2szRWhkUGszajBwU3BlY3V4Wm9hdDJVdHA5VWhQUy9TdXJnMXA2WGJNVzdCUzZjQm9Lczh4ZVN2UFVLSzBpUXg1aUhTZFY5NkpPS0pKcnJCWkpkU3RJNlhTMlpRMU81cWRFZWhaN1prRnIreGMyL2YyMWF2Sk5VYmdqZzF4UWE2NHlGcVlCNEZ0YTVscExvd21DM2FWTlEvbWNzWkZ0MC9iNmoyRHFIVDNqWUVLZVFQZXJXVlh1TGVhdm9GTm1Cb1d2blhDTXN4enA0MTVHNnVDRitpZ3BPQWJBdS9lWE8vYUxMdzM1NnYyT1o3T25uZklIdldDKzNWRXNSVVlzV2FQcDlLV3ZhWUpYVTZ5Q1l2eVFxQWdqWThwU2J1SGdINE5ZZ1hlc1lsb05vdkM4N1V4RGN1a3NaQzI3a3huelhOM0d6bURNSzdlTnJ4MHIwMG03U3BHenVrdUVGaW5XQXJPTXBOd0J6OTdmV3pZckNud3BiTUdIY0RlZjcyT3Z0NU9zRTlkeDFPVE40VHZlZmtQbzk2QVBYRmREbTdlc0RVbTVIdzZlMUhneWFxTGFQTzQydEJKVE9YWHd4VHZwL1pwckZWbVRIcFhTOWh2cXJrRms2d1JlUDRWYTRDWFFHRkhnZzk0TTJFamJyR2hhZmp5S3htZlo1WS9kTzJPc282Z3RTR2l2L0lLaCtpWjZ3OXZ5R05lTHJxLytzcEg2Wmx4djJHYU1wL3YxRFRORGlnZWhsM2xlczc3MFo5ZlVycFhFM2JsdDdlNkN4b25RVTVDQWtmV3A0b09nUU5tMnIwNXJPK3lyeW9tc2dzNVU5TFptYmVKVldZZVllNVYvQy8rVDJELzFWa1JkYm1vRnRlaVdsaUxoUFJ3WEF0R29rRk5DMnFSV0pTNGpXdkpSR1E2NHJRSHFTV285K3R4amY0NytiaE92OEU0NVIwSlVTMmt4WU5CVjRxdXI1WkNFcWdVaVVTMXBDTkJDMGU1UnUvbk5La241Um9zVkYySlJBdnJORFNxNmFiVG9sTXZxUVZOR3FtSGpLQ1JOQlA5d1RCSkNVWmlYRWZhWkRnMkhlUzZTTDlibHdpYk1xcWJYQmVMUkdLUjZaSU9Ha2x5WTlPUnFKMm4ya2l3UHhnUFJVTDBKT3Y2U1NYYnFWRXVxWE9mbU02bzRseXRsekdnUlJPcnNUUFNlSkRsRWd1dW51bTRvNGRxd2s2Yk00SktJZElaY1pqdjF3aUI3dnpHa29hTWhhTjZUQXNGcGE0WlJHRTRGT3ZYdzFvd0dJOGtRMlk0bkRDVDlFNGFqWnV4WUxBL0hqZU51R2JFa3JvWkN5VkRzUmpKTW5TYURhMmt1Wi95U1dtRW9wRm9LR2JRdjVDdVJlSWhMUnBOUnJWRVdBOGEwMGFNeFBTSFpGeFBSSU94ZUV4cWlYNk5LWlQ5WmpRU1pPT2lab2dLWkhNd0tDVmgwV1UwVE53a28yWlVEK3VzU0RPSXZKQ0tDYnpJeVRjcG9XTVBKVUxnbHF2ZG5nbnNxOVdGYng0VVVhZUtldUVUdUhGMU4yNGNsMG1aby9NVXJaZE9EKzh6T21OcTRLUlJZR2UxY0tZS1JUUUpkTmRDTkNNek1zZjN4NEY3VWhrckZJbXlzR1pGK0ZXeFJhaXEyQ3BhdkVFSnEvaFdqTk9LRmpjSTdLaHlMYUxnQlZWc0U5dFpRYXNxZG9pZENyNmhpbDJpVFJXN3hSNkJMcStoU21Cd3crOTZQSzJmVWtXNzJLdUtHL0VKVmV3amE3RW9ibExGeldLUEtqcHd2d3FMRW5HTHVGWEZhL0h0aXRpdmlnTjR6QnNkRVVWMHF1S2dPQ1FRWFBjMWd5cHVFMTNNVTdjaWVsVFJLdzZyb2s4Y1VmRldQTWJBSnptWjVjUzI0NXdpQXFyUVJGQVZJYUZ6RXVZa3drbFU0S1lyYmlnQzI5Y3c1YzNFSUNPTWVldkxhMG5FQlhaVm5XT0JsdFZYVXJSYmxDcE9XZXloL0ZKeGs3eGc5N2VCRjI4RVNtNXhzZXY2Ylo1dnFmWmFlZDIrbmozODBxTHgvTEhpOGMzRHNUbmZleDU1eVFGNTVtWmJSWkRrYjhIOE5aRGQvMkRYYTh0UTNUWDlnRFNyZmhhNHpkT1JrclZGYWhwZWtsZFo1bkg3NVFWcExsaXlkUGlkb0tGcGFmdi91TFFXY3JUaFRkVmVlTVZ2U21YcTdXL2ZYbDhIMm10OTdDRnd1MHFBaDdMcHREVGRUNlROY203ZXV1aEdrcTRxdk8xYlkxWFpWQXFjOUdDUFIvaVp6WXRKM3I0VStmS3BCNlY5QWo5RmhhNVR6Rk5UcWhoRDIxYlJVWWl0TkU2Wk5mSmpGR0R0b2ZmUzBJeGQyRm5vWCs2SjVLa3owckpqcm5hRmo0TTEzaFBxMHp4d0cwazRsVW5RUkNRS0g2QjJFZHBxeXBxb3EzdloxSlJOSjl4c3ZaRkk4SmdxQzRYZzc2bTFoR216a1hiUUxuMlkyRlgxUnBrMHpCbnpBa2U3VnQ4NEY3NmtydktGV3ZmcXJRUjlxUEt2RFZaeld2eGJqL3hMZkhPK1ZpZjd4dDdWN21rNzVZaDlvMGZlMHVqYzdRbm9WM1BqcWhhMTBCUTU0V0l5TzU4eUJZYXJSQ0V2L3VNY2tJcmZiaXFPTklWNUtNTGU3c0JlZFNQWjJiVW12RldEdk0yNWdpMnRZWUhMWFd0aTE4dHh1WG5sTGNwaitIbjJHckZ2L05ad1UrQi9jUk9wWC9mTjBLWlk4S1hObllEclk0U3Y2MTRPRlFjOW5DRzZ6K0JXMU9Fa2dBYnN4V3N3Q29IVFZLcERQZG94VmxadXB2SmRaZVZXS3Q5ZFZ0NU5aWHFucFB4TytQaTFoeVRjUTZVTUZEVFNzNldudGI3M2NGKzdyNzFoR2I1UDIyUE9VTXAvcGdmbzJJb3d6bEx1bU5NYjM0WXB3TTdkYTJ2aEhMM1kyYjFiOEIzNFRwTFB1ZnR3UCtuam5FRzVCa3pibzB6NmJhUlJDWG95R2tsNVJqTk50UTMwVkF0b2x0RlFpU1dHTFlqYldNSk8zeUlXdFloRkxXSlJpMWhVSkRGRDJsamY3SldzYjZ6VU9FRFczN0VPNjFONFlGM1duNnR0dlZLSjVWVmsvZUE2ckM5Z0tWZ3ZrTVljdGJHK2M2N00zaFUwVGJVMjF6OEgveVZzOFQwSGRhcCtCVnVuZXBiUk1rRTF5N2hodEtlM2Rkc1N0ajlkaE5OcUd6WU0vb3ZOZlRpT0F6aGh3MnB6Ukxxd0RxQ0pTTTZTMm5sNzVPc29sMFBlQlpBbHQyVndCMjBBcmFUWno1cDNUUFV1WXlkcnZvUmRwUHgweitFbHRGV3FmZzEya1cvdm9WWFFRWjdQcW05eGhCVVpPY2lYRHFTd2czaGxFSFV1aUFXcVc2ekJ3dTRLRnZZd0MrMVhZV0dDUkV3U0MvZVF2V2M4c25BZUZ4d0E0ZzZDclZEOW96MmZ3ZDdlSmR4NGVnWDdwZzVmeGswQ3k3aDVqSElkZEhMeXRmc3U0eGFCSnpETnVWc0Zuc2Yrb3cwck9EQzFqTTZqamUyTjdRMUxPUGdNRGptNTIrb3ZvNnVPT3Zrdm81czdiM3NHUFc2VGIyMVRiMTk3NHhJT24vM0lONS9zZTlwMlRMYXZoeXdET1ZZenVkUnVjcW9JTGFkanRLQk9rbXViUk81M2syTS9USTc3Q0pVS0MrUVllY0pGUEVpNUNJV2cxK083YkVkOXREZ3RqOUtvTnhBRHpYZ2p2b2QrT1RqbDhiMzRQdUxoKzEzdW5MYUhpMjF2b3JZZm9MYnRxSHNSSFFvZVVmQm1CWSsrUUN2Wm9mUXRKUEN0ZU15ZDAxY1RmSjZBdHA3UG9hLzNNbzdVWVFVQm5rcHRDY0hTOURYYTYyV21iTXJhaWpEYjhEamVWcHl5dDl2eTMxRjAzQVo3NGp0V0VKcnFQZHl6QkgwWjRiRSttc0JMaUN3aGVyYW5id214a3FJVzJ6VVg2TGxJZ2ZpOHJiREhFVkZVMklGMzRsMDJvQTY4bTNKMTFIdTdEYUxlQmZHRHhNdDc4RU51OExxZnZJYVpiVmxCM1ZTUEd6RGlsY1k5VkJZc25IQ0ZZcmdTeFdCZFZ3eFg5Y1Z3NWFzU3Jsai9lNitrdjc5Uy94dXZxcDlEMUhyMFArR0d5MG1xWlFiVmd2NWxISzNVL25BWjAycFJ1MXJVcmhhdGR3Smt2YTNoeWRvYWJxL1U4T2FyYWlqWVY5THdQcnpmZGFRSDNaRGZXWXA5ZmNYWU4zRFUxMXBIYWx2cjIzMlhjRWRKc3hPd0hxTzE4WGdadTUyMlR0ZzV0a3JZT2RaWlorYytZTE83bXphekR4SktuK3RUVDlsNFByUitQTWNxOGJ5VFpMK3JCaDdtd0J1ZUg3YngvQWlWR2MrYjNBMzZVQWtQZTFrUlVJTU5xSThRTlZ6Q3QxUWllaTl0RDArVWJkeUhpb2dPRlJrNlpIdGRuWjB6WFA4N1pHUHowZWdXRzF0aDQzWVFmcmpDSTkrSEg3MFd0SytxUlB0QjB2ZFVEYlFGL3RhUDlzZkswVzVyd28vakk2NTNqOUJvSHE4UXBpV0lTc2Z1TE50VEZYelVEVklLUGthblNHSG5QbzVQMElnbWZCS2Zja1crbXVqZ241NFZERTYxM3RuZ2JxSkRVOFRDOE1TVWJ3VWpuRDN1N0tjblBvdTlmTDRSWlNHeWp6UWVRVGM5Ni9BVE5xS2ZKS25BVWRKM2dFcW5TRU1BenM4ZTk3blZmWTdZYVJPRzNPZCsycVllUXZQL0ExQkxBd1FVQUFBSUNBQk5tdHBPWTFJN2xWRUJBQUFhQWdBQUtnQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtNaTVqYkdGemM0MVJ5eTRFUVJROU5jYjBHTU40azlpSkNCWkt4bU9CMkFnSkdSWUdDN3ZxN2p1dHBMdHFVbDNqOFZsV0Vnc2Y0S1BFbldiREFwWGNPdmR4NnR4N1UyL3ZMNjhBTmpGWHd3Q21Ba3dIbUJHbzdHbWovYjVBZWZsNjVZcmh3TVlrMEdocFEyZTlMQ1Izb2NLVU14TXRHNm4wU2puZGo3K1NaWCtqYzRINnNUSGtEbEtWNThUaFVrdGIyVTJWNzFpWGJjdVlNaXZ6U0xaMTFrMnA3YTFUQ1MwMmR3VktEK3NDNGxwZ3FLMFRvM3pQc2VaSnk3cEUzbE80Y1N0VnFPWEZZNWZPcVVPT1RFUjdQNHF4OHNveklaY0o4UWpLVXl3dnRmSE5yZTNkZmU1UWE5dWVpK2hJRnl0OG0yRHRWdDBwM3ZUUVJLbk50VWxPeWQvWU9NQnNIV1VNQ2l6K1p3dUIrVi9HRlZqNFd3VHJLUEdYOUk5ZzQ5Nk1GZloyT0Y5aXJLek9QME04c1ZkQzBJOEwzaHFxZk05OE1qQ0U0VUtoZ2pwR3VGN0dhTUZ2WUt6QWNVd1UycE44MXdvVHhVdWcrZ0ZRU3dNRUZBQUFDQWdBVFpyYVRpRmN6aUtlQVFBQTNnSUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TkM1amJHRnpjNVZTWFU4VFFSUTlVNVl1cmFzVVVCQlI0d01QTFpBT0JrSk1JSDJ3c1lsSk5hSEZ2cENZVExlM1pjaDJwc3pPU3Z4WlBoZ1NIL3dCL0NqQzNkVUhZNHlCVEdidXg1eHo3ejJadWI3NThSUEFQbDVXTUlmVktnS3NoWGdhWWwyZzdNOTB1cmtyc04zVlZzNFM1Y2ZXVFEva2lLWldwckhzMFVWR3FlOVlkNXhacjd5MkpqMWsycEUyMnJjRW12Vjc4Qm9EZ2FCdFJ5U3cyTldHUG1iVElia1ROVXc0czl5MXNVb0d5dWs4L3AwTTh2RUVvdmZHa0dzbktrMkp3K2JkZTI2KzN1ZHhLMzA5TWNwbmprdTJ1OVpONUNVTjk4NmxHbXA1OG5WR1BScVRJeFBUMFYrWEk4VjFHSkRLVDM3OHB1K2ROcFBERmxlczltM21ZdXJvZk1yMWYzVnVucXN2aW9XK00zRmlVK1o5SUg5bVJ5R2VSZGpBOHdqektFY0k4VUpnNXo1eUJEYitJMENnY2VkaS9Jd1Q4cjNPc1VDOWZ2cTI4WWYybWJQZXhqYVJzWFhFNUtuMTFGWkp3c3JuNm8wQlh2RkhDdmhQaVZvdDE1Rjd2RU1zc0sydzEwS0pGMURkMnY0T3NYV0YwamVPU3FqeVdTNnduL0dBejlWZktFUjRCQlRlZkhFZllMSEExN0JVMkdXc3NBM3dHRS93c01EeElBVUR0MUJMQXdRVUFBQUlDQUJObXRwT2ZZS3ErNlFCQUFEbEFnQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREV6TG1Oc1lYTnpsVkpOYnhNeEVIMU90MWtTRmhvS0xaUUM0dEJEMHFJWTZNZWxWUTVFUkFJRnBLWWxGeVFrWjNlNmRiV3hnOWNMNG1mMVVGWGl3QS9vajZxWVhUZ2doRkFyeTU0Wis4MzRQWHN1THIvL0FMQ0ZKdzNNWWJtSkFQZERQQWl4SWxEM3h6cGZleTZ3TWRSV3pqTGxqNnliN3NpRXBsYm1zUnpSNTRKeVA3QnV2N0JlZVcxTnZzdHBlOXBvM3hQb3RxK1IxeGtMQkgyYmtNRENVQnQ2WDB3bjVBN1ZKT09keGFHTlZUWldUcGZ4NzgyZ3BDY1F2VEdHWEQ5VGVVNGNkcTkrNTlxTFRhYmJPTkNwVWI1d1hQTHQwTHBVZnFYSjVvbFVFeTBQdjgxb1JFZmt5TVMwOTlkaG9yZ09BM0taRWpOUW5oTDVRUnYvY250bnQ4ZUZtd2UyY0RFTmRFbDI1VjhFdWlmcWkySzlyMDJjMlZ5YjlCMzVZNXVFZUJoaEZZOGl6S01lSWNSamdXZlhVU1d3K2g4ZEFwMHJGK1BmVE1tUEJ2c0M3ZmJIVjUwL25tRG1yTGV4eldSc0hYSHkxSHJxcXl4ajVYUHR6aGhQdVo4Q2JpM1JhcFU2U285bmlCdHNHK3oxVU9NQk5OYzN6aURXejFFNzVhaUdKcS8xQ3ZzSk4zbGQvb1ZDaE50QTVjMVg1d0VXS253TGR5cTdpTHRzQTl6REVtNVZPQ1pTWmVBblVFc0RCQlFBQUFnSUFFMmEyazRVT1JSWDJnQUFBTkFCQUFBUkFBQUFVMmx0Y0d4bFUzUnZjbUZuWlM1emIyeHRqOEZPd3pBUVJPLzVpamxTQ1ZWdzRGUnhnaitJeExHU2F5OWhKY2VPN0hWTGhmcnZiQjBTa3NKeGQzWm4zZ3pKZEwxQmpwNGR5eG43aCszVDluSFhORFlHU2NZS1d1NEhUNjFFdlNSOE5VRGhJQmpLd2JORjFqMjVWeU5HZndBNmttcnR2SHo1TUtFamQxZGZPRGo2SklmbzNadnhoZTZ4V2djNjFmV21PbWwrbGxTc1drM2ZMR3o4ZURMRlgzR3dnTUR6Nm02bjh1WHE5bDZDRlk0Qm1XUzBtOVBXVmxXYkFOVnQyZTlQMU9SUmdiVjh6LzkxLzYyN2FIakwxU25YakhKa09pR1JsQlF5Umx5ZDlIWHpRemxxTjNCcWVHbStBVkJMQXdRVUFBQUlDQUJObXRwT3NsOGJkVmNEQUFBWUNBQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl5TG1Oc1lYTnp4VlZwVHhOQkdINm1GQmJLU3VzQjNoZFc3WUVzb3VMUmV0QktCYTBuaHNRUVk2YmJzU3paN3BiZFdSUi9rcDgwRWZGSWpKLzk2djh4dnJNMEFxVXFSaFBUZG1mbW1mZDRubmZlMlg3NTl1RVRnTE80MVlNK0RLdUhFVU1jSXpFTTRiU0cwVjZjd1ZrTjUzcWhZVXpEZVEwWE5GeU1vUk9YWW1TYzA1RFhjRm5ERlFaOWtkdkpwNEZqU3N0MUdBYkxybGN6bm9uS21YbURWeXlqeWlXWFN3M2hHNldtVFk2aFM4NVpmbktFSVZ1MlhLTmhjL25VOWVwalJsWFVYY00zalFkaUlSQytMTG5lL2NBbGYvTHlsVnZlY2l4Sk9lK2wvc0R2OTRUU013elJvbHNWRFBHeTVZZzdRYjBpdkllOFloT3lvK3lhM0o3aG5xWFdUVENxQkpEMktjY1JYdEhtdmk5b09ieDFWc25SVVJJVXBjZzJ3L0ZVZWgxSkdUUnNZbGNURkpwTFVUVWVLdUFjbVd1ZThBTmJVcVpFZVo0dmNpT1FsbTJVTFYvUzVzQkducVN3eVhXa3hUYi8wNElvcDl3VmloV2JlRzZLUmtoVXcxV0dubW1yNW5BWmVCUnVhU3RrODZzNTYxek9HUVdyTnVWSVVSTmViaFcxdVZNenBxVm5PYlZjZTd2WndtWkx4V3NYNVY3YnVGdVpGNmFTL25JenVFNno2VHBtNEhuQ2tVYVJ5cTJLa3Y5UENzTGFUcnVCWjRxU3BjNW1iN3ZlR0ZhZTFJb1RqbW03UG5uZUZuTE9yV3E0cG1NY0JSMDdzVXZIZHV6UTBZK2lqdXVZWURqNlcwVWFTanB1WUpMaHdLOGFRTWNVVGxLcDI4bWl4bXRWeFJDWkxTZ2lOM1VjeENHR29UKzVBeHNDcmg0ZHc4RmZuaDNEempXWEgzM0trTjV5WG9idW1wQnFUY0ZTcWRuQytvWnVlSzUwVFZlbDlnUzUxOGxLcGFhVDYwaXBGMFdNbTZidy9lVHBFWHAvUGZuSEw2TE4xN3B2STBJc2lEdERmMnFxN1ZWUXltYTRIWkN5eDZtZlhZdS9SOUl6T0VML0EzSFFBU0tTU0todUJHaWsxcVEvbGc3NjlXT0FkbmZUckloSWlNUXoyV1d3ek5BeUlwa1ZkTHdtS0lJOTlPd2lRMkFCZStrNVFCaVpZaDhPQU9GTWhXVDBvZTZpTUNyZ1YzU0hWZ3VaTnhUdkRTTHZFQzEvUk9lamJNZDdkRVh3R2RwN2RETWFlN0xSRmlTVzdkeGswOVdDOU5JM3E3VTZya0IvRldwVGxBZUpBaUNoSXlEbGkwamlHY2J3SEpOWXdtTzhRSVB3TlRrTFRUazZCQTVUNWVpNmhpdldSQVpwZG95UUtJMUpIQThMY3lJeFRwSlAwa3hKTnNJU0FKMlp0OWoycW0zbDlGV0RacXExY05GbXdCVFM0WmhCTnR3YndpbnNwMW1NclByQ1d1TTdVRXNEQkJRQUFBZ0lBRTJhMms1b01pR25TQUVBQUNNQ0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNVEl1WTJ4aGMzT1ZVVXRQQWpFUW5zcGpBVmRSZkNUR3F3Y3hoaW9xRndnWElvbG1OUkdRZTlrZG9HUnBzZHZWK0xNOG1YandCL2lqakxPckoyT01Uakt2YjZaZnZrbmYzbDllQWVBVXRrdVFnWW9ER3c1c01zaTNwSksyelNDelh4MHl5SFowZ0F6S25sUjRIYzlIYUFaaUZCSlM4YlF2d3FFd011bS93S3lkeW9pQmU2RVVtazRvb2dpcHJYbFM4MFVvN0ZpYmVZTUhPTmM4OG5rUDcyS01iRmVibTFoYllhVlcwZDV4dmNtZzJKY1RKV3hzaVBMUzAyYkNIM0IwTXVOaUpQbmdjWUU5SEtOQjVXUHIyekFReEVNTEVaOGdLUkFXQTM0cmxhMmZOWnB0SWk3MWRXeDg3TXBFN001UEFtb3pjUy9vM25QbGh6cVNhbktGZHFvREI3WmN5RUtPd2VGL2JtR3crNHQ2QnRVL2s4RVJMTkUzSmNiSVNRcmxQRldjY29Ma0RwNkJQVkd4QkE3RmZBcDJvVURSL1Z5QUlpeW5UOTEwYXdWVzAxeUd0UlJkcDFoS25SR2FXT0VEVUVzREJCUUFBQWdJQUUyYTJrN2tmVjd3UndFQUFDRUNBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWk1amJHRnpjNVZSUzA4Q01SQ2U4bHJBVlJRZmlmSHFRVFJhZzhvRndvVklva0VUQWJsM2R3Y29XVnJzZGpYK0xFOG1IdndCL2lqajdPckpHS09Uek92cjlPczM2ZHY3eXlzQW5NSldHYkpRZFdEZGdRMEdoWlpVMHJZWlpQZHFJd2E1amc2UVFhVW5GVjdIY3cvTlVIZ2hJZFdlOWtVNEVrWW0vUmVZczFNWk1YQXZsRUxUQ1VVVUliV0hQYW41SWhSMnJNMjh3UU9jYXg3NXZJOTNNVWEycTgxTnJLMndVcXRvdDk1a1VCcklpUkkyTnNSNDJkTm13aC9RTzVseDRVaytmRnhnSDhkb1VQblkrbllZQ0tLaGdZaFBrQVFJaXdHL2xjcld6eHJOTmhHWEJ6bzJQblpsb25YN3AvZVBadUplMExybnlnOTFKTlhrQ3UxVUJ3NXN1cENEUElPRGY2ekNZT2NYOFF4cWYrYUNZOGpRSnlYR3lFa0o1UUpWbkhLQzVQZWZnVDFSa1FHSFlpRUYyMUNrNkg0T1FBbVcwcXR1T3JVTUsybXV3R3FLcmxFc3A4NElUYXo0QVZCTEF3UVVBQUFJQ0FCTm10cE94NjhWUTZJQkFBRG5BZ0FBTWdBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFM0xtTnNZWE56bFZKZFR4UXhGRDFkaGgxMkhXVUZSQkUxUFBDd0MyWXJxUGdBMlFjM2trQldFL25ZRjU2Nk01ZWhaTFpkT3gySVA4c0hZK0tEUDhBZlpid3ora0NJTVpDbXZmZTI1OXllMC9UbnIrOC9BTHpDc3dhbXNOaEVnSWNoSG9WWUVxajdNNTJ2dmhCWUgyZ3JKNW55cDlhTnQyUkNZeXZ6V0I3UXA0Snl2MnZkeDhKNjViVTErVGJUZHJUUnZpZlFiZCtDMXhrS0JIMmJrTURzUUJ2NlVJeEg1STdVS09PZHVZR05WVFpVVHBmMTM4MmdsQ2NRN1JsRHJwK3BQQ2N1dXplL2MzWGpEY3R0SE9yVUtGODRicmsvc0M2Vmx6UjZlUzdWU011anp4TTZvRk55WkdMYXVYYVlLTzdEZ0Z5bXhBcVVwMFFlYStNM1gyOXQ5N2h4ODlBV0xxWmRYWXBkK3BlQTdybTZVT3ozbllrem0ydVR2aWQvWnBNUWp5TXM0MG1FYWRRamhIZ3E4UHcycmdTVy8rTkRvSFBqWmdJektmbXlabHE3ZmZLMmMrVVJKczU2Rzl0TXh0WVIwOGVNNnFzc1krOVQ3YzRRSy95akF2NWNvdFVxblpRWnp4QXpIQnVjOVZEakFUVFgxcjlDckgxRDdRdFhOVFI1clZkWWl6dThMdjVCSWNJOW9NcW1xL01Bc3hXK2hmdFZuTU04eHdBTGVJQzdGWTZGVkF6OEJsQkxBd1FVQUFBSUNBQk5tdHBPRXBNYStLSURBQUJxRUFBQUdBQUFBRkpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6TG5OdmJPMVhUVy9iTUF5OTUxY0lQU1Z0bHJTSDdWSmtRTGVoUUE5RjF3NDlEZHRnVzNRbXpMRmNXYzRhRFAzdm95VExrdndScDFpMzAzeHBZMUVVK2ZnZUtSY2lXbThpVXZLTVVTWjM1T3ZwNHZYaTdId3ltU1E4bHlKS0pMbURod3BLZWNuRmJjVmxKQm5QUy9Kck1pSDRMSS9KSy84aGQ1ZTM1SnBUeUZydmo1ZG1BK1RWUmhsOVFrY1Z1cm1EQk5nVzZKeDhnQ1JqdWZwUEhRTWZCZDh5Q3ZUSjdDdWxxUHBqd1ZCSS9jUTdDZVhaRzhMb09Wa3V5WDBKYVpXUmxBdFNDQ2doVDRCc1FiQ1VKWHBuczY5aXVTU3NMQ3VnRi9LOGVZMW5zbnhOcWpoejcxem9wZjVqVnVvZ1lRdm9DRTFzVmxNWDBUdzhaZTU1bnltNGU5SFVTSXpqcWMwc29qZHBDcUtCTTRUUCtQdW5nUG14K1pENXg0djA0WXE2MXhHbGVEcWFWMFdSTVJBOUdHdXZEY3AyQThzcFBBSnROczdERTl6UEI3WDlhcVFtUVVVdE8xL3FyT0dhS3dVcHZHQ2c0dHBOZ1NHeWhPU3h1RWx4QTJKcW5DM0pkVlNVUkg0SHJDbVJYUCtIQm5wMUV4VUZwdGVRY3ZXMlQwOHpsVUE1UXNsbkJhaTM3QTlSZ3pRVXBONC9NemJEZ1NuY2tpZ25QTTkySkFZc1RMeGhVbUtKNGgySlNGenRRQXhFYkd0YUNMWlZlV25iT2w1c2cwWThYRXhuTmkxUFFkcnRpbXpLOVFJRlExdHNUYXM4MFUxcURmS2RNcjB3UnpsWFd3WS9pUUJaQ2V5cWxsMHo3d1N6Wm1QeWZHODRSV1hpNlNwajdYd2E3bnVvbUlDcGk0eXNWc2JOekdudFcrTnlHTldNcnpIUWZ1ajhCTkhXYTNnREdmYjNrSG03aDJ4Z3c4Vk9LZEV0dFh1dlh2QlQxdHo2b1VvdndES2Z3Q01yWmRtQlJaSDhNNk5mRmtoQ3hBWGpyUXV1SGhzV0Z0YlpkZG9kQnVjYkJHM1BST2d2OTh5TEJqekQxUkMvb2Via2tHa1FiZ2pnWUk0NXowYWhZYVduRXEwYmppMS9ES3JUeDFNZnEyQlZUWktlRlFkbkYwVWZQelFJVUd5Qmg4c05CeGEyKzN1aE5PM3c1TVQ1QU13dm1Na0tXb2RxUFg5ZHpscHRxSGdZVVlacGhJZHFRMXYvVlhWMEI2MWJDMGZUNEtBZEY1VHV3VU9TTWczNkVGSDVsZ095OGt6NmhlVVp0TzhWT3MzUXBIWEZzQm0zL1BSZE9Gb2liUmV5TS9jUFZ1M3p0THF2amVtVExlajZoNC83UUJFUEZIK25xQzM1by9mM0F0VFVkSzZqSE85Rk9ERHhFRGxJdHA2aHFSNTNIaG9Zc0R1Q25mdGtYOVFYM2hwKzY3NFY0MzFCYll3SkZ4aEl3WE9xQ21NdlJ6VnZHakI3T2s3d1hkSnVPK2FTMDJrODRVWFZYUmJyYUovZGl3SkdVbk1wYmMrTmZZVDh6NzQvWTkvUlVVaSsrcnZnUmVqSFVqTHRvMkRmMVBNcmRnQjE3ZWVMeS9UcE1QNzZuejU3MlR0QzNLZkpiMUJMQXdRVUFBQUlDQUJObXRwT2xnQUJZYjhRQUFBVExRQUFId0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxUmxjM1F1WTJ4aGMzUEZXb2Q3SE1kMWYwdVVCVTVIbTZJRVNTQmxOZG95U0JHODdRVlVaWXVnZ0tSRTBsUW9LYkcyZ2ljZjd1QzdBeVU2anUwa1RuRjZjeElyMVhJU0pYSnN5MHBDUWxic09EMXhtdE43cjM5RHZpOXhmbTltOStvZURxTDhmUUY1ZTdPemIxNzl6WnMzZS9PRi8vM001NGpJb3Y4cVVZWENFa1VVbHlpaGxGdXJKYnBJMVJJOVErOHFVWTNXWnFsT2pSS3QwN3Y1dHNrUFdrelhacm9Odmx6aXk3UDg0TGtadWx5aTk5RFg4dVc5UE9qclN2UStldjhNZmFCRVgwL2ZNRXZmU0I4czBUZlJOOC9RdDZqMHJTWGFTeCs2anI2TnZuMkd2bU9HdnJORTMwWGZ6WmZ2VWVsN1MzUVg2L1o5OVAwbCtnSDZNTGQrOERyNklmcGh2bnhFcGVlNSswZjQ1a2RWK3JFU0hhUWZWK2tuVlBwSmhhYnZyZGFyN2ZzVm1sallmMTZoeWFPTk9GSG96U3ZWZW5KcVl5MU1tdWVDc0lhZTNTdU5LS2lkRDVwVnZzODZKOXNYcXkyRjlxNVVHNVgxV3RCT0c4MDFweEluYTQxS0s2cWNTMXJ0d3lCYUM2cDFoVzVhZUhMbG1lQlNVS2tGOWRYSzJYYXpXbDg5TEVRR3pWVXd1YUhnc1VJek5SWjdxdkdzUXZQeWVidTZsbFNFTXNlQ2RuSU9keUJUcWhBZ242OEY3WXVWSTlYVjVYbzdXVTJhZURoUkh4eitSS09leEQzRGQxUXh2cHkwTHg2dFZaTjYreDFuVnRqZ0FuV21uazFDOHhtRjlxdzBtcXNWY1ZOWmJ6YmFqYWhScXp6T3R5QzZMbW9tTWRoVWd4cnN1cTJITkdwZVhtODNLa2U3ejBFK2ZXVDUxRU5uTHJBQ3o3V2JRZFErZmdrUEZYcDZvV2RrRUZZcmNkQU8ycGZYazFaRlVCd2VWckRBd1FNOHhNanpRVzBqWWRGVGw3alZyMk8vcEhPNHNuK1hRWnhJdlc0Zm81WkNzN1hHNnJuR2VqV0MrU3JhOEhRQU85dFoxMXhTajRDeVdKQ2ZyYTdXZy9aR0UxcnNyTmJqNUxra2x1b3B0RXVhczlHdTFpb3JWWUdsWGZWR2ZibWY2dnBzMUtOQk0xaEwya216eFZEb0F5dVV5d0NyRGJDOGQydkQ3NGZJMDJPR01PR1pKRTJhc0NvWnk0ODU3anpiRHFKM25ReldoVklxTGFuMFVaVmVVT2xqQ3BYT05qYWFVWEtpeXRyTzhndzZ4T0xMcEpHdTBrK1Y2UUg2YVpWK3Brd3YwcytXNmVmb0paVStYcWFmcDArbzlNa3lmWXBlVnVuVFpYcUZma0dsWHl6VEw5RVZsYTZXYVpOZUxkTm42T1V5dlVhL1hLYlAwdWVZMGErVTZmUE01YlAwcTN6N0NVaS9qTC9Ga3ljWDQxaWxYeXZUcjlOdmxPazM2YmVZdzIrcjlEdGwrbDM2Z2tJSHo1eDQ3RXdTSmRWTFNid1FYbTRuTGQwNXVGR3RINm9nMkhmZ3IyM1l6c0dXUU9CK2xYNnZUTDlQZjZEU0g1YnBqK2kwU2w4czB4L1RueWgwODhWMmUzMnBVdEZkNDVCdUh0SU9HZHFTWjF1MlF2c0taaGNUVng3RzVXelN2RlNORW5ZSmRQclRNdjBaL2JseTY0T081bW1PWm1tMllWcWVwdHVPcm1tNlpydU9wdUZKR3R1aGplY2FudGtXdm5WSEMvamV3SmVwKzdwam1ycnJhemFQaTVNRXZERGVOSGkwNmZNMU5kT2tLNE01bVNCaEtzKzFYVGVDc0d2OEV6SnN6WEpNelVzc3lFazlYYmNFNThoMklkSFU3Y1JNb0tMbzFlRWkwV3RHYVdyRmRpUjZEY2VRdlo3bnVWWm9HTEkzREdSdkdEbVJIVWFTcitrbHNqZldMVDN5VFUvMGdxdnNUVjNUOTZOQWs3MXVScHNHV3FUYnV0VEI4azFRaDEzZmRuM3Vld00rUjErVWVkNTArTCtod2I2TU9rajdxVTFieHNicml3MUxqQ3piWVlud3Z1NXBudVhwSEFVRDFFd3J2azBlQTk2NjVCM0Q5alRoTVdtcU96MzBvSUVQRE50Z0x1alh1ODk4M1lac1cvY3puajd1UEZOdzF1d1FyVnh6WFdkdllhVEc0OEZONi9CZzJXbksydHFhL09lTEQ5TXlYNTIxeWJoWUlwWVliYkpVSjdNQ1hCaGNqS2pNQS8wYU1tZmZ5cm5iV3U0VkgzYjVRR3BQUE1CektCNjY1NDJJaCs2NjI0eUhIYVY5OFhBSzRpSEdkdUtoQjhhSWVGaE9PdTVQU04wV1ZROWZjMmllTzhNOWhiaHdyaGtYaG1GdWdRdERDN2VGQ3dOUHJ4VVhUaGNYWTdCaE9Na1FOb3pBNmNXRzA4V0c0ZGxEMlhRQUdaNXUycUIzb0poQWxZWjdINUxSSS9UZ2UzQnlZVitHSGVGVDRFTzMyZS9zWHc4ZmlVcjJTcisra1ROT1g2OUgzemp1cFM3UTFzaTBOWWEwMVlWdWh1alJ1eEh5UkV0NFJUeHpyRzdXNytBY25IdmxNcVdNSGJkeUdpUHNvOUZZY2g1SHo1THhoc2N0SHRFbnhVU0hLM2xZZmZiNUVwTUNSNXIwUDhmYzBuTDBDUno0bVFXOGh1RzU2UnZTdnQ1WmczL1ExYk5Nd2QwM1dDZjJDK0tETzk4V2Z2Zk51RGNEY1R3N2NUTDk0SFhneWd6MThYRWF3SlNlUjhUcDJMTlZSQkpqZkVSUzZ3MUh4TktkLzhlSWhQN29pS0MyR0lxSTVVUmM2MmhKLzF6Y3hqeTB2T0g0WnR4MHExK3VudzVUQnA2Z0RIcmxEdVpsV0djZ3U0M1VwUUFsOEpESTd4M2ZTWjl6Q3pKMHRDem15cGp4NFV0dWRjWWJjdDdMMmliMXgrRFJrbkpZcjY2Y1hLckYzS0cvSVZZSXJ0WjRKUHVWVjBiYjhoeFlKUEtPWEJYQlNGU1pNRXprSXRZUjNnUm1HQmZRazJlTnhkbVg3NWdNOGViS3hiSU56dlZBQXNhd0pDREV5UHh1KzdHbzJuaE5ZWi9iTHM4QUlZMjFzaTFHSWI0Tk9hc1lUOWtvUjg0UFg4d3VUWk1ZNUpiQnExVUlHMFhsSlo1bWMxQ3UrVHdQbUlmSEs1Y2g0eVZXTk1FdFgvT0d2UWw3bkNKL1pyNlUwb1VmZmN0SEZtQzBNNTgweFVoVGVFelA4YjR0VkpoYm93S3hFNTh1SHhFUkkwTUh1c2VnWTlBYUlTKy9nMFU2ZTBkWXBZc1ZQa2VJSVdLWUk4UWNpUkNlRzJZUFFteUJFRnVUNCswZWhHRDJvQnJYQktiMEFZUTRRZEtIRU1jenQ0RVFIdlZHRVlJWWJvV1FRb3hnWithN1JYN2x6SkFqeGRlTnJKb1NIdVc0aWpaUTQwRmJWNkpHclBpT3RGUlFXSDE1d003bDk5YUkyTzFvWTFCbWJpLzM5R0JLNzJES05ZMHhtQUxvaXF6dnpoRzd6NG9NT2E2ZDlQUE5jMjBrdk1UNEtNSXZlMGhnUU5aRkdtY2R6Mlc1cUFCMW1kV3c1elVrNTZ4ZTlyUnM3WkFjd2RQajJwK2o0NFdlaUIxb2ZhNkdUWk85eTIzNTNMZXpjU2I0R3h4clNIVkU5VzBOZU16aVhPRnpsV2JyTHFqUkV0bVU4NkxvUlkvSk92Sks1Z3ZmSmo3N1hlWlBPUk1FSnJFQ0dZR3N4Zk42VHF4Q1pwNm54UzdGbHpzR3J1ODcxUVFVa3ZzWStGbThNYkJsWlRqRXdkWEc3VmZrdEpKWTdMTVU4enRiQ1F5NTBtZnZKdUMzRE5WNkYrRkNsamwyYzlTN2t5cGNiZnNsYVVYMS9TQUtSMlJxdWNQcjI0MTdnUzY5cGx2eVBwYVkzK2JhMmovTHBaemVLSFUxRi9QSHlOL3ljS3pabXQ0cVkyQm11YkxPa0JpVk5TRlhZaUtLdHNCblFYM0M4OTNYWFJTTnBwYTREbERrYXJvUjZ6cFVSTFlKUW15a3NkZXpUUXMwdWh1bG1wRWttbTBhRWZKSWJNVlJiSm1oNzJwK1QzWGppQlNQWGJKczhUdVdubHF1VUhmckRXUWQzeG0zUDlLSzE3SXhXY2YzL1d2SU9tNWgxdkZFMXNHS21MY2xMakhXN2NrdVRwWmR2SjdzMHNrK3ZwWHJMaXNtcmpmQTN4NlJYM2lud1Y1RDBFQnZaM3R2NkRLVVdRSzVjL3d5WnBiQU5Jc3ppNmQzZUppZW5uUHB6eGQ1cGJDOXJOT3BuWGptdTJJdkliT0xLV3pOczB0bmxnM2tDNHN6d2V2Sk9WbDluZWVXd2VqN0hQMWhKSGRyYXNZRHIrNitNK1JEcm43MTNBWXZ3N3ltWi9jVzRpWHJHTU9MZWFZTCsvaU8vUmpJdkNKM2tmS2RvZ2NJd0Q1RHpFQit5Mlo0bnVoeGVlVnhVenNNZE04M1RRc3dDSk0wQWFRYzB3M3N3TFNzQkQ3RjB1aTREalkrV21BblZoTDVwdVA2aGh1aEJFbVNNSFd4V2tYNEpQakU4dU56cnVlcU04TVJvOTBYNk9YcW56OTliNWhDOGY1MzFCdW0wSXkyOVlhSjY3UnJmY05rajM2LzFNbGU5dUJlbEJFbGtLVDVCUldXS2Q4cmg2SDd1aXNoZlJzNUtVek1jWHU2SElFamQzVkFGZWNsZ1M5VFpodzVIcm1HczRVSnRPVnJodTN4S3d0ZGk0d3NSNGlJMnNQNVlkVDZ0L1U4S0ZyL2hNd00rMElYWGV3aUdMOHlaN2c1MW4yUnp6aXJjT1VtNWtlZXdReFo0N2xwaE9wRnM4TEVjMXpOUWYwYlI1SG1HRTRhV2w2Q1pTTzB6VENLb3pTT2tKdkRXSFBTMkFxeHd2bUJGME5rR0dPKytOMlB3SGUyRXZXalhLNStoVGlQSW04TG5FZWh0aTJjUjZuOTVYL0RqbHBHb2h5enRnL2htdGo3eUxiUjA3WUtmblBDRTErVHU2azh4M3BDdjk1OVgvYk9tbmRMVnRGK3EvdHVTZXdDMlg3czhUcTd1aGlWaVN2dHp0Nk93d3Y4MndYWHp2d2NKVjJtZ2FiTGVvbWZZTStjUDNYbG13dEJrNjlUb2gvck9LL2xkbmQvMkxQakE0MGJaeGhITzdEa0xsMjBQZGt2YlJlendlV3gvTTROY2pNSlFmNDJUcGZyaFloNXpMdlBOTUhDYXp1R0crQ2ZZV284NlRRek5DSXo0TmN1bG1NWkJyL0U4U0luTk8zWU50SWtBaGpzVkV0U096VTFaRi9Ec3RJd2NnTXJ0dUFjRFVrRkRsWklPYWpTUjh2MEYvU1haZm9yK211RmJ1ais4dnRRc3hsYzVwOS9WWHFoVEg5RGY2dlMzNVhwNytrZnl2U1BmUE94TXYwVC9YT1ovb1grVmFHOVcveENYS1ovbzM4djAzOHcvL21Sdjgzemo1di9DWUtSNXlvVTJ0WDlyZjkwK0V3UzlYZkpuLzhWZXN1V3Y5VXI5S2IrSDdjVnVubkVJUXRZdGJCL2l4TVl1L3BQVnl6SEN1MXNYVzYxazdWalNScHMxTUQ2eGo0R2tvclBQd1J0Yml1MHVERDhlSEJFNzZtTm0wYzhVbWkyM1ZpdXQ5b0JXempYSnpYcnh1anJoem9WS3JjYng5Y2IwY1dUMVZxdEtvN0VQQUsxaTQ2VktLU0tzeE9uVTBScDRaSDlvODZlOUlaRWVBTmNHeHVzbGh5QkFEK0tTTFVScnlSWU81eGpycjhid3RiNXJsWm5jMVlHQXk5TzBjeldHdlhWOC9JNFI3bVI5cHB4VTBlL0FSZk1OdEtPNlE4dUZKQnNIWTlCQ093ZGltOXZ0TlRWSkl2ek5ZZ2FaSFpYOXhIUGphQmR5UitlRUxkdGpoRE1lMVEwNFRadm9laHN6SGd1akUvNVRDRy9WMitFY3IzUkRHcVlqYkx4VUJRbHJWYWptYlB0UHpnMFZ5UWZZYnV0Y0lhZk9mSFlXVXpValJha1g4ck91ZXhiMlA5azhUbXJEalhMR1RwczlIRFF1cWhRcVhVeE1QT2tjUGRvWi9ScnZiOVlYdkp1YU5TR2p4N2JhRUJ3dFZIbmN6aDhLT1Q0MGVQTDU0OGZlK2Z4ODhkUG5WTm9UMEdDT3k0Ty95QTgwL0lZa0VMbXVJTk9oYnJkTXVvRWxrSlQ0VWExaGdSMDM4TElZMXJaSVpLKzgxRkRCN21tV3V1MUtnTC85aUovRlI1WG00WnJ4S212d21uNkJISVdac0dwemhtbTNqTkx1L1BaMDN2ZWFWKy9ZMDVzMUNOMjk1bWt2ZEdzSDB0eVQ4YUo5S1JWb09nZzB3SXBOMEtwQW8wbVc5WDNKQ0lMTHVNS0dqWnJlZit3WVZCZWF0QjdORXVoMDBYYWJMRTBEaDFXR3pxR05oSEVNYytFUVJPR2JEeFBkOUlocWhEL1RaRENwNmR3TlhCWHdiZUM3NmtEVjBuNU5Cbzd5TVIxV25UZVNoYXVaVWxBTmpuNG5pV1hQRGxZV1FPeldmUjlhcE4yck55elNSTlhhUElLVFYyaDZVMVNUNzVDTS9kY29WbDhIYnhDcFUyNkRnU2JWRWJYSnUwOHRkZ2hYSm9FeWFLa25KK1VwTGg5MHlhOVdYWnUwaTdaMkgzOUp1M0dveHV1MEkyaWYyN0N5SjdjdEVrM3k5NVg2SlpObWtkNzk1NmxxZGRvNzRYNXFhdDA2eWE5WldsYVdWSjMzN1kwMHpYekVkcU42MjAwU2JmVEhOMEJnKytFUi9iaDJWdnBBWG9ibmFDNzZVbGFvSmdPVUlzTzB2dnc5RVB3M29kQjhSRTQ1MFU0NVNXNDVaTndDcnZxS2VrTzhta0ozNVAwY1RwTTk4SlpjL1E4M1VmM0M2bnZCZWNINGJnSGFKMGVRdDhrT04xRVIrZ29YUHdpemRBeE9nNzN2NFM3RS9RVnBJSzNRZy9qNlF4NEwwTmo2ZnIzWTF3Sk1qYnUyWDM3RmJyajFBSFl2RFM1T0dHd0IrOThucWFVbDEranV5NWNwWDFMVXdjUFhLRzNidExibHFiUnVIdEpuWEJtNW1ibTFWZnA3UXE5UUFjVzUyWW1uemJtMWJtWlYybGhCMzJlOW0vU2dhWForYW41MlZmcG5oMzArQWRubEJlLzlNWFg2Q0JjT1Q5OWxSWmZGc2F4QXcyZ2cyQ3NDa04zd3NSYllOQWVtTFVQQmkzQ0ZCUEdISUVoRjJCS2hIWVZCckNqVWloL0FaK3ZwQldZNVlEdVBqb0pFMkVRbmFMVEFxZ2I5Q2pNVmtUck1iUjJRRXFkemtEYUJHUmRwTFBvbTRTa00zU08zZ0YzTGNKTjU5R2FCcmNqOURoYUtuMFZSdDhCZWtsMW9VTjFvVVAxQktpZUJOVWhtdmdmMnFQU1V5cDk5WmRvTDgycTlEVm9pdjlQaWVzNzVYOG85Tit3VzZHbkJZeUMvd05RU3dNRUZBQUFDQWdBVFpyYVR0M2RzMUZSQVFBQUxBSUFBREVBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVE1TG1Oc1lYTnpsVkhKU2dOQkVIMGRZeEpqM0RVcXVYb3dpazVBRVZ3SVNqQWdSTUZFUE9UV21hbkVEcFB1MkQzajhsbWVCQTkrZ0I4bFZrWlBJcUlOVmErVzE2K3I2TGYzbDFjQXUxakpZd3lMV1N4bFVSVElIQ210b3FwQWVyMWR2bWFvbVlBRVpocEswMFU4NkpDOWtwMlFLL01ONDh2d1dsbzF5citLNmVoR09ZSENtZFprYTZGMGpqamRhaWpqRFVNWmRZMGQ3SGtCRFl6bmZLOUp0ekc1cUc3c1pXd2lHU21qM2RyK29VRHFvU0lnMmdJVExkWFRNb290U3g4M2pPMTU5OVRaNlh1eW83eXJ4eUUxcVV1V3RFOUgzNXFCWkQwbU9POGtDQ3c1ZDFobDNYekx4TmFudWhxTnV2clQ4OXQ5ZVNkNTIxUHRoOFlwM1R1bjZNWUVXU3dYa01hNHdPWS9OaEVvL1RLeVFQblBXcWdneFo4ME9vS05KMkhNY0hUQTlSUmpacVAwRFBIRVVRclpVWjd3NnNpeEwzNHlNSUhKUkNHREFxYTRuOFowd3AvQmJJSnptRSswRjlqbkV4UEpUU0QzQVZCTEF3UVVBQUFJQ0FCTm10cE9FL1NieG1FQkFBQldBZ0FBUndBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVa1UzUnZjbVZrUkdGMFlVTm9ZVzVuWldSRmRtVnVkRkpsYzNCdmJuTmxMbU5zWVhOenBWRzVUZ014RUgwT1IwSUk5OTBnZ1NpQUFoY2dHaEFTQkpDUVZpQVJsTjdaSFRhT3ZIYmtkY0wvOEFkVVNCUjhBQitGbUYzUzBFQkI0VGVIbjJmZWpEOCszOTRCSEdHampqRXNWN0ZheFpyQW1IR3B3RUhrZkNxZnFIUFlrMzN2Z291ZGtiSHpKRE1LWFpmazBsUGVkelluR2JuMFJLRG1UTkpXWmtBQ3ExRlBEWlhNVk9qS0M1M2UyRUFwK1lKajZXbkVtVHpWVm9jemJyZTcxeFlZYjdxRXMzT1J0blE3eURya0gxVEhjR1l4Y3JFeWJlVjFFWStTNDZHcmM0SE5WbUJCeWFVS3F0bFZOcVhrYWtnMjNJK0VDVFJ1ckNYZk5DclBpZm5OU0R2Wk55bzhPcDhkeTRReUovTll0blRXTjFUVVVpbnQvRjZUaDZpMzNNREhkSzFMZVQ4ZUh4UnpOekNGZWhYckF1Zi9iaWN3WDY3UzhKVzg2L1FvRGdMYmY1ZkZGaXI4cCtERDI4SUVlN3h5VkV0YkcxbFJDR1djNWtpV01UQ3gvd3J4d2s0RkRjYkpNdm1NR2NiR053R3pXQ2p2RjB0Y3dqemJva3dGSzVqRDFCZFFTd01FRkFBQUNBZ0FUWnJhVGhDZnpNOVJBUUFBTEFJQUFERUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTBMbU5zWVhOemxWSEpTZ05CRUgwZFl6YWowYWhSeWRXREN6b0Jnd2NUZ2hvVWhDaTQ0TUZiWjZhTUhTYmRzWHZHNWJNOENSNzhBRDlLckl5ZVJFUWJxbDR0cjE5WDBXL3ZMNjhBNmxnc1lBeHpXY3huVVJISU5KVldVVXNndlhLMWVzblFOZ0VKbERwSzAwazg2Sks5a04yUUsrV084V1Y0S2EwYTVWL0ZkSFNqbkVEeFNHdXk3VkE2UjV4dWRKVHhocUdNcm8wZGJIc0JEWXpuZk8rTWJtTnkwYUd4cDdHSlpLU01kc3YxaGtEcW9TWWdyZ1R5NTZxblpSUmJsdDd0R052ejdxbTcxZmRrVjNrWGowTTZvMnV5cEgxcWZtc0drdldZNEx5OUlMRGtYS1BGdW9WekUxdWZEdFZvMUtXZm50L3N5enZKMng1b1B6Uk82ZDR4UlRjbXlHS2hpRFRHQmRiL3NZbEE5WmVSQlZiL3JJVWFVdnhKb3lQWWVCTEdERWM3WEU4eFp0YXF6eEJQSEtXUUhlVUpieDg1OXBWUEJ2S1lTQlF5S0dLUysybE1KZndTcGhPY1FUblJubVZmU0V3a040SGNCMUJMQXdRVUFBQUlDQUJObXRwT2NadEprTklEQUFBN0NRQUFLZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTlM1amJHRnpjNjFWNzNQYlJCQjlGOXRSN2FpdENVa0twYlNsTmFuai9MaVV0SVdTRUhBZHB3MVZISWlOUzRBWlJwR3Vzb0lzR2VtY3BIOE1YNW5oVzJGb1MyR0c2V2YrS0lZOTJjUzBNY1FaYW8xUDB0N3V1N2Q3ZTA5Ly9QbnI3d0N1NGFzMFhzRkNCcU80bHNaVlhNL1FjRVBEdXhta2xDV0Y5ekxJNGVZSTNzZWlocVVSWlBDQmhtVTE4NkVhUHRKUXpCREVMUTBsRFNzYXlnekRzdUZHdVhtR25PRUd2T1daOG40UU5tOXdXelFESGxtODZqWmJucWpLSURRZHNVaitTNjd2eW1XR0svbEJBcWJxRE1sU1lBdUcwNGJyaTBxN3VTM0Ntcm50a1dYVUNDelRxNXVocTk2N3hxUWl4S0N2K2I0SVM1NFpSWUplSndkWUxIZWQrS1hNVnN0N3dIQmVHWVc5WWtxejFEQjlSOWpsWGVITFRSRzFBaitpZGFLOEVZUU8zeFBiQ3p1OEZRWXlzQUtQV3hURW0wSTJBanZpWWRlWkc0R3pPRFVJZy85ZWxPZ2x2TUJobUR2ZTBnd2pRdUhVVGE4dElnMjNxWFRsbnVHZUt4dUdnaTM4QTFidTgxTGd5OUMwWk82d0wwR2VsQTlhd3U3Vm8vUlM4cHZNR3p2bXJzazltdVViMnp2Q2tsUzVReWFHVEhuZkVpM3BVcHlHT3d6cHF1djRwbXlIUk9YN3d3R0tYQ2dvR1hkWDdQUDdiZCtLUS9scTkybnBlQlY5Q2JrdXF5U3FRVHUweEtvYmQvTno0WE1xQldyNnNtOTVRZVQ2em5yTVE4T2Fqbzl4VjhjWXhuVk13TkN4am9xT0RYekNVUHpmdEhTOGhVczZQc1dtaHFxT0dqNWpPTmNyamJudGNwdEMxZDVIdkVhampqcnVNWXpGRlcrYXNzRnZ1YzZhTDRValFoMmZZMHZIRjloaW1EbE9mWFdjeDBXU2xFSE9MRVAyeGQxbXVIREVkbXY0a2lFL2FMY3p2TnBiNHFEdkdDNGR6WStFSk9wYjhGVXYyT3NJbGpHSWtIeExiQ1F2eXdiMWloUmhSMDE2R2Y2TnBoUWlyelR6VExXMnNWbGVXU25XaXFVN3hjcnQ4c3JYNVhxNVVxUFNHUCsyblRFdjFaV21aWW1JUkgyZVpQMjdnV1Q2Q016akt1VXhaQ2pyQ0xubTIySmYySjBwT2tqNXJtSzBwZXR4dzQxVVVxZWV0MUNkS0pCaFBML1dWMTVPMEd5TVI2MmQ3KzhSZUhiWFk4TG8xLzNLeHhkN1haL3h2am5oSW4xT1IwRU5CcGJOcWpOTkgrb0UvU2R3aHF5djBkTXlodWdDTW9YcFIyQ0ZKeGo2a2Q2RzhEcU53K1FET0RnYlI4UmVlQU52QXZHVFFtTjAwVm5xWXYxQTJFbTZyeGQrQnZzSmllbGZrRnovRGFtdEp4aXV6QksrTmp2ekdDY1NUNUVld2pOa25tS0UwVjEvaEpQeFJQTHd4S25aaHdkMHpoSWhZQWM2dnFIRlBiSTE4UTU4M0VVUVV5eDBGaitndUs3RWhxanBLT0l5SmdsbEREZHhCWGtrc2tXaVBVVVdSWHVoVzRKMFlmb1pUajlHOW1IZkN1anhjN29MWDZCL2tpelROTTdFL3JPWWkrOGM4L0hjVlNKM0xxYWRvRjNvL0ZKa3ZVQVlPYXppYmFUL0FsQkxBd1FVQUFBSUNBQk5tdHBPQ0swYVRFY0FBQUJNQUFBQVNnQUFBRTFGVkVFdFNVNUdMMjFoZG1WdUwyTnZiUzVoYldGc2RHOHVjR3hoZEdadmNtMDJMMlJsYlc4dFlYQndMWE50WVhKMExXTnZiblJ5WVdOMEwzQnZiUzV3Y205d1pYSjBhV1Z6RGNuQkRZQWdEQVhRTzd0QTlPS05BUnlqS1dCSUtMOHAxZm5sK3Q1WGJYWE1mS1lqUElaWDc1SVpra2hvT0pJTzhnYVRLNUI1YjhTK3YxUkJKTlc0Wkd0a1RMYzk0UWRRU3dNRUZBQUFDQWdBVFpyYVRoeit6dHlnQVFBQTV3SUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TUM1amJHRnpjNVZTUVU4VU1SVCt1Z3c3N0RyS2lvZ2lhanh3MkFXelJUUmNJSHRnSTRsbU5SSElYamgxWng1RHlXeTd0aDBOUDRzRE1mSGdEL0JIR2QrTUhvd3hCdEswNzczMisxNi9yK24zSDErL0FYaUZweTNNWWFXTkNBOWlQSXl4S3RBTVo5cXZid2xzanJTVnMwS0ZVK3VtT3pLanFaVStsWWYwc1NRZkRxejdVTnFnZ3JiRzd6SnRUeHNkQmdMOTdnMTR2YkZBTkxRWkNTeU90S0gzNVhSQzdsaE5DdDVaR3RsVUZXUGxkRlgvM293cWVRTEpHMlBJRFF2bFBYSFp2LzZkNjl0YkxMZDFwSE9qUXVtNDVkdVJkYm44VEpPWDUxSk50RHkrbU5FaG5aSWprOUxlWDRlWjRqNE04REluVnFBQ1pYTC9JcEIvc2JNNzRNYnRJMXU2bEE1MEpYYjFYd0w2NStxVFlyK3ZUVnBZcjAzK2pzS1p6V0k4U3JDR3h3bm0wVXdRNDRuQTg1dTRFbGo3ancrQjNyV2JDU3prRktxYWFkM3V5WDd2ajBlWU9SdHNhZ3VaV2tkTW56SnFxSXFDdmM5MWUyTTg0eDhWOGVjU25VN2xwTXA0eGxqZzJPSnNnQVlQb0wyeGVRV3g4UVdOUzY0YWFQUGFyTEVXdDNoZCtZVkNnanRBbmMzWDV4RVdhM3dIZCt1NGhIc2NJeXpqUG03WE9CWlNNL0FUVUVzREJCUUFBQWdJQUUyYTJrNldVaXdaVGdRQUFGUUtBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpjdVkyeGhjM090Vmx0ejIwUVUvamF4bzloUlc5TmNXa0lnWEVKd25JdENBZzJRRXNoRkRnYkZJWmU2bEVLTExHOXNCVmx5cEhXYVB2UEdJODlNbjNqaHJUQ2twVEREOUprL3dneDMrQUVNWjJVVDA4U2R4ak94ck5YdStjNStlODdSMmJQNjhaL3ZmZ0R3RXNveG5NT3JjWnpIYXpITVlEWk96VVVGcjhjUmxaSW81dUpJNFkwdXZJbDVCUXRkaUdOUndaSkVkSW1rRlN6THdWdXl5U2g0V3o3ZmtZMmhZQ1ZPNUZrRnF3cmVWYkRHMENGS2RqQTB5VEJxMko1V2NVeXg1Zm5sQzFxQmx6MHRzTFIxdmxQbGdVaDcvbHJWRTZhd1BUZVlwV2tYYmRjV2N3d1R5UmJtamVRWUlvdGVnVE9jTVd5WFo2dmxQUGMzemJ4RGtyT0daNWxPenZSdE9hNExJOUk4QmpYanV0eGZkTXdnNERTY09QNmFRMU16Wkc3VXJGU2Ntd3o5RXVEcjNPTDJMaS9vdTl3VjZ6eW9rQjZ0dFpzMFBMK28zZUQ1NlcydDRudkNzenhIc3p5ZmEyVXVTbDRoMFB5NnNtWjR4ZG1SRnF4NCtMcGtYYnZqRmFWVExhM08wTVVsVDg1MGFEa0ZHeFJCdlNHNGJJdVNJV2xULzZNVmU5cWk1d3JmdE1UUVVWMmlQQ1Z1Vm5paEVaTDBTYms0bkRTMnpWMVRjMHkzcUszbXQ3a2xLSDVIUkF4eGZjL2lsWkJSd1NaRGJNTXV1cWFvK21UTmwwY25TUHQ4VHY3UW9udmFWdFcxd3FsYXV0NjcyRnBRVDhiZE9lbkhobGYxTFo2MlpSWS8zb3hoUWpwREcwRjNMY2NMYkxlNEVscWs0SktLSEM2cjZNY1RLZ2J3bm9vcmVGL0ZWWHpBc0hRU0JxcDRBVWtWSCtLYWd1c3FQZ0taTWRDSWs1bTN0WUpKTkpRTGdiWkpyWW84TElaRUkvd2J3aWVMVlJSQTRCYXVNYlJkWFZCUnhMS0tFcFlaZWtMZHNpbEsyb0pkekxpQ0Y3bXZ3c2EyaW85Qk1SbHI1Y1dvR01Jd3pXbGwyejlnYnkxZEdBWWZrUzhLSElia2NYY01RM2RqaVlQRVpSZzV0cDFVa25hT3ZLZTA0OTJvbFQvak9DVXBaTlYwVWFKa0U5eXYxYVdHay8reHlVS1RsQlc0ZSszUzZxYStyaS9xbVp5K2RGM1A2Vm5hYUlQR3d6SWd0RW1tdEdsWlBBaUdwaWZwdVBpaWxici9DT3BXeTI0TEJTMVI1Q0xqRnZnZUw5UWdxcExKZXVHcEN0dlJERHVRdnAxK1VFS2hvb2tNdmNsTTB5clZTV2pJUjRtZWJLNFJWT25Jc2JrdkQ3YkQrNGJ3Ym1MSWV1NGgyNkwrMWs2bXdLQ0VTU0Y3blhZUVZIbGhub3pwTTVydEtmbGFxM25LMnQ2bVljSFRkT0NmQjlVZ3NFUkMxaFQ2eUdpbmV3QlBrdlFwNnMyaGpTNGduaHJkQjB2ZFJkdFhOR3JESUxVZHBBUDhSQ3hBWDAwTHorQTVJT3hKTmtZWGJjNGFGK3NnN2doaHQxTGZnSDJOOXRGdkVWbjVIdEVyZDlHUkhTZCtaWHpzRGpyYjd5SFdodnVJMzBNWG82ZTZqMU1TT0gwWU9FUC9mU1JDTE5JVWV5ekVvb2V3cy92b0RvR09veXYxak44KzhHOFlNV3AvaG9wZjBJTmZLVXEvWVFxL0k0cy9zSTAvOFFuK3d1ZjRPL1EvVmZQc3dQOWJzb3lTM3lvK3d3akdpTEVIbjJJY0UyaFB6Rk5NTkpMSStFN1g0eHRMamQ1SDd4MzAzVzRhWGpYc3grcjBrM1JIU1BJaXRWT2gvalI5Rzhybnk3Z1FZak40QmM5U3I1OUNmZzYxWDVTa3p4TkhDdXNZUmV4ZlVFc0RCQlFBQUFnSUFFMmEyazZhUzQzSm1RRUFBTjBDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qRXVZMnhoYzNPVlV0Rk9FMEVVUFZPV0xxMnJWRlFRVWNNRER5MllqZ3J4QmRLb2pTUW1sVVFnZmVGcHVuc3BRN1l6ZFdaV3cyZnhRRWg4OEFQOEtNUGQxUWRqaUlGTVp1NjljOCs1YzA0eVAzOTkvd0ZnQzg4Ym1NRmlFeEdXWWp5T3NTeFFEeWZhcjcwVTJCaG9LNmU1Q3NmV1RkN0lqQ1pXK2xUdTA1ZUNmTmkxN25OaGd3cmFHci9OdEIxdGRPZ0pkTnUzNEhXR0FsSGZaaVF3UDlDRzlvckppTnloR3VWOHN6Q3dxY3FIeXVteS9uTVpsZklFa28vR2tPdm55bnZpc252ek45ZGV2Mks1alFNOU5pb1Vqa2UrSFZnM2x0OW90SGtxMVVqTHc3TXA3ZE14T1RJcDdmelR6QlRQWVlDWDc3TE1rZmZiUFI3WFBMQ0ZTMmxYbHhLWHIzdTJlNnErS25iNXdhUzU5ZHFNUDFFNHNWbU1Kd2xXOERUQkxPb0pZandUZUhFYkx3SXIvMUV2MExueE1JRzVNWVd5WmxxN2ZmUys4NWYxcWJQQnBqYVhxWFhFOUFtaitpclAyZnRNdXpQRUt2K2ppTCtVYUxWS0oyWEdPOFljeHdablBkUjRBYzMxalF1STlVdlV6cm1xb2NsbnZjSmEzT0Z6OFRjS0NlNEJWVFpiOVNQTVYvZ1c3bGR4QVE4NFJuaUlSN2hiNFZoSXhjQVZVRXNEQkJRQUFBZ0lBRTJhMms2Nm9rUWVrd0VBQUxRQ0FBQXFBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1EwTG1Oc1lYTnpqVkpMYnhNeEVQNmNiTE5OV0dnb1VCNEZWRlZSU1ZvSkkvcTR0TW9sQWdrVU9EUnQ3czd1ZE92S3NTT3ZBK3JQNnFHcXhLRS9nQjlWZGJMMEFCd2dzand2ZnpQempUVS9iMzVjQTlqQjZ6cXFXR2tnd3RNWXoySThGNmlGVTEyMDNnbTArdHJKaVZIaHhQbnhuc3hvN0dTUnlvRWVUd3dOZ3ZNcXAzM0dIMmlyUTFmZ1RYdWVoTTVRSU9xNWpBU1crdHJTMStsNFJQNUlqUXhIbHZzdVZXYW92Sjc1ZDhGb1JrZ2crV1F0K1o1UlJVSHNic3pSckxYRC9Pb0RuVnNWcHA1TGZlNDduOHZ2Tk5vK2sycWs1ZEg1aEE3cGhEelpsQTcrZXN4VVVJRUJoY3lKTzZ0QW1UeldOcnpmM2R2dmN1SEd3RTE5U2g5MXlmeVB4bS9QMURmRkEzNndxWEdGdHZrWENxY3VpL0Vpd1NwZUpsaEFMVUdNVi96TDg0d2hzUG9QNGdMci95OGlVTTBwOEwrMU83L05PZkV1dU5RWm1UcFA4cEFUQS9XVU1UeGV0ZDBaWW8zWEkrSk5FYzNtalBQTTRodGprWFdkclM0cWZJREc1dFlseE9ZVktoZnNWZEJnV1N1eHg3akhjdVVYQ2drZUFLVzFVTDVIV0NyeFRUd3M5VEllc1k3d0dFOXd2OFF4a1RJRHQxQkxBd1FVQUFBSUNBQk5tdHBPQVRUMXVwY0JBQUM3QWdBQUtnQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtNeTVqYkdGemM0MVNRVTlUUVJEK3RqejZiSDFLUlVBRk1jWTAybUxpR2xBdWtGNHFKSkRLZ1dMdjIvZUd4NUx0YnJOdkMvRm5jU0FtSHZnQi9pamo5TWxCUEdpejJaMlozVzltdm04elAzNSt2d0h3QVM5cW1NTktIUkdleEhnYTQ1bEFOWnpwb3ZsZW9OblRUbzZOQ3FmT2o3WmxSaU1uaTFUMjlXaHNxQitjVnpudE1INVhXeDA2QW05YXN5UzBCd0pSMTJVa3NORFRsbzRtb3lINUV6VTBmTFBZYzZreUErWDFOTDY5akthRUJKSURhOGwzalNvSzR2RDFETTJhVzh5djF0ZTVWV0hpdWRSaHovbGNYdEp3NjF5cW9aWW5YOGQwVEtma3lhYTArOWRqcG9JS0RDaGtUdHhaQmNya0YyM0Q1c2Z0blE0WHJ2ZmR4S2UwcjB2bWR4cS9PMWNYaWdYdTJkUzRRdHY4TTRVemw4VllUYkNHNXdubVVVMFFZNTEvZVJZWkFtdi9JQzd3NnY5Rm1HL0JIbVdmV0JaL1g2djloOXl4ZDhHbHpzaVVFZktZOHdOMWxUR3NjcTdWSHVBbFQwbkVBeU1halNuMXFjYzd4ajIyTmZZNnFQQUM2aHR2cnlFMnZxRnl4VkVGZFQ2ckpYWWY5L2xjK1kxQ2dvZEE2YzJYN3hFV1Nud0RqMHE3aU1kc0l5eGhHUTlLSEJNcE0vQUxVRXNEQkJRQUFBZ0lBRTJhMms2ZDl1dUJMd1FBQUJrS0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNamd1WTJ4aGMzT3RWbTFURzFVVWZpNGtMQWxMRzk2bHJiWldyQ0c4TEZMRUtvanlrbWgwU2VWRmFtMjFibll2eVRMTDNyQjdRK0d6MDMvaWpGK3JJNjIxTTA0LyswLzhFNDduYmlLeGtFN0oyQ1I3WDg0NTk3blBPWHZ1dWZuejc5Ly9BRENEblFRR2NTT0pJWHlRd0N3K1RGSXpwMkUraWJpU3hQRlJFcU5ZNk1MSCtFVERZaGVTV05Ld3JEUXJTcFBWa0ZPVFQxWHptWWE4NmovWDhFV1NjRTBOcXhvS0dtNHlkTWl5RzQ1TU1ZeVpyakFxbmlXM1JiQTdhemg4VnhpaGJhenp2U29QWlU0RWExVWhMZWtLUDV5alpmT3U3OG9GaHNsMEMrdEd0eGhpeThMaERPZE4xK2VGNm02UkI1dFcwU05Kcnlsc3k5dXlBbGZONjhLWW9zZWc1MzJmQjh1ZUZZYWNwcE5uMzNOaytnYlJqVnVWaW5mSThOcDZibTJGMng3dDdXVDN1Uy9YZVZnaEs5cEpwazBSbEl6N3ZIaDl4NmdFUWdwYmVJWXRBbTdzY2xrV1RtZ0VkV1BERktXNTBSWTR2R2hYWXRidWlaSnlxS1c5R2JxNHd0bXlQTnBNd3hwRkw5c1EzSEpsMlZTd21mL0F5Z05qV2ZneXNHdzVjdHFXSUx2bFlZVTdqWUNzdkJvSHI2WE5IV3ZmTWp6TEx4azNpenZjbGhTN1V5S0daUGJBNXBVSVQ4TTZRMkxETGZtV3JBYkU1YWZUQ3hTN2dKTTM3ajQvTUxhcnZoMHROWEwxMFh4cklYMFZ6aTRvTHpaRU5iQjV6bFhaTzl4cy9hUnloUTVBMXJjOUVicCthVFhpbzJGRHh5YSswakdNQ3pvdVlrdkhMWHl0NHphK1lWajYvL1IwWE1NN091N2dyb1p2ZFh5SGV3eVhHakd5aXE3aFdBUkNXUkFhbTlUcStCNUVOTlVJL1lZTWlLK09JbXdkRHU0eXROMVowc0dSMDdHTkhFTi9aTHRyeWJLeDVKYnl2dVFsSHVnb29jd3czc3I3MFBFVzNxWTFyWnp6NTZqV3NvVGg4a3ZTUklQTGtEN3JNV0hvYTJ4eG5LOE1vMmZtU1RVb09QR0NjcDY0WDZ0MjVsbHFVSVJwWkdXWmNrenlvRmFJR2k3K2k2WnFTMW9WM0I2VkVObGxNMS9JcnR6TGJtVUxteFFWODBVdlBtS2s4dGl5YlI2R0l6TlRkRGY4MkVxUmZ3bDBxMVcyaFFxV0tuR1o5eDErd0oyYWlzcGl1bDVycXRMMUROTU5sVy9ubnBkUW9HZ2h3MEE2MzdRd2RaSTJ3cVA4VGplM0NLdDB2N2c4VUxmWXllTkMrajVDS0FqL0JMZDRzTDJYZHhpMFBRb2VWNk5PTnd5cjNGa2tNb05tczZORVdBTk5BNElyZEs4UGdiSUxMSlZTSllUK1JyVFRjeEdYU1BvNmpSYlFSbDhnbVJrN0FzczhSdHZQTkd2REc5UjJrQTFZTnk3VGVMQm1SWWhYZ1dpazBCaDk2VWpXc2Y0aTdCajFEeksvZ3YyQzlySGZFRnQ5aXZqdHgrZ29UQkMrTmpIK0NKM3RUNUJvd3pNa242Q0xVYThmb1ZzcHpwMVVuS2ZmRVZLUkx0WlUxeFBwNGlkMHZVZm9tM2g0N01aVmRKSWJLZWlzQi8yc0Y4T3NEOU9zSHdVMmdCMDJpQi9ZVU9SaXBrYisyTVVIcWpTU2F6b09rY1lZb2ZWakQrT1lRSHRxa2R5ZUpJbHkrM285aEluTTJEUDBQOExBdzZZUjFOVVlpVHE4UVUrTUpGUFV2aHZaVHhPUTZtZndYcVNieGZ0NGswWVhLS3FEcUgzaUpCMGhqRkY4U1hRVC93QlFTd01FRkFBQUNBZ0FUWnJhVG1qQmo1dVFBUUFBbkFJQUFFZ0FBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UlNSbEZFWldOc2FXNWxaRVYyWlc1MFVtVnpjRzl1YzJVdVkyeGhjM09sVWsxckZFRVFmYjFKZGpicmFyNDBKbjRjQkE4bWgvUWh3WXNpdUlrTEM0T1NqZVFpQ0wwemxkbGVlcnBudTN2aTcvSVU4T0FQOEVlSk5aTUZMd3FDbDNwZEg2L3FWZEUvZm43N0R1QUVUL3RZd1Y2Q1J3a2VDNndZVndnY3BjNFg4Z3ROaitleThpNjZ6Qm1aT1UreXBEaHplWkNlUXVWc0lKbTY0cFZBTDlSVlpUUjVnZTEwcnE2Vk5Nb1c4aUo2Ylp2OG1yOWFqSE9CenFlaFFMS29YYVRHN2VrUWFzcmZSb0hkVzFxcDRrd09kVEcya1FyeVRPMisxbGJITnl6dHhjR2x3T3FweTBsZ0k5V1czdGZsbFB4SE5UWFV6SFdaTXBmSzY4WmZCbGZqVEFlQnZjbm8vSXd5dzV6ODNUWFpPRm5LRnhpTXJTVi9hbFFJeEpWbnFYYXlNaXBlT1YrK2xEbVZUb1pNVG1oUlU0Z2o1ODladTRxYXljLy8xcFJGOXk5YzdUTWE2VWJFL3AvWVI4MjZBOXpGdlFSUEJJYi9QMVpnOC9mbFAwem5sUEZaRC82NUw1Nmh3ejhCV0FQZmpTMFl1MGhhN0dHOXhmNFM3MkRRb21nV1lMdkJubXg5NWgvZVFIemxSd2ViYkx0TlVIekdGcjhIdHdYWXhvTTJ2OXZhaDdqUDJPZGNCL3ZZd2ZvdlVFc0RCQlFBQUFnSUFFMmEyazU0cjZLWG5BRUFBT0lDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qVXVZMnhoYzNPVlV0Rk9GREVVUFYyR0hYWWRaVVZCRVRVK0VMTUxabXNFZllGczFJMGtKcXVKUVBhOU8zTlpTbWJicGUxQStDckNBekh4d1Evd280eDNSaDZNTVFiU3RQZmU5dHpUYzVyKytQbnRPNEJOUEcxZ0JrdE5SSGdRNDJHTVpZRjZPTlIrOWFYQStrQmJPYzFWT0xCdThrWm1OTEhTcDNLWGpndnlZY2U2TDRVTkttaHIvQmEzYld1alEwK2cyNzVCWDJjb0VQVnRSZ0x6QTIzb2N6RVprZHRYbzV4M0ZnWTJWZmxRT1YzV1Y1dFJLVThnK1dnTXVYNnV2Q2N1dTllL2MvWFZhNWJiMk5Oam8wTGhtUEx0d0xxeFBLWFJ4cEZVSXkzM3o2YTBTd2ZreUtTMC9kZGhwcGlIQVY2K3l6SkgzbS8xbUs2NVp3dVgwbzR1SlM3LzY5cnVrVHBSN1BLRFNYUHJ0Umwvb25Cb3N4aVBFcXpnY1lKWjFCUEVlQ0x3NGlaZUJGYitvMTZnYzIweUZqZW04TDQ0STNkbFRlQjV1L09ILzZtendhWTJsNmwxeEJ3VEc2aXY4cHdmWUtiZEdlSVpmNmFJLzVWb3RVbzdaY1l6eGh6SEJtYzkxSGdBemJYMVM0aTFyNmhkY0ZWRGs5ZDZoVDNITFY2WGZxT1E0QTVRWmJQVmVZVDVDdC9DM1NvdTRCN0hDUGV4aU5zVmpvVlVIZmdGVUVzREJCUUFBQWdJQUUyYTJrN25mQVpjUmdFQUFDRUNBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTmk1amJHRnpjNVZSUzA4Q01SQ2U4Z1pSRkIrSjhlcEJORnFOaGd1RUEwUVN6V29pRU81bGQ0Q1NwY1cycStGbmVUTHg0QS93UnhsblYwL0dHSjFrWGwrblg3OUozOTVmWGdIZ0FuWktrSVpxSGpienNNVWcxNVJLdWhhRDlFRnR5Q0RUMFFFeXFIaFM0VzAwSDZFWmlGRklTTlhUdmdpSHdzaTQvd0l6YmlvdGcvS1ZVbWc2b2JBV3FUMzJwT2FMVUxpeE52TTZEM0N1dWZWNUQrOGp0SzZyelYya25YQlNLN3RmYnpBbzl1VkVDUmNaWXJ6MnRKbndSeHlkejdnWVNUNVlMckNIWXpTb2ZHeCtPd3dFMGRDQTVSTWtBY0pod050TGgvYXMzbWdSY2FtdkkrTmpWOFphZDM5Ni8yUW1IZ1N0ZTZuOFVGdXBKamZvcGpySXczWVpNcEJsY1BTUFZSanMvU0tlUWUzUFhIQUtLZnFrMkJnNUthR2NvNHBUanBIczRUT3dKeXBTa0tlWVM4QTJGQ2lXUHdlZ0NDdkoxWEl5dFFwclNhN0Flb0p1VUN3bHpnaU5yZkFCVUVzREJCUUFBQWdJQUUyYTJrN0tJeXBtUGdNQUFKTUhBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTVRZdVkyeGhjM085VmV0T0UwRVUvcVlVVnNxS1ZSSHZDb2phQzdJb2lwZFdWQ3JWa25yRmtCaC82SFE3TEV1Mk8zVjNGdlZGZkFJZlFCUHZKc2JmUHBUeHpOTEl4UXFZR05OMForYWJjNzd6blROblo3Ly8rUHdWd0ZsVXVyRWRwL1JqTklWZVdDbmtNV2JnZEEvT1lOekEyUjRZT0dkZ3dzRDVGRHB4SVVXV0Z3MWNNbEF3VUdRd2w3ZzNQQi81dG5LbHp6QlVsWUZqUFJPMThVV0wxMXlyemhWWEw1b2l0TW90bXdKRGwxcHd3K0V4aG56VmxWYlQ0MnBlQm8wSnF5NGEwZ3B0Njc1NEdvbFFsV1Z3TDVMa1QxNmhkaXU2dnFzbUdlNW0vc0p2YzBIWk9ZWmtTZFlGdzQ2cTY0dmJVYU1tZ2dlODVoR3lxeXB0N3MzeHdOWHJGcGpVQ1ZEdUZkOFhRY25qWVNob09icDFWY09uSnlpaEpERjdETWN6MlZVaVZkVDBTSjBqaUpvclViY2VhR0NjekkxQWhKR25LRks2dXNpWHVCVXAxN09xYnFob3MzK3RUc3F3cFhWc25XM3hqd1hSVG9WSjRrcE5QN2RGTXhacTRESkQ5NnpyK0Z4RkFkR0pyWWd0THNkc2NMVmdUYmxPeFZmQ0VVRmhHZlc0NzFpektuQjlwOURlVG12b296Z3I1bmRxaThMV2FiNzhIVnlWbnkxOU93b0M0U3VyUktYVkJTaitCN1Z4eldabEZOaWk3T3FhNzI5MzVxUGFtMXBzMnJjOUdSTGZMYUVXWk4zQXBJa3J1R3BpRjNhYlNHT25pVDVjTXpHRkVzUGdwdW9OWERjeGpUTERvWTBPMXNRTm5LQ3l0a3VCR21wOXJsckRUUk9IY0poaDVHL2FlZzNYOGdreEhON3dpQmgycjdqOGFqMkc3SmJqMHQzZ0NIVy9mSThoazNrMHRicERtNEZVMHBZNmNDREl1U0dWMElIcHlEb3krczFQY2RzV0lWMUhZM1FoUGY3SE44dnY3Mm52V29SVWtIS0dQWmxLMjM3ZlJydHozSXVvU0JjemYrcjlqWkhzSEFibzB1NEY5UjRTNmJSdU1ZQkc2amY2QkhUUXZ3OTdhTGVmWmlVa1ltUkhMdjhPTERmeURvbmNCM1M4SVNpQnZmVHNJa1BnQ2ZiUnM1OHdNc1YrSEFUaW1hWms5S08rSVJwTitJbzh0TlZNN2kzeHZVWGlJNUxWTCtoOG1PLzRoSzRFdnNINGhHMk14dTU4Y2gyU3luZXV0L21BbnRleGFLM2xBSEVETmt6VUtiTEFNT1l4QVFjVldxL29tMm5wTXpHSkl6aEs2Z2JpRldzaGd6UWJJaVJKNHpIaTBKa2VUMStqSEU3UVRPZGd4VGtCbmJuM01GKzNMWVc1Yk5BS3RVS1hiQkdlUkNZZXM4akZlM21Na0h3Z1JWYmI0K0xoSjFCTEF3UVVBQUFJQ0FCTm10cE9tMWZIbUVJQkFBQWFBZ0FBTVFBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRNdVkyeGhjM09WVVV0TEF6RVFudlMxYlYydDFnZUlWdzlXMFFnVkVWcDZLUmFFVmJDdHZhZTcwNXF5VFdxU1ZmeFpuZ1FQL2dCL2xEaTdlaElSSFpqWE56TmZac2piKzhzckFKekFWaFh5VVBkZzNZTU5CcVcyVk5KMUdPVDNHaU1HaGE2T2tFRXRrQXF2a3ZrWXpWQ01ZMExxZ1E1RlBCSkdwdmtYV0hDMzBqTHdMNVJDMDQyRnRVanBZU0ExWDhUQ1RiU1puL0lJNTVyYmtQZnhMa0hyZXRwY0o5b0pKN1d5dTgwV2c4cEFUcFZ3aVNIR2JxRE5sRC9ndURuallpejU4SEdCZlp5Z1FSVmkrMXN4RWtSRERaYmZ1TW5ad0JtcHBxME9NVllIT2pFaDltUzY1UFpQRHgvTnhMMmdPODlWR0d0TGM1Zm9iblhrd2FZUEJTZ3lPUGpIRFF4MmZ0bWFRZVBQWEhBTU9mcWRWQmdwYlVLK1JCRW5ueUxGL1dkZ1R4VGt3Q05ieXNBT2xNbjZudzFRZ2FWczFNKzZsbUVsOHpWWXpkQTFzdFZNR2FHcGxEOEFVRXNEQkJRQUFBZ0lBQW1aMms2RjE4azEwQUlBQUlnSkFBQkRBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2WkdWdGJ5MWhjSEF0YzIxaGNuUXRZMjl1ZEhKaFkzUXZjRzl0TG5odGJKMVdTMi9iTUF5KzUxZG93VTRGTENWTk1SU0Y2MTY2QWgzYWJVQzJZVmRWWmx4bDFtT1NuTFFZOXQ4blM0bnJKTGFiTHJlUUg4bVBMOUhwMVpNbzBRcU01VXBlanFkNE1rWWdtY3E1TEM3SDM3L2RKT2ZqcTJ5VWFxT1d3Qnp5YUdrdng0L082UXRDQkYyQnhGUlQ5Z2hZbVlKOC9YSlB6dkRFZXhtaDdTK1lYRHhaM3BpdDEydThuZ1dEMDhsa1NuN2UzODI5QjBFVExxMmpra0hiM1BJTEc3UjNpbEVYYUw0YUh2VWhubXdlaFVuQVlmOS9uSVZncVZBNWxEOWlKYktnVGNtT2JCUnhoVkdWdnMwenBnU21ncFpPWVYxU3QxQkdmRWpKVmh1eDFEaStvTXg1UVE1Q0pWVHJ4QW92VFppU3puaE5TbHFZYUxUcFJqYXRHYXgyZy9zK2FQQUdZTE9tUkduTTB2UFJ2QVNEcmFvTUEyOStucEp1VmErcG82WUExMm02VVVVYXBNMGppbkxRSUhNL083dmNHdkh6aTNDbmpMNHJlQTBQcytWZTdScGdxejVNR1Rnc1dJTmNOYzJiNFdtcmRBMkE3TE5wU1ZxcFBGUzhiUGxPZFZrVmZqTDNva1hwcnZBZ3M4M294VnB1L1BRa3VwOXNITk1sTlVtMDYwOThKM21mT2o3dFNMNEIrc2xiOEtJeVlaY085UnNhN0pHdm9Gc2JFWGwrWHhPOEJzc00xMDZaekptcTdzNmhvdCtMb0pJdndMcCt5RGJZTlN4b1ZicGJvVXNRSUYxZy85SHZVTjIzSnZJZzZ0Z1ljdzJNTHpnYkRORUo2aytVdko1cFU0emorTzdtbUZ4VEI5bjdQM0hRd2dCang0WDNSb1grbTVJdTlCRnNCNm5VQTlrekppa1ptREwvZW5Tc3puSDdOUFJTQkhCclJ3STJpV3YwcGhVNnc2ZnRwemQ5bHlTSVVTbVZRNVV1RE0wQk9ZWHFFekZERDhCb1pRRnhod3o4cnJnQml6N1JGVVhUS1VxUy8xdy8vMmo4b2dWOHBnSXkzam92dUQ0aTJESmZ3UmFpMjBkODZ2MFdPaTVqTEd1WWJ5eVhaT241a1pRY0l2bzhsVHpuN25rZThEZitHZ3hOZXU1THdQeldQNy9FOHpVSnB2N2xlOUgyZStDU2xWWCs2Z0pzWU5uSkNUbnhoNjFNeVZZeU1OakR2dXVhSEpIckc2ZDdLN0hibTdPNUw2TndSdXZQcW16MEQxQkxBUUlVQXhRQUFBZ0lBRTZhMms0TGw0dGRuQUFBQUJFQkFBQVVBQUFBQUFBQUFBQUFBQUNrZ1FBQUFBQk5SVlJCTFVsT1JpOU5RVTVKUmtWVFZDNU5SbEJMQVFJVUF3b0FBQWdBQUU2YTJrNEFBQUFBQUFBQUFBQUFBQUFKQUFBQUFBQUFBQUFBRUFEdFFjNEFBQUJOUlZSQkxVbE9SaTlRU3dFQ0ZBTUtBQUFJQUFCTm10cE9BQUFBQUFBQUFBQUFBQUFBQXdBQUFBQUFBQUFBQUJBQTdVSDFBQUFBYVc4dlVFc0JBaFFEQ2dBQUNBQUFUWnJhVGdBQUFBQUFBQUFBQUFBQUFBMEFBQUFBQUFBQUFBQVFBTzFCRmdFQUFHbHZMM0JzWVhSbWIzSnROaTlRU3dFQ0ZBTUtBQUFJQUFCTm10cE9BQUFBQUFBQUFBQUFBQUFBRWdBQUFBQUFBQUFBQUJBQTdVRkJBUUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2VUVzQkFoUURDZ0FBQ0FBQVRacmFUZ0FBQUFBQUFBQUFBQUFBQUJVQUFBQUFBQUFBQUFBUUFPMUJjUUVBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxQkxBUUlVQXdvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQVBBQUFBQUFBQUFBQUFFQUR0UWFRQkFBQk5SVlJCTFVsT1JpOXRZWFpsYmk5UVN3RUNGQU1LQUFBSUFBQk9tdHBPQUFBQUFBQUFBQUFBQUFBQUpBQUFBQUFBQUFBQUFCQUE3VUhSQVFBQVRVVlVRUzFKVGtZdmJXRjJaVzR2WTI5dExtRnRZV3gwYnk1d2JHRjBabTl5YlRZdlVFc0JBaFFEQ2dBQUNBQUFUcHJhVGdBQUFBQUFBQUFBQUFBQUFEd0FBQUFBQUFBQUFBQVFBTzFCRXdJQUFFMUZWRUV0U1U1R0wyMWhkbVZ1TDJOdmJTNWhiV0ZzZEc4dWNHeGhkR1p2Y20wMkwyUmxiVzh0WVhCd0xYTnRZWEowTFdOdmJuUnlZV04wTDFCTEFRSVVBeFFBQUFnSUFFMmEyazdZODZmQW9nRUFBT2dDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVzBDQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TkM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNnc0SkR4bXdFQUFPQUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dWOEVBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhPQzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms3RWd1ZmdRZ0VBQUJvQ0FBQXhBQUFBQUFBQUFBQUFBQUNrZ1VvR0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRNExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUbXBzUzZzMEFnQUFHZ1FBQUNRQUFBQUFBQUFBQUFBQUFLU0Iyd2NBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSkdVVk4wWVhSMWN5NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazZEQlBhR293RUFBT01DQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVkVLQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrN1B3cUJOb0FFQUFPVUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dVUU1BQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhPUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms3RmtzNDVvd0VBQU9ZQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1RRT0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU15NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazdZaHZ2UWdRRUFBSUlDQUFCSUFBQUFBQUFBQUFBQUFBQ2tnU2NRQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVJTUmxGU1pXTmxhWFpsWkVWMlpXNTBVbVZ6Y0c5dWMyVXVZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQk5tdHBPb2pMWDUwZ0JBQUFoQWdBQU1RQUFBQUFBQUFBQUFBQUFwSUVPRWdBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTnk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNFVXS2tCRVJ3QUFFbHBBQUF2QUFBQUFBQUFBQUFBQUFDa2dhVVRBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazdLTVBPK0JnUUFBTUFKQUFBeUFBQUFBQUFBQUFBQUFBQ2tnUU13QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5Tmk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNU8xN0xkbFFFQUFMQUNBQUJLQUFBQUFBQUFBQUFBQUFDa2dWazBBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UlJkVzkwWlZKbFkyVnBkbVZrUlhabGJuUlNaWE53YjI1elpTNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazV5TGMzOVJ3RUFBQ01DQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVlkyQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TUM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrN25BdDdZUmdFQUFDRUNBQUF4QUFBQUFBQUFBQUFBQUFDa2dlMDNBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTFMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHVJM096NUhBUUFBSXdJQUFESUFBQUFBQUFBQUFBQUFBS1NCZ2prQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFeExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUaStNdk9CUkFRQUFHZ0lBQUNvQUFBQUFBQUFBQUFBQUFLU0JHVHNBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTVM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNmhaeCt6UmdFQUFDRUNBQUF4QUFBQUFBQUFBQUFBQUFDa2diSThBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG9uWUFyZ2tEZ0FBalRNQUFDZ0FBQUFBQUFBQUFBQUFBS1NCUno0QUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE9ZMUk3bFZFQkFBQWFBZ0FBS2dBQUFBQUFBQUFBQUFBQXBJR3hUQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1F5TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRpRmN6aUtlQVFBQTNnSUFBRElBQUFBQUFBQUFBQUFBQUtTQlNrNEFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTBMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG4yQ3F2dWtBUUFBNVFJQUFESUFBQUFBQUFBQUFBQUFBS1NCT0ZBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFekxtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUaFE1RkZmYUFBQUEwQUVBQUJFQUFBQUFBQUFBQUFBQUFLU0JMRklBQUZOcGJYQnNaVk4wYjNKaFoyVXVjMjlzVUVzQkFoUURGQUFBQ0FnQVRacmFUckpmRzNWWEF3QUFHQWdBQURJQUFBQUFBQUFBQUFBQUFLU0JOVk1BQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl5TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRtZ3lJYWRJQVFBQUl3SUFBRElBQUFBQUFBQUFBQUFBQUtTQjNGWUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERXlMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHVSOVh2QkhBUUFBSVFJQUFERUFBQUFBQUFBQUFBQUFBS1NCZEZnQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRJdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE94NjhWUTZJQkFBRG5BZ0FBTWdBQUFBQUFBQUFBQUFBQXBJRUtXZ0FBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNVGN1WTJ4aGMzTlFTd0VDRkFNVUFBQUlDQUJObXRwT0VwTWErS0lEQUFCcUVBQUFHQUFBQUFBQUFBQUFBQUFBcElIOFd3QUFVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk11YzI5c1VFc0JBaFFERkFBQUNBZ0FUWnJhVHBZQUFXRy9FQUFBRXkwQUFCOEFBQUFBQUFBQUFBQUFBS1NCMUY4QUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMVJsYzNRdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE8zZDJ6VVZFQkFBQXNBZ0FBTVFBQUFBQUFBQUFBQUFBQXBJSFFjQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtPUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms0VDlKdkdZUUVBQUZZQ0FBQkhBQUFBQUFBQUFBQUFBQUNrZ1hCeUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlUYVcxd2JHVlRkRzl5WVdkbEpGTjBiM0psWkVSaGRHRkRhR0Z1WjJWa1JYWmxiblJTWlhOd2IyNXpaUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms0UW44elBVUUVBQUN3Q0FBQXhBQUFBQUFBQUFBQUFBQUNrZ1RaMEFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRMExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUbkdiU1pEU0F3QUFPd2tBQUNvQUFBQUFBQUFBQUFBQUFLU0IxblVBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNElyUnBNUndBQUFFd0FBQUJLQUFBQUFBQUFBQUFBQUFDa2dmQjVBQUJOUlZSQkxVbE9SaTl0WVhabGJpOWpiMjB1WVcxaGJIUnZMbkJzWVhSbWIzSnROaTlrWlcxdkxXRndjQzF6YldGeWRDMWpiMjUwY21GamRDOXdiMjB1Y0hKdmNHVnlkR2xsYzFCTEFRSVVBeFFBQUFnSUFFMmEyazRjL3M3Y29BRUFBT2NDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnWjk2QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TUM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNldVaXdaVGdRQUFGUUtBQUF5QUFBQUFBQUFBQUFBQUFDa2dZOThBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXlOeTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms2YVM0M0ptUUVBQU4wQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1MyQkFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU1TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazY2b2tRZWt3RUFBTFFDQUFBcUFBQUFBQUFBQUFBQUFBQ2tnUmFEQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVRhVzF3YkdWVGRHOXlZV2RsSkRRdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE9BVFQxdXBjQkFBQzdBZ0FBS2dBQUFBQUFBQUFBQUFBQXBJSHhoQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1F6TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRwMzI2NEV2QkFBQUdRb0FBRElBQUFBQUFBQUFBQUFBQUtTQjBJWUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpESTRMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG1qQmo1dVFBUUFBbkFJQUFFZ0FBQUFBQUFBQUFBQUFBS1NCVDRzQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkZKR1VVUmxZMnhwYm1Wa1JYWmxiblJTWlhOd2IyNXpaUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms1NHI2S1huQUVBQU9JQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1VXTkFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU5TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazduZkFaY1JnRUFBQ0VDQUFBeEFBQUFBQUFBQUFBQUFBQ2tnVEdQQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVEyTG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRzb2pLbVkrQXdBQWt3Y0FBRElBQUFBQUFBQUFBQUFBQUtTQnhwQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTJMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHB0WHg1aENBUUFBR2dJQUFERUFBQUFBQUFBQUFBQUFBS1NCVkpRQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRNdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FBSm1kcE9oZGZKTmRBQ0FBQ0lDUUFBUXdBQUFBQUFBQUFBQUFBQXBJSGxsUUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2WkdWdGJ5MWhjSEF0YzIxaGNuUXRZMjl1ZEhKaFkzUXZjRzl0TG5odGJGQkxCUVlBQUFBQU5nQTJBQ2tUQUFBV21RQUFBQUE9XCIsXCJ0YXJnZXRSb290XCI6XCIke0IyQk9YX0RBVEF9XCIsXCJ0YXJnZXRQYXRoXCI6XCIvbGliL2RlbW8tYXBwLXNtYXJ0LWNvbnRyYWN0LTEuMS5qYXJcIixcInByb3BzXCI6e30sXCJkZXBsb3llZFwiOmZhbHNlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJkZW1vLWFwcC1zbWFydC1jb250cmFjdC0xLjEuamFyXCIsXCJhdHRhY2htZW50U2l6ZVwiOjQ0MTE3fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MzE4MjM3NDc2MX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5idW5kbGVkcmVzb3VyY2VzIiwibmFtZSI6IlBPUmV2aWV3IiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUE9SZXZpZXdcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiVGVtcGxhdGUgZmlsZSBmb3IgZW1haWwgbm90aWZpY2F0aW9uIGZyb20gdGhlIHdvcmtmbG93IHNlcnZpY2UgZm9yIFB1cmNoYXNlT3JkZXJcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1NzU1OTg4MjYsXCJyZXZpc2lvbklkXCI6XCJjOGI3ODVjNTgzMWVhNjI4ZDkwNzA1NzA4MjBjMzRkNFwiLFwiaXRlbUJ5dGVzXCI6XCJQQ0ZrYjJOMGVYQmxJR2gwYld3K0NqeG9kRzFzSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUwzaG9kRzFzSWlCNGJXeHVjenAyUFNKMWNtNDZjMk5vWlcxaGN5MXRhV055YjNOdlpuUXRZMjl0T25adGJDSWdlRzFzYm5NNmJ6MGlkWEp1T25OamFHVnRZWE10YldsamNtOXpiMlowTFdOdmJUcHZabVpwWTJVNmIyWm1hV05sSWo0S0NUeG9aV0ZrUGdvSkNUd2hMUzBnVGtGTlJUb2dNU0JEVDB4VlRVNGdMU0JDUVU1RVJVUWdMUzArQ2drSlBDRXRMVnRwWmlCbmRHVWdiWE52SURFMVhUNEtDUWs4ZUcxc1Bnb0pDUWs4YnpwUFptWnBZMlZFYjJOMWJXVnVkRk5sZEhScGJtZHpQZ29KQ1FrOGJ6cEJiR3h2ZDFCT1J5OCtDZ2tKQ1R4dk9sQnBlR1ZzYzFCbGNrbHVZMmcrT1RZOEwyODZVR2w0Wld4elVHVnlTVzVqYUQ0S0NRa0pQQzl2T2s5bVptbGpaVVJ2WTNWdFpXNTBVMlYwZEdsdVozTStDZ2tKUEM5NGJXdytDZ2tKUENGYlpXNWthV1pkTFMwK0Nna0pQRzFsZEdFZ1kyaGhjbk5sZEQwaVZWUkdMVGdpUGdvSkNUeHRaWFJoSUdoMGRIQXRaWEYxYVhZOUlsZ3RWVUV0UTI5dGNHRjBhV0pzWlNJZ1kyOXVkR1Z1ZEQwaVNVVTlaV1JuWlNJK0Nna0pQRzFsZEdFZ2JtRnRaVDBpZG1sbGQzQnZjblFpSUdOdmJuUmxiblE5SW5kcFpIUm9QV1JsZG1salpTMTNhV1IwYUN3Z2FXNXBkR2xoYkMxelkyRnNaVDB4SWo0S0NRazhkR2wwYkdVK1NXNWpiMjFwYm1jZ1VIVnlZMmhoYzJVZ1QzSmtaWElnZEc4Z1VtVjJhV1YzUEM5MGFYUnNaVDRLQ1FrS0NRazhjM1I1YkdVZ2RIbHdaVDBpZEdWNGRDOWpjM01pUGdvSkNRa0pjSHNLQ1FrSkNRbHRZWEpuYVc0Nk1UQndlQ0F3T3dvSkNRa0pDWEJoWkdScGJtYzZNRHNLQ1FrSkNYMEtDUWtKQ1hSaFlteGxld29KQ1FrSkNXSnZjbVJsY2kxamIyeHNZWEJ6WlRwamIyeHNZWEJ6WlRzS0NRa0pDWDBLQ1FrSkNXZ3hMR2d5TEdnekxHZzBMR2cxTEdnMmV3b0pDUWtKQ1dScGMzQnNZWGs2WW14dlkyczdDZ2tKQ1FrSmJXRnlaMmx1T2pBN0Nna0pDUWtKY0dGa1pHbHVaem93T3dvSkNRa0pmUW9KQ1FrSmFXMW5MR0VnYVcxbmV3b0pDUWtKQ1dKdmNtUmxjam93T3dvSkNRa0pDV2hsYVdkb2REcGhkWFJ2T3dvSkNRa0pDVzkxZEd4cGJtVTZibTl1WlRzS0NRa0pDUWwwWlhoMExXUmxZMjl5WVhScGIyNDZibTl1WlRzS0NRa0pDWDBLQ1FrSkNXSnZaSGtzSTJKdlpIbFVZV0pzWlN3alltOWtlVU5sYkd4N0Nna0pDUWtKYUdWcFoyaDBPakV3TUNVN0Nna0pDUWtKYldGeVoybHVPakE3Q2drSkNRa0pjR0ZrWkdsdVp6b3dPd29KQ1FrSkNYZHBaSFJvT2pFd01DVTdDZ2tKQ1FsOUNna0pDUWtqYjNWMGJHOXZheUJoZXdvSkNRa0pDWEJoWkdScGJtYzZNRHNLQ1FrSkNYMEtDUWtKQ1dsdFozc0tDUWtKQ1FrdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPbUpwWTNWaWFXTTdDZ2tKQ1FsOUNna0pDUWwwWVdKc1pYc0tDUWtKQ1FsdGMyOHRkR0ZpYkdVdGJITndZV05sT2pCd2REc0tDUWtKQ1FsdGMyOHRkR0ZpYkdVdGNuTndZV05sT2pCd2REc0tDUWtKQ1gwS0NRa0pDUzVTWldGa1RYTm5RbTlrZVhzS0NRa0pDUWwzYVdSMGFEb3hNREFsT3dvSkNRa0pmUW9KQ1FrSkxrVjRkR1Z5Ym1Gc1EyeGhjM043Q2drSkNRa0pkMmxrZEdnNk1UQXdKVHNLQ1FrSkNYMEtDUWtKQ1hBc1lTeHNhU3gwWkN4aWJHOWphM0YxYjNSbGV3b0pDUWtKQ1cxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9tVjRZV04wYkhrN0Nna0pDUWw5Q2drSkNRbGhXMmh5WldaZVBYUmxiRjBzWVZ0b2NtVm1YajF6YlhOZGV3b0pDUWtKQ1dOdmJHOXlPbWx1YUdWeWFYUTdDZ2tKQ1FrSlkzVnljMjl5T21SbFptRjFiSFE3Q2drSkNRa0pkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9tNXZibVU3Q2drSkNRbDlDZ2tKQ1Fsd0xHRXNiR2tzZEdRc1ltOWtlU3gwWVdKc1pTeGliRzlqYTNGMWIzUmxld29KQ1FrSkNTMXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPakV3TUNVN0Nna0pDUWtKTFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPakV3TUNVN0Nna0pDUWw5Q2drSkNRa3VSWGgwWlhKdVlXeERiR0Z6Y3l3dVJYaDBaWEp1WVd4RGJHRnpjeUJ3TEM1RmVIUmxjbTVoYkVOc1lYTnpJSFJrTEM1RmVIUmxjbTVoYkVOc1lYTnpJR1JwZGl3dVJYaDBaWEp1WVd4RGJHRnpjeUJ6Y0dGdUxDNUZlSFJsY201aGJFTnNZWE56SUdadmJuUjdDZ2tKQ1FrSmJHbHVaUzFvWldsbmFIUTZNVEF3SlRzS0NRa0pDWDBLQ1FrSkNXRmJlQzFoY0hCc1pTMWtZWFJoTFdSbGRHVmpkRzl5YzExN0Nna0pDUWtKWTI5c2IzSTZhVzVvWlhKcGRDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYUmxlSFF0WkdWamIzSmhkR2x2YmpwdWIyNWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pabTl1ZEMxemFYcGxPbWx1YUdWeWFYUWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNRbG1iMjUwTFdaaGJXbHNlVHBwYm1obGNtbDBJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pabTl1ZEMxM1pXbG5hSFE2YVc1b1pYSnBkQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDV3hwYm1VdGFHVnBaMmgwT21sdWFHVnlhWFFnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNTNTBaVzF3YkdGMFpVTnZiblJoYVc1bGNuc0tDUWtKQ1FsdFlYZ3RkMmxrZEdnNk5qQXdjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNXRXViV051UW5WMGRHOXVld29KQ1FrSkNXUnBjM0JzWVhrNllteHZZMnM3Q2drSkNRbDlDZ2tKQ1FrdWJXTnVTVzFoWjJWN0Nna0pDUWtKZG1WeWRHbGpZV3d0WVd4cFoyNDZZbTkwZEc5dE93b0pDUWtKZlFvSkNRa0pMbTFqYmxSbGVIUkRiMjUwWlc1MGV3b0pDUWtKQ1hkdmNtUXRZbkpsWVdzNlluSmxZV3N0ZDI5eVpEc0tDUWtKQ1gwS0NRa0pDUzV0WTI1VVpYaDBRMjl1ZEdWdWRDQnBiV2Q3Q2drSkNRa0phR1ZwWjJoME9tRjFkRzhnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNTNXRZMjVFYVhacFpHVnlRbXh2WTJ0N0Nna0pDUWtKZEdGaWJHVXRiR0Y1YjNWME9tWnBlR1ZrSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQkNZV05yWjNKdmRXNWtJRk4wZVd4bENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUdGdVpDQjBiM0FnWW05eVpHVnlJR1p2Y2lCNWIzVnlJR1Z0WVdsc0xpQlpiM1VnYldGNUlIZGhiblFnZEc4Z1kyaHZiM05sSUdOdmJHOXljeUIwYUdGMElHMWhkR05vSUhsdmRYSWdZMjl0Y0dGdWVTZHpJR0p5WVc1a2FXNW5MZ29KQ1FrcUx3b0pDUWtKWW05a2VTd2pZbTlrZVZSaFlteGxld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpWVdOclozSnZkVzVrTFdOdmJHOXlPaU5tTW1ZeVpqSTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUdGblpRb0pDUWxBYzJWamRHbHZiaUJDWVdOclozSnZkVzVrSUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0IwYjNBZ1ltOXlaR1Z5SUdadmNpQjViM1Z5SUdWdFlXbHNMaUJaYjNVZ2JXRjVJSGRoYm5RZ2RHOGdZMmh2YjNObElHTnZiRzl5Y3lCMGFHRjBJRzFoZEdOb0lIbHZkWElnWTI5dGNHRnVlU2R6SUdKeVlXNWthVzVuTGdvSkNRa3FMd29KQ1FrSkkySnZaSGxEWld4c2V3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdGRHOXdPakE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1VHRm5aUW9KQ1FsQWMyVmpkR2x2YmlCSVpXRmthVzVuSURFS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlHRnNiQ0JtYVhKemRDMXNaWFpsYkNCb1pXRmthVzVuY3lCcGJpQjViM1Z5SUdWdFlXbHNjeTRnVkdobGMyVWdjMmh2ZFd4a0lHSmxJSFJvWlNCc1lYSm5aWE4wSUc5bUlIbHZkWElnYUdWaFpHbHVaM011Q2drSkNVQnpkSGxzWlNCb1pXRmthVzVuSURFS0NRa0pLaThLQ1FrSkNXZ3hld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pOakEyTURZd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFdaaGJXbHNlVHBCY21saGJDd2dKMGhsYkhabGRHbGpZU0JPWlhWbEp5d2dTR1ZzZG1WMGFXTmhMQ0J6WVc1ekxYTmxjbWxtT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk16QndlRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMXpkSGxzWlRwdWIzSnRZV3c3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRkMlZwWjJoME9tSnZiR1E3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRXlOU1U3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4bGRIUmxjaTF6Y0dGamFXNW5PaTB4Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzUmxlSFF0WVd4cFoyNDZiR1ZtZERzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQlFZV2RsQ2drSkNVQnpaV04wYVc5dUlFaGxZV1JwYm1jZ01nb0pDUWxBZEdsd0lGTmxkQ0IwYUdVZ2MzUjViR2x1WnlCbWIzSWdZV3hzSUhObFkyOXVaQzFzWlhabGJDQm9aV0ZrYVc1bmN5QnBiaUI1YjNWeUlHVnRZV2xzY3k0S0NRa0pRSE4wZVd4bElHaGxZV1JwYm1jZ01nb0pDUWtxTHdvSkNRa0phREo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTURZd05qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2tobGJIWmxkR2xqWVRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qSTBjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjM1I1YkdVNmJtOXliV0ZzT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcGliMnhrT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c1pYUjBaWEl0YzNCaFkybHVaem90TVhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklETUtDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJR0ZzYkNCMGFHbHlaQzFzWlhabGJDQm9aV0ZrYVc1bmN5QnBiaUI1YjNWeUlHVnRZV2xzY3k0S0NRa0pRSE4wZVd4bElHaGxZV1JwYm1jZ013b0pDUWtxTHdvSkNRa0phRE43Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTURZd05qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2tobGJIWmxkR2xqWVRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qRTRjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjM1I1YkdVNmJtOXliV0ZzT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcGliMnhrT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c1pYUjBaWEl0YzNCaFkybHVaem90TVhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklEUUtDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJR0ZzYkNCbWIzVnlkR2d0YkdWMlpXd2dhR1ZoWkdsdVozTWdhVzRnZVc5MWNpQmxiV0ZwYkhNdUlGUm9aWE5sSUhOb2IzVnNaQ0JpWlNCMGFHVWdjMjFoYkd4bGMzUWdiMllnZVc5MWNpQm9aV0ZrYVc1bmN5NEtDUWtKUUhOMGVXeGxJR2hsWVdScGJtY2dOQW9KQ1FrcUx3b0pDUWtKYURSN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNMk1EWXdOakE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRabUZ0YVd4NU9raGxiSFpsZEdsallUc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakUyY0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzNSNWJHVTZibTl5YldGc093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhkbGFXZG9kRHBpYjJ4a093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TWpVbE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNaWFIwWlhJdGMzQmhZMmx1WnpvdE1YQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTkwWlhoMExXRnNhV2R1T214bFpuUTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUhKbGFHVmhaR1Z5Q2drSkNVQnpaV04wYVc5dUlGQnlaV2hsWVdSbGNpQlRkSGxzWlFvSkNRbEFkR2x3SUZObGRDQjBhR1VnWW1GamEyZHliM1Z1WkNCamIyeHZjaUJoYm1RZ1ltOXlaR1Z5Y3lCbWIzSWdlVzkxY2lCbGJXRnBiQ2R6SUhCeVpXaGxZV1JsY2lCaGNtVmhMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsVUhKbGFHVmhaR1Z5ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5aVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lObVptWm1abVk3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKdmNtUmxjaTEwYjNBNk1Ec0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZbTl5WkdWeUxXSnZkSFJ2YlRvd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXdZV1JrYVc1bkxYUnZjRG95Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdFltOTBkRzl0T2pKd2VEc0tDUWtKQ1gwS0NRa0pMeW9LQ1FrSlFIUmhZaUJRY21Wb1pXRmtaWElLQ1FrSlFITmxZM1JwYjI0Z1VISmxhR1ZoWkdWeUlGUmxlSFFLQ1FrSlFIUnBjQ0JUWlhRZ2RHaGxJSE4wZVd4cGJtY2dabTl5SUhsdmRYSWdaVzFoYVd3bmN5QndjbVZvWldGa1pYSWdkR1Y0ZEM0Z1EyaHZiM05sSUdFZ2MybDZaU0JoYm1RZ1kyOXNiM0lnZEdoaGRDQnBjeUJsWVhONUlIUnZJSEpsWVdRdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVlFjbVZvWldGa1pYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MExDTjBaVzF3YkdGMFpWQnlaV2hsWVdSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NIc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZMjlzYjNJNkl6WTFOalUyTlRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzFtWVcxcGJIazZWR0ZvYjIxaExDQldaWEprWVc1aExDQlRaV2R2WlN3Z2MyRnVjeTF6WlhKcFpqc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakV3Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzUmxlSFF0WVd4cFoyNDZiR1ZtZERzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQlFjbVZvWldGa1pYSUtDUWtKUUhObFkzUnBiMjRnVUhKbGFHVmhaR1Z5SUV4cGJtc0tDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJSGx2ZFhJZ1pXMWhhV3duY3lCd2NtVm9aV0ZrWlhJZ2JHbHVhM011SUVOb2IyOXpaU0JoSUdOdmJHOXlJSFJvWVhRZ2FHVnNjSE1nZEdobGJTQnpkR0Z1WkNCdmRYUWdabkp2YlNCNWIzVnlJSFJsZUhRdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVlFjbVZvWldGa1pYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MElHRXNJM1JsYlhCc1lYUmxVSEpsYUdWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndJR0Y3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTlRZMU5qVTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGQyVnBaMmgwT201dmNtMWhiRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292ZEdWNGRDMWtaV052Y21GMGFXOXVPblZ1WkdWeWJHbHVaVHNLQ1FrSkNYMEtDUWtKTHlvS0NRa0pRSFJoWWlCSVpXRmtaWElLQ1FrSlFITmxZM1JwYjI0Z1NHVmhaR1Z5SUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0JpYjNKa1pYSnpJR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdhR1ZoWkdWeUlHRnlaV0V1Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWSVpXRmtaWEo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKaFkydG5jbTkxYm1RdFkyOXNiM0k2STJZeVpqSm1NanNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WW05eVpHVnlMWFJ2Y0Rvd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdFltOTBkRzl0T2pBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdGRHOXdPakl3Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdFltOTBkRzl0T2pJd2NIZzdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnU0dWaFpHVnlDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUmxjaUJVWlhoMENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nYUdWaFpHVnlJSFJsZUhRdUlFTm9iMjl6WlNCaElITnBlbVVnWVc1a0lHTnZiRzl5SUhSb1lYUWdhWE1nWldGemVTQjBieUJ5WldGa0xnb0pDUWtxTHdvSkNRa0pJM1JsYlhCc1lYUmxTR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZEN3amRHVnRjR3hoZEdWSVpXRmtaWElnTG0xamJsUmxlSFJEYjI1MFpXNTBJSEI3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU16TXpNek16TTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2xSaGFHOXRZU3dnVm1WeVpHRnVZU3dnVTJWbmIyVXNJSE5oYm5NdGMyVnlhV1k3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5uQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTkwWlhoMExXRnNhV2R1T214bFpuUTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnU0dWaFpHVnlDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUmxjaUJNYVc1ckNna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nYUdWaFpHVnlJR3hwYm10ekxpQkRhRzl2YzJVZ1lTQmpiMnh2Y2lCMGFHRjBJR2hsYkhCeklIUm9aVzBnYzNSaGJtUWdiM1YwSUdaeWIyMGdlVzkxY2lCMFpYaDBMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsU0dWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQmhMQ04wWlcxd2JHRjBaVWhsWVdSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NDQmhld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pPRGxpWXpVMU93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhkbGFXZG9kRHB1YjNKdFlXdzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM1JsZUhRdFpHVmpiM0poZEdsdmJqcDFibVJsY214cGJtVTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnUW05a2VRb0pDUWxBYzJWamRHbHZiaUJDYjJSNUlGTjBlV3hsQ2drSkNVQjBhWEFnVTJWMElIUm9aU0JpWVdOclozSnZkVzVrSUdOdmJHOXlJR0Z1WkNCaWIzSmtaWEp6SUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWW05a2VTQmhjbVZoTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFFtOWtlWHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WW1GamEyZHliM1Z1WkMxamIyeHZjam9qUmtaR1JrWkdPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpYjNKa1pYSXRkRzl3T2pBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwySnZjbVJsY2kxaWIzUjBiMjA2TURzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmNHRmtaR2x1WnkxMGIzQTZPWEI0T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5d1lXUmthVzVuTFdKdmRIUnZiVG94TW5CNE93b0pDUWtKZlFvSkNRa3ZLZ29KQ1FsQWRHRmlJRUp2WkhrS0NRa0pRSE5sWTNScGIyNGdRbTlrZVNCVVpYaDBDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQnpkSGxzYVc1bklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ1ltOWtlU0IwWlhoMExpQkRhRzl2YzJVZ1lTQnphWHBsSUdGdVpDQmpiMnh2Y2lCMGFHRjBJR2x6SUdWaGMza2dkRzhnY21WaFpDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwTENOMFpXMXdiR0YwWlVKdlpIa2dMbTFqYmxSbGVIUkRiMjUwWlc1MElIQjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTXpNek16TXpNN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0Wm1GdGFXeDVPbFJoYUc5dFlTd2dWbVZ5WkdGdVlTd2dVMlZuYjJVc0lITmhibk10YzJWeWFXWTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94TkhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TlRBbE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdRbTlrZVFvSkNRbEFjMlZqZEdsdmJpQkNiMlI1SUV4cGJtc0tDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJSGx2ZFhJZ1pXMWhhV3duY3lCaWIyUjVJR3hwYm10ekxpQkRhRzl2YzJVZ1lTQmpiMnh2Y2lCMGFHRjBJR2hsYkhCeklIUm9aVzBnYzNSaGJtUWdiM1YwSUdaeWIyMGdlVzkxY2lCMFpYaDBMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsUW05a2VTQXViV051VkdWNGRFTnZiblJsYm5RZ1lTd2pkR1Z0Y0d4aGRHVkNiMlI1SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0J3SUdGN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNNE9XSmpOVFU3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRkMlZwWjJoME9tNXZjbTFoYkRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmRHVjRkQzFrWldOdmNtRjBhVzl1T25WdVpHVnliR2x1WlRzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQkdiMjkwWlhJS0NRa0pRSE5sWTNScGIyNGdSbTl2ZEdWeUlGTjBlV3hsQ2drSkNVQjBhWEFnVTJWMElIUm9aU0JpWVdOclozSnZkVzVrSUdOdmJHOXlJR0Z1WkNCaWIzSmtaWEp6SUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWm05dmRHVnlJR0Z5WldFdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVkdiMjkwWlhKN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwySmhZMnRuY205MWJtUXRZMjlzYjNJNkkyWXlaakptTWpzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlltOXlaR1Z5TFhSdmNEb3dPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpYjNKa1pYSXRZbTkwZEc5dE9qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM0JoWkdScGJtY3RkRzl3T2psd2VEc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZjR0ZrWkdsdVp5MWliM1IwYjIwNk9YQjRPd29KQ1FrSmZRb0pDUWt2S2dvSkNRbEFkR0ZpSUVadmIzUmxjZ29KQ1FsQWMyVmpkR2x2YmlCR2IyOTBaWElnVkdWNGRBb0pDUWxBZEdsd0lGTmxkQ0IwYUdVZ2MzUjViR2x1WnlCbWIzSWdlVzkxY2lCbGJXRnBiQ2R6SUdadmIzUmxjaUIwWlhoMExpQkRhRzl2YzJVZ1lTQnphWHBsSUdGdVpDQmpiMnh2Y2lCMGFHRjBJR2x6SUdWaGMza2dkRzhnY21WaFpDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVVp2YjNSbGNpQXViV051VkdWNGRFTnZiblJsYm5Rc0kzUmxiWEJzWVhSbFJtOXZkR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0J3ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5amIyeHZjam9qTmpVMk5UWTFPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExXWmhiV2xzZVRwVVlXaHZiV0VzSUZabGNtUmhibUVzSUZObFoyOWxMQ0J6WVc1ekxYTmxjbWxtT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk1USndlRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292YkdsdVpTMW9aV2xuYUhRNk1UVXdKVHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292ZEdWNGRDMWhiR2xuYmpwalpXNTBaWEk3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1JtOXZkR1Z5Q2drSkNVQnpaV04wYVc5dUlFWnZiM1JsY2lCTWFXNXJDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQnpkSGxzYVc1bklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ1ptOXZkR1Z5SUd4cGJtdHpMaUJEYUc5dmMyVWdZU0JqYjJ4dmNpQjBhR0YwSUdobGJIQnpJSFJvWlcwZ2MzUmhibVFnYjNWMElHWnliMjBnZVc5MWNpQjBaWGgwTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFJtOXZkR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0JoTENOMFpXMXdiR0YwWlVadmIzUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUWdjQ0JoZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5amIyeHZjam9qTmpVMk5UWTFPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYZGxhV2RvZERwdWIzSnRZV3c3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNSbGVIUXRaR1ZqYjNKaGRHbHZianAxYm1SbGNteHBibVU3Q2drSkNRbDlDZ2tKQ1VCdFpXUnBZU0J2Ym14NUlITmpjbVZsYmlCaGJtUWdLRzFwYmkxM2FXUjBhRG8zTmpod2VDbDdDZ2tKQ1FrdWRHVnRjR3hoZEdWRGIyNTBZV2x1WlhKN0Nna0pDUWtKZDJsa2RHZzZOakF3Y0hnZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1dKdlpIa3NkR0ZpYkdVc2RHUXNjQ3hoTEd4cExHSnNiMk5yY1hWdmRHVjdDZ2tKQ1FrSkxYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT201dmJtVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNXSnZaSGw3Q2drSkNRa0pkMmxrZEdnNk1UQXdKU0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDVzFwYmkxM2FXUjBhRG94TURBbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FralltOWtlVU5sYkd4N0Nna0pDUWtKY0dGa1pHbHVaeTEwYjNBNk1UQndlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pmUW9KQ1FsOUNVQnRaV1JwWVNCdmJteDVJSE5qY21WbGJpQmhibVFnS0cxaGVDMTNhV1IwYURvZ05EZ3djSGdwZXdvSkNRa0pMbTFqYmtsdFlXZGxld29KQ1FrSkNYZHBaSFJvT2pFd01DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNTNXRZMjVEWVhKMFEyOXVkR0ZwYm1WeUxDNXRZMjVEWVhCMGFXOXVWRzl3UTI5dWRHVnVkQ3d1YldOdVVtVmpRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051UTJGd2RHbHZia0p2ZEhSdmJVTnZiblJsYm5Rc0xtMWpibFJsZUhSRGIyNTBaVzUwUTI5dWRHRnBibVZ5TEM1dFkyNUNiM2hsWkZSbGVIUkRiMjUwWlc1MFEyOXVkR0ZwYm1WeUxDNXRZMjVKYldGblpVZHliM1Z3UTI5dWRHVnVkRU52Ym5SaGFXNWxjaXd1YldOdVEyRndkR2x2Ymt4bFpuUlVaWGgwUTI5dWRHVnVkRU52Ym5SaGFXNWxjaXd1YldOdVEyRndkR2x2YmxKcFoyaDBWR1Y0ZEVOdmJuUmxiblJEYjI1MFlXbHVaWElzTG0xamJrTmhjSFJwYjI1TVpXWjBTVzFoWjJWRGIyNTBaVzUwUTI5dWRHRnBibVZ5TEM1dFkyNURZWEIwYVc5dVVtbG5hSFJKYldGblpVTnZiblJsYm5SRGIyNTBZV2x1WlhJc0xtMWpia2x0WVdkbFEyRnlaRXhsWm5SVVpYaDBRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051U1cxaFoyVkRZWEprVW1sbmFIUlVaWGgwUTI5dWRHVnVkRU52Ym5SaGFXNWxjbnNLQ1FrSkNRbHRZWGd0ZDJsa2RHZzZNVEF3SlNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hkcFpIUm9PakV3TUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1M1dFkyNUNiM2hsWkZSbGVIUkRiMjUwWlc1MFEyOXVkR0ZwYm1WeWV3b0pDUWtKQ1cxcGJpMTNhV1IwYURveE1EQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNRa3ViV051U1cxaFoyVkhjbTkxY0VOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp6bzVjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pDUzV0WTI1RFlYQjBhVzl1VEdWbWRFTnZiblJsYm5SUGRYUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNMbTFqYmtOaGNIUnBiMjVTYVdkb2RFTnZiblJsYm5SUGRYUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUjdDZ2tKQ1FrSmNHRmtaR2x1WnkxMGIzQTZPWEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUWt1YldOdVNXMWhaMlZEWVhKa1ZHOXdTVzFoWjJWRGIyNTBaVzUwTEM1dFkyNURZWEIwYVc5dVFteHZZMnRKYm01bGNpQXViV051UTJGd2RHbHZibFJ2Y0VOdmJuUmxiblE2YkdGemRDMWphR2xzWkNBdWJXTnVWR1Y0ZEVOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp5MTBiM0E2TVRod2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSmZRb0pDUWw5Q1VCdFpXUnBZU0J2Ym14NUlITmpjbVZsYmlCaGJtUWdLRzFoZUMxM2FXUjBhRG9nTkRnd2NIZ3Bld29KQ1FrSkxtMWpia2x0WVdkbFEyRnlaRUp2ZEhSdmJVbHRZV2RsUTI5dWRHVnVkSHNLQ1FrSkNRbHdZV1JrYVc1bkxXSnZkSFJ2YlRvNWNIZ2dJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNTNXRZMjVKYldGblpVZHliM1Z3UW14dlkydEpibTVsY25zS0NRa0pDUWx3WVdSa2FXNW5MWFJ2Y0Rvd0lDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSmNHRmtaR2x1WnkxaWIzUjBiMjA2TUNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSkNRbDlDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMWhlQzEzYVdSMGFEb2dORGd3Y0hncGV3b0pDUWtKTG0xamJrbHRZV2RsUjNKdmRYQkNiRzlqYTA5MWRHVnlld29KQ1FrSkNYQmhaR1JwYm1jdGRHOXdPamx3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hCaFpHUnBibWN0WW05MGRHOXRPamx3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSkNRbDlDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMWhlQzEzYVdSMGFEb2dORGd3Y0hncGV3b0pDUWtKTG0xamJsUmxlSFJEYjI1MFpXNTBMQzV0WTI1Q2IzaGxaRlJsZUhSRGIyNTBaVzUwUTI5c2RXMXVld29KQ1FrSkNYQmhaR1JwYm1jdGNtbG5hSFE2TVRod2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYQmhaR1JwYm1jdGJHVm1kRG94T0hCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FrdWJXTnVTVzFoWjJWRFlYSmtUR1ZtZEVsdFlXZGxRMjl1ZEdWdWRDd3ViV051U1cxaFoyVkRZWEprVW1sbmFIUkpiV0ZuWlVOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp5MXlhV2RvZERveE9IQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pjR0ZrWkdsdVp5MWliM1IwYjIwNk1DQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYQmhaR1JwYm1jdGJHVm1kRG94T0hCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FrdWJXTndjbVYyYVdWM0xXbHRZV2RsTFhWd2JHOWhaR1Z5ZXdvSkNRa0pDV1JwYzNCc1lYazZibTl1WlNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hkcFpIUm9PakV3TUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUnBibWNnTVFvSkNRbEFkR2x3SUUxaGEyVWdkR2hsSUdacGNuTjBMV3hsZG1Wc0lHaGxZV1JwYm1keklHeGhjbWRsY2lCcGJpQnphWHBsSUdadmNpQmlaWFIwWlhJZ2NtVmhaR0ZpYVd4cGRIa2diMjRnYzIxaGJHd2djMk55WldWdWN5NEtDUWtKS2k4S0NRa0pDV2d4ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk1UaHdlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUzhxQ2drSkNVQjBZV0lnVFc5aWFXeGxJRk4wZVd4bGN3b0pDUWxBYzJWamRHbHZiaUJJWldGa2FXNW5JRElLQ1FrSlFIUnBjQ0JOWVd0bElIUm9aU0J6WldOdmJtUXRiR1YyWld3Z2FHVmhaR2x1WjNNZ2JHRnlaMlZ5SUdsdUlITnBlbVVnWm05eUlHSmxkSFJsY2lCeVpXRmtZV0pwYkdsMGVTQnZiaUJ6YldGc2JDQnpZM0psWlc1ekxnb0pDUWtxTHdvSkNRa0phREo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5uQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRXlOU1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pMeW9LQ1FrSlFIUmhZaUJOYjJKcGJHVWdVM1I1YkdWekNna0pDVUJ6WldOMGFXOXVJRWhsWVdScGJtY2dNd29KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJSFJvYVhKa0xXeGxkbVZzSUdobFlXUnBibWR6SUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNXZ3pld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRad2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE1qVWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklEUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQm1iM1Z5ZEdndGJHVjJaV3dnYUdWaFpHbHVaM01nYkdGeVoyVnlJR2x1SUhOcGVtVWdabTl5SUdKbGRIUmxjaUJ5WldGa1lXSnBiR2wwZVNCdmJpQnpiV0ZzYkNCelkzSmxaVzV6TGdvSkNRa3FMd29KQ1FrSmFEUjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94Tm5CNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFMU1DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkx5b0tDUWtKUUhSaFlpQk5iMkpwYkdVZ1UzUjViR1Z6Q2drSkNVQnpaV04wYVc5dUlFSnZlR1ZrSUZSbGVIUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQmliM2hsWkNCMFpYaDBJR3hoY21kbGNpQnBiaUJ6YVhwbElHWnZjaUJpWlhSMFpYSWdjbVZoWkdGaWFXeHBkSGtnYjI0Z2MyMWhiR3dnYzJOeVpXVnVjeTRnVjJVZ2NtVmpiMjF0Wlc1a0lHRWdabTl1ZENCemFYcGxJRzltSUdGMElHeGxZWE4wSURFMmNIZ3VDZ2tKQ1NvdkNna0pDUWt1YldOdVFtOTRaV1JVWlhoMFEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFzTG0xamJrSnZlR1ZrVkdWNGRFTnZiblJsYm5SRGIyNTBZV2x1WlhJZ0xtMWpibFJsZUhSRGIyNTBaVzUwSUhCN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzJsNlpUb3hOSEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUZCeVpXaGxZV1JsY2lCV2FYTnBZbWxzYVhSNUNna0pDVUIwYVhBZ1UyVjBJSFJvWlNCMmFYTnBZbWxzYVhSNUlHOW1JSFJvWlNCbGJXRnBiQ2R6SUhCeVpXaGxZV1JsY2lCdmJpQnpiV0ZzYkNCelkzSmxaVzV6TGlCWmIzVWdZMkZ1SUdocFpHVWdhWFFnZEc4Z2MyRjJaU0J6Y0dGalpTNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVkJ5WldobFlXUmxjbnNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WkdsemNHeGhlVHB1YjI1bElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1M4cUNna0pDVUIwWVdJZ1RXOWlhV3hsSUZOMGVXeGxjd29KQ1FsQWMyVmpkR2x2YmlCUWNtVm9aV0ZrWlhJZ1ZHVjRkQW9KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJSEJ5WldobFlXUmxjaUIwWlhoMElHeGhjbWRsY2lCcGJpQnphWHBsSUdadmNpQmlaWFIwWlhJZ2NtVmhaR0ZpYVd4cGRIa2diMjRnYzIxaGJHd2djMk55WldWdWN5NEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVkJ5WldobFlXUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNJM1JsYlhCc1lYUmxVSEpsYUdWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRKd2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQklaV0ZrWlhJZ1ZHVjRkQW9KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJR2hsWVdSbGNpQjBaWGgwSUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpVaGxZV1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFzSTNSbGJYQnNZWFJsU0dWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRad2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQkNiMlI1SUZSbGVIUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQmliMlI1SUhSbGVIUWdiR0Z5WjJWeUlHbHVJSE5wZW1VZ1ptOXlJR0psZEhSbGNpQnlaV0ZrWVdKcGJHbDBlU0J2YmlCemJXRnNiQ0J6WTNKbFpXNXpMaUJYWlNCeVpXTnZiVzFsYm1RZ1lTQm1iMjUwSUhOcGVtVWdiMllnWVhRZ2JHVmhjM1FnTVRad2VDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwTENOMFpXMXdiR0YwWlVKdlpIa2dMbTFqYmxSbGVIUkRiMjUwWlc1MElIQjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94TkhCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFMU1DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkx5b0tDUWtKUUhSaFlpQk5iMkpwYkdVZ1UzUjViR1Z6Q2drSkNVQnpaV04wYVc5dUlFWnZiM1JsY2lCVVpYaDBDZ2tKQ1VCMGFYQWdUV0ZyWlNCMGFHVWdabTl2ZEdWeUlHTnZiblJsYm5RZ2RHVjRkQ0JzWVhKblpYSWdhVzRnYzJsNlpTQm1iM0lnWW1WMGRHVnlJSEpsWVdSaFltbHNhWFI1SUc5dUlITnRZV3hzSUhOamNtVmxibk11Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWR2IyOTBaWElnTG0xamJsUmxlSFJEYjI1MFpXNTBMQ04wWlcxd2JHRjBaVVp2YjNSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NIc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakV6Y0hnZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZiR2x1WlMxb1pXbG5hSFE2TVRVd0pTQWhhVzF3YjNKMFlXNTBPd29KQ1FrSmZRb0pmVHd2YzNSNWJHVStQQzlvWldGa1Bnb0pQR0p2WkhrZ2MzUjViR1U5SW1obGFXZG9kRG9nTVRBd0pUdHRZWEpuYVc0NklEQTdjR0ZrWkdsdVp6b2dNRHQzYVdSMGFEb2dNVEF3SlRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMll5WmpKbU1qc2lQZ29KQ1R4alpXNTBaWEkrQ2drSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQm9aV2xuYUhROUlqRXdNQ1VpSUhkcFpIUm9QU0l4TURBbElpQnBaRDBpWW05a2VWUmhZbXhsSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0b1pXbG5hSFE2SURFd01DVTdiV0Z5WjJsdU9pQXdPM0JoWkdScGJtYzZJREE3ZDJsa2RHZzZJREV3TUNVN1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ0kyWXlaakptTWpzaVBnb0pDUWs4ZEhJK0Nna0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlHbGtQU0ppYjJSNVEyVnNiQ0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdG9aV2xuYUhRNklERXdNQ1U3YldGeVoybHVPaUF3TzNCaFpHUnBibWM2SURBN2QybGtkR2c2SURFd01DVTdZbTl5WkdWeUxYUnZjRG9nTURzaVBnb0pDUWtKQ1R3aExTMGdRa1ZIU1U0Z1ZFVk5VRXhCVkVVZ0x5OGdMUzArQ2drSkNRa0pQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQnBaRDBpZEdWdGNHeGhkR1ZRY21Wb1pXRmtaWElpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMlptWm1abVpqdGliM0prWlhJdGRHOXdPaUF3TzJKdmNtUmxjaTFpYjNSMGIyMDZJREE3Y0dGa1pHbHVaeTEwYjNBNklESndlRHR3WVdSa2FXNW5MV0p2ZEhSdmJUb2dNbkI0T3lJK0Nna0pDUWtKQ1FrSlBDRXRMVnRwWmlCbmRHVWdiWE52SURsZFBnb0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpWTJWdWRHVnlJaUJpYjNKa1pYSTlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnWTJ4aGMzTTlJblJsYlhCc1lYUmxRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHR0WVhndGQybGtkR2c2SURZd01IQjRJQ0ZwYlhCdmNuUmhiblE3SWo0S0NRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaWNISmxhR1ZoWkdWeVEyOXVkR0ZwYm1WeUlpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK1BIUmhZbXhsSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJsUmxlSFJDYkc5amF5SWdjM1I1YkdVOUltMXBiaTEzYVdSMGFEb2dNVEF3SlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1SUdOc1lYTnpQU0p0WTI1VVpYaDBRbXh2WTJ0UGRYUmxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnWTJ4aGMzTTlJbTFqYmxSbGVIUkNiRzlqYTBsdWJtVnlJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp5MTBiM0E2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJUzB0VzJsbUlHMXpiMTArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJSE4wZVd4bFBTSjNhV1IwYURveE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGliR1ZtZENJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhOMGVXeGxQU0p0WVhndGQybGtkR2c2SURFd01DVTdiV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJsUmxlSFJEYjI1MFpXNTBRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVOdmJuUmxiblFpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ01EdHdZV1JrYVc1bkxYSnBaMmgwT2lBeE9IQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQTVjSGc3Y0dGa1pHbHVaeTFzWldaME9pQXhPSEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHQzYjNKa0xXSnlaV0ZyT2lCaWNtVmhheTEzYjNKa08yTnZiRzl5T2lBak5qVTJOVFkxTzJadmJuUXRabUZ0YVd4NU9pQlVZV2h2YldFc0lGWmxjbVJoYm1Fc0lGTmxaMjlsTENCellXNXpMWE5sY21sbU8yWnZiblF0YzJsNlpUb2dNVEJ3ZUR0c2FXNWxMV2hsYVdkb2REb2dNVFV3SlR0MFpYaDBMV0ZzYVdkdU9pQnNaV1owT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pXVzkxY2lCb1lYWmxJR0VnYm1WM0lHbHVZbTkxYm1RZ1VIVnlZMmhoYzJVZ1QzSmtaWElnZEc4Z2NtVjJhV1YzTGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFZ0cFppQnRjMjlkUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNEtDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWs4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnWjNSbElHMXpieUE1WFQ0S0NRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJblJ2Y0NJZ2FXUTlJblJsYlhCc1lYUmxTR1ZoWkdWeUlpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsTzJKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObU1tWXlaakk3WW05eVpHVnlMWFJ2Y0RvZ01EdGliM0prWlhJdFltOTBkRzl0T2lBd08zQmhaR1JwYm1jdGRHOXdPaUF5TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBeU1IQjRPeUkrQ2drSkNRa0pDUWtKUENFdExWdHBaaUJuZEdVZ2JYTnZJRGxkUGdvSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQmliM0prWlhJOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ2QybGtkR2c5SWpZd01DSWdjM1I1YkdVOUluZHBaSFJvT2pZd01IQjRPeUkrQ2drSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJblJ2Y0NJZ2QybGtkR2c5SWpZd01DSWdjM1I1YkdVOUluZHBaSFJvT2pZd01IQjRPeUkrQ2drSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSmpaVzUwWlhJaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUluUmxiWEJzWVhSbFEyOXVkR0ZwYm1WeUlpQnpkSGxzWlQwaVltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdHRZWGd0ZDJsa2RHZzZJRFl3TUhCNElDRnBiWEJ2Y25SaGJuUTdJajRLQ1FrSkNRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJSFpoYkdsbmJqMGlkRzl3SWlCamJHRnpjejBpYUdWaFpHVnlRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUltMWpia2x0WVdkbFFteHZZMnNpSUhOMGVXeGxQU0p0YVc0dGQybGtkR2c2SURFd01DVTdZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VTQmpiR0Z6Y3owaWJXTnVTVzFoWjJWQ2JHOWphMDkxZEdWeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ01IQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJR05zWVhOelBTSnRZMjVKYldGblpVSnNiMk5yU1c1dVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaWJHVm1kQ0lnZDJsa2RHZzlJakV3TUNVaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCamJHRnpjejBpYldOdVNXMWhaMlZEYjI1MFpXNTBRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JqYkdGemN6MGliV051U1cxaFoyVkRiMjUwWlc1MElpQjJZV3hwWjI0OUluUnZjQ0lnYzNSNWJHVTlJbkJoWkdScGJtY3RjbWxuYUhRNklEQndlRHR3WVdSa2FXNW5MV3hsWm5RNklEQndlRHR3WVdSa2FXNW5MWFJ2Y0RvZ01EdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ01EdDBaWGgwTFdGc2FXZHVPaUJqWlc1MFpYSTdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQR2x0WnlCaGJHbG5iajBpWTJWdWRHVnlJaUJoYkhROUlpSWdjM0pqUFNKb2RIUndjem92TDNCdmNuUmhiQzV3YkdGMFptOXliVFl1YVc4dmMzUmhkR2xqTDJ4dloybHVYM0JoWjJVdmNHeGhkR1p2Y20wMkwyeHZaMjh1Y0c1bklpQjNhV1IwYUQwaU1qWXdJaUJ6ZEhsc1pUMGliV0Y0TFhkcFpIUm9PaUF5TmpCd2VEdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ01EdGthWE53YkdGNU9pQnBibXhwYm1VZ0lXbHRjRzl5ZEdGdWREdDJaWEowYVdOaGJDMWhiR2xuYmpvZ1ltOTBkRzl0TzJKdmNtUmxjam9nTUR0b1pXbG5hSFE2SUdGMWRHODdiM1YwYkdsdVpUb2dibTl1WlR0MFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUc1dmJtVTdMVzF6TFdsdWRHVnljRzlzWVhScGIyNHRiVzlrWlRvZ1ltbGpkV0pwWXpzaUlHTnNZWE56UFNKdFkyNUpiV0ZuWlNJK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0S0NRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdGaWJHVStQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRazhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdaM1JsSUcxemJ5QTVYVDRLQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSlBDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQjJZV3hwWjI0OUluUnZjQ0lnYVdROUluUmxiWEJzWVhSbFFtOWtlU0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdGlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpSa1pHUmtaR08ySnZjbVJsY2kxMGIzQTZJREE3WW05eVpHVnlMV0p2ZEhSdmJUb2dNRHR3WVdSa2FXNW5MWFJ2Y0RvZ09YQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQXhNbkI0T3lJK0Nna0pDUWtKQ1FrSlBDRXRMVnRwWmlCbmRHVWdiWE52SURsZFBnb0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpWTJWdWRHVnlJaUJpYjNKa1pYSTlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnWTJ4aGMzTTlJblJsYlhCc1lYUmxRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHR0WVhndGQybGtkR2c2SURZd01IQjRJQ0ZwYlhCdmNuUmhiblE3SWo0S0NRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaVltOWtlVU52Ym5SaGFXNWxjaUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVVWlhoMFFteHZZMnNpSUhOMGVXeGxQU0p0YVc0dGQybGtkR2c2SURFd01DVTdZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VTQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVKc2IyTnJUM1YwWlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlHTnNZWE56UFNKdFkyNVVaWGgwUW14dlkydEpibTVsY2lJZ2MzUjViR1U5SW5CaFpHUnBibWN0ZEc5d09pQTVjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaWJHVm1kQ0lnWW05eVpHVnlQU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCemRIbHNaVDBpZDJsa2RHZzZNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lIWmhiR2xuYmowaWRHOXdJaUIzYVdSMGFEMGlOakF3SWlCemRIbHNaVDBpZDJsa2RHZzZOakF3Y0hnN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQnpkSGxzWlQwaWJXRjRMWGRwWkhSb09pQXhNREFsTzIxcGJpMTNhV1IwYURvZ01UQXdKVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVVWlhoMFEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnWTJ4aGMzTTlJbTFqYmxSbGVIUkRiMjUwWlc1MElpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ01IQjRJREU0Y0hnZ09YQjRPMlp2Ym5RdFptRnRhV3g1T2lCVVlXaHZiV0VzSUZabGNtUmhibUVzSUZObFoyOWxMQ0J6WVc1ekxYTmxjbWxtTzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHQzYjNKa0xXSnlaV0ZyT2lCaWNtVmhheTEzYjNKa08yTnZiRzl5T2lBak16TXpNek16TzJadmJuUXRjMmw2WlRvZ01UUndlRHRzYVc1bExXaGxhV2RvZERvZ01UVXdKVHQwWlhoMExXRnNhV2R1T2lCc1pXWjBPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHZ3pJSE4wZVd4bFBTSjBaWGgwTFdGc2FXZHVPaUJzWldaME8yUnBjM0JzWVhrNklHSnNiMk5yTzIxaGNtZHBiam9nTUR0d1lXUmthVzVuT2lBd08yTnZiRzl5T2lBak5qQTJNRFl3TzJadmJuUXRabUZ0YVd4NU9pQklaV3gyWlhScFkyRTdabTl1ZEMxemFYcGxPaUF4T0hCNE8yWnZiblF0YzNSNWJHVTZJRzV2Y20xaGJEdG1iMjUwTFhkbGFXZG9kRG9nWW05c1pEdHNhVzVsTFdobGFXZG9kRG9nTVRJMUpUdHNaWFIwWlhJdGMzQmhZMmx1WnpvZ0xURndlRHNpUGtsdVltOTFibVFnVUhWeVkyaGhjMlVnVDNKa1pYSWdkRzhnY21WMmFXVjNQQzlvTXo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4WkdsMklITjBlV3hsUFNKMFpYaDBMV0ZzYVdkdU9pQnNaV1owT3lJK1BHSnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJMmxtSUhWelpYSXVabWx5YzNST1lXMWxQejhnSmlZZ2RYTmxjaTVtYVhKemRFNWhiV1UvYUdGelgyTnZiblJsYm5RK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThJMmxtSUhWelpYSXViR0Z6ZEU1aGJXVS9QeUFtSmlCMWMyVnlMbXhoYzNST1lXMWxQMmhoYzE5amIyNTBaVzUwUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRWhsYkd4dklDUjdkWE5sY2k1bWFYSnpkRTVoYldWOUxBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQQ05sYkhObFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUVobGJHeHZJQ1I3ZFhObGNpNW1hWEp6ZEU1aGJXVjlMQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEM4amFXWStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd2paV3h6WlQ0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lFaGxiR3h2SUNSN2RYTmxjaTVsYldGcGJIMHNDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd3ZJMmxtUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4WW5JK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4aWNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSldXOTFJR2hoZG1VZ1lTQnVaWGNnYVc1aWIzVnVaQ0JQY21SbGNpQjBieUJ5WlhacFpYY3VJRkJzWldGelpTQThZU0JvY21WbVBTSWtlMmh5WldaOUlpQjBZWEpuWlhROUlsOWliR0Z1YXlJK2JHOW5JRzl1SUdGdVpDQmhZMk5sY0hRZ2IzSWdjbVZxWldOMExqd3ZZVDQ4WW5JK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKSm01aWMzQTdQQzlrYVhZK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQZ29KQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZV0pzWlQ0OGRHRmliR1VnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdkR0ZpYkdVdGJHRjViM1YwT2lCbWFYaGxaQ0FoYVcxd2IzSjBZVzUwT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIa2dZMnhoYzNNOUltMWpia1JwZG1sa1pYSkNiRzlqYTA5MWRHVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRazhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJTVzV1WlhJaUlITjBlV3hsUFNKdGFXNHRkMmxrZEdnNklERXdNQ1U3Y0dGa1pHbHVaem9nTlhCNElERTRjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkRiMjUwWlc1MElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJSE4wZVd4bFBTSnRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFhSdmNDMTNhV1IwYURvZ01uQjRPMkp2Y21SbGNpMTBiM0F0YzNSNWJHVTZJRzV2Ym1VN1ltOXlaR1Z5TFhSdmNDMWpiMnh2Y2pvZ0kwVkJSVUZGUVR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeHpjR0Z1UGp3dmMzQmhiajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFFvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHTnNZWE56UFNKdFkyNUVhWFpwWkdWeVFteHZZMnRKYm01bGNpSWdjM1I1YkdVOUluQmhaR1JwYm1jNklERTRjSGc3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGFISWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkRiMjUwWlc1MElpQnpkSGxzWlQwaVltOXlaR1Z5TFdKdmRIUnZiUzFqYjJ4dmNqcHViMjVsT3lCaWIzSmtaWEl0YkdWbWRDMWpiMnh2Y2pwdWIyNWxPeUJpYjNKa1pYSXRjbWxuYUhRdFkyOXNiM0k2Ym05dVpUc2dZbTl5WkdWeUxXSnZkSFJ2YlMxM2FXUjBhRG93T3lCaWIzSmtaWEl0YkdWbWRDMTNhV1IwYURvd095QmliM0prWlhJdGNtbG5hSFF0ZDJsa2RHZzZNRHNnYldGeVoybHVMWFJ2Y0Rvd095QnRZWEpuYVc0dGNtbG5hSFE2TURzZ2JXRnlaMmx1TFdKdmRIUnZiVG93T3lCdFlYSm5hVzR0YkdWbWREb3dPeUlnTHo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDRLQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0ZpYkdVK1BDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ1ozUmxJRzF6YnlBNVhUNEtDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdhV1E5SW5SbGJYQnNZWFJsUm05dmRHVnlJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE8ySmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1NbVl5WmpJN1ltOXlaR1Z5TFhSdmNEb2dNRHRpYjNKa1pYSXRZbTkwZEc5dE9pQXdPM0JoWkdScGJtY3RkRzl3T2lBNWNIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEbHdlRHNpUGdvSkNRa0pDUWtKQ1R3aExTMWJhV1lnWjNSbElHMXpieUE1WFQ0S0NRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbU5sYm5SbGNpSWdZbTl5WkdWeVBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSjBaVzF3YkdGMFpVTnZiblJoYVc1bGNpSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdiV0Y0TFhkcFpIUm9PaUEyTURCd2VDQWhhVzF3YjNKMFlXNTBPeUkrQ2drSkNRa0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ1kyeGhjM005SW1admIzUmxja052Ym5SaGFXNWxjaUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYXlJZ2MzUjViR1U5SW0xcGJpMTNhV1IwYURvZ01UQXdKVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYTA5MWRHVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ09YQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYTBsdWJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRFTnZiblJoYVc1bGNpSWdjM1I1YkdVOUltMXBiaTEzYVdSMGFEb2dNVEF3SlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2MzUjViR1U5SW5CaFpHUnBibWN0YkdWbWREb2dPWEI0TzNCaFpHUnBibWN0Y21sbmFIUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQnpkSGxzWlQwaWJXbHVMWGRwWkhSb09pQXhNREFsTzJKdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZENJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSjBiM0FpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ09YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklEbHdlRHR3WVdSa2FXNW5MV3hsWm5RNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKalpXNTBaWElpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdsdWJHbHVaVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKd1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwTnZiblJsYm5SSmRHVnRRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZEVsMFpXMGlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW14bFpuUWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQnpkSGxzWlQwaWNHRmtaR2x1WnkxMGIzQTZJRFZ3ZUR0d1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBMWNIZzdjR0ZrWkdsdVp5MXNaV1owT2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlpSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQjNhV1IwYUQwaU1qUWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZEpZMjl1UTI5dWRHVnVkQ0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4aElHaHlaV1k5SW1oMGRIQTZMeTkzZDNjdVlXMWhiSFJ2TG1OdmJTOGlJSFJoY21kbGREMGlYMkpzWVc1cklpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK1BHbHRaeUJ6Y21NOUltaDBkSEE2THk5alpHNHRhVzFoWjJWekxtMWhhV3hqYUdsdGNDNWpiMjB2YVdOdmJuTXZjMjlqYVdGc0xXSnNiMk5yTFhZeUwyTnZiRzl5TFd4cGJtc3RORGd1Y0c1bklpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ1lteHZZMnM3WW05eVpHVnlPaUF3TzJobGFXZG9kRG9nWVhWMGJ6dHZkWFJzYVc1bE9pQnViMjVsTzNSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUc3RiWE10YVc1MFpYSndiMnhoZEdsdmJpMXRiMlJsT2lCaWFXTjFZbWxqT3lJZ2FHVnBaMmgwUFNJeU5DSWdkMmxrZEdnOUlqSTBJaUJqYkdGemN6MGlJajQ4TDJFK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCemRIbHNaVDBpWkdsemNHeGhlVG9nYVc1c2FXNWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ2MzUjViR1U5SW5CaFpHUnBibWN0Y21sbmFIUTZJREV3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZEVsMFpXMURiMjUwWVdsdVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZV0pzWlNCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnZDJsa2RHZzlJakV3TUNVaUlHTnNZWE56UFNKdFkyNUdiMnhzYjNkRGIyNTBaVzUwU1hSbGJTSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpYkdWbWRDSWdkbUZzYVdkdVBTSnRhV1JrYkdVaUlITjBlV3hsUFNKd1lXUmthVzVuTFhSdmNEb2dOWEI0TzNCaFpHUnBibWN0Y21sbmFIUTZJREV3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURWd2VEdHdZV1JrYVc1bkxXeGxablE2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaUlpQnpkSGxzWlQwaVltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSnRhV1JrYkdVaUlIZHBaSFJvUFNJeU5DSWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwbGpiMjVEYjI1MFpXNTBJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEdFZ2FISmxaajBpYUhSMGNITTZMeTkzZDNjdVptRmpaV0p2YjJzdVkyOXRMMkZ0WVd4MGIzUmxZMmh1YjJ4dloybGxjeUlnZEdGeVoyVjBQU0pmWW14aGJtc2lJSE4wZVd4bFBTSnRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNDhhVzFuSUhOeVl6MGlhSFIwY0RvdkwyTmtiaTFwYldGblpYTXViV0ZwYkdOb2FXMXdMbU52YlM5cFkyOXVjeTl6YjJOcFlXd3RZbXh2WTJzdGRqSXZZMjlzYjNJdFptRmpaV0p2YjJzdE5EZ3VjRzVuSWlCemRIbHNaVDBpWkdsemNHeGhlVG9nWW14dlkyczdZbTl5WkdWeU9pQXdPMmhsYVdkb2REb2dZWFYwYnp0dmRYUnNhVzVsT2lCdWIyNWxPM1JsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlRzdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPaUJpYVdOMVltbGpPeUlnYUdWcFoyaDBQU0l5TkNJZ2QybGtkR2c5SWpJMElpQmpiR0Z6Y3owaUlqNDhMMkUrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdiWE52WFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGlkRzl3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJ6ZEhsc1pUMGlaR2x6Y0d4aGVUb2dhVzVzYVc1bE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnYzNSNWJHVTlJbkJoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcxRGIyNTBZV2x1WlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2REYjI1MFpXNTBTWFJsYlNJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGliR1ZtZENJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ05YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRFZ3ZUR0d1lXUmthVzVuTFd4bFpuUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrK1BIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhkcFpIUm9QU0l5TkNJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBsamIyNURiMjUwWlc1MElpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0VnYUhKbFpqMGlhSFIwY0hNNkx5OTNkM2N1YkdsdWEyVmthVzR1WTI5dEwyTnZiWEJoYm5rdllXMWhiSFJ2TFhSbFkyaHViMnh2WjJsbGN5SWdkR0Z5WjJWMFBTSmZZbXhoYm1zaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0OGFXMW5JSE55WXowaWFIUjBjRG92TDJOa2JpMXBiV0ZuWlhNdWJXRnBiR05vYVcxd0xtTnZiUzlwWTI5dWN5OXpiMk5wWVd3dFlteHZZMnN0ZGpJdlkyOXNiM0l0YkdsdWEyVmthVzR0TkRndWNHNW5JaUJ6ZEhsc1pUMGlaR2x6Y0d4aGVUb2dZbXh2WTJzN1ltOXlaR1Z5T2lBd08yaGxhV2RvZERvZ1lYVjBienR2ZFhSc2FXNWxPaUJ1YjI1bE8zUmxlSFF0WkdWamIzSmhkR2x2YmpvZ2JtOXVaVHN0YlhNdGFXNTBaWEp3YjJ4aGRHbHZiaTF0YjJSbE9pQmlhV04xWW1sak95SWdhR1ZwWjJoMFBTSXlOQ0lnZDJsa2RHZzlJakkwSWlCamJHRnpjejBpSWo0OEwyRStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFZ0cFppQnRjMjlkUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlIWmhiR2xuYmowaWRHOXdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ2FXNXNhVzVsTzJKdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCMllXeHBaMjQ5SW5SdmNDSWdjM1I1YkdVOUluQmhaR1JwYm1jdGNtbG5hSFE2SURFd2NIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRFbDBaVzFEYjI1MFlXbHVaWElpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZERiMjUwWlc1MFNYUmxiU0lnYzNSNWJHVTlJbUp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaWJHVm1kQ0lnZG1Gc2FXZHVQU0p0YVdSa2JHVWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYUnZjRG9nTlhCNE8zQmhaR1JwYm1jdGNtbG5hSFE2SURFd2NIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEVndlRHR3WVdSa2FXNW5MV3hsWm5RNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHSnZaSGsrUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0p0YVdSa2JHVWlJSGRwWkhSb1BTSXlOQ0lnWTJ4aGMzTTlJbTFqYmtadmJHeHZkMGxqYjI1RGIyNTBaVzUwSWlCemRIbHNaVDBpYlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHRWdhSEpsWmowaWFIUjBjSE02THk5MGQybDBkR1Z5TG1OdmJTOUJiV0ZzZEc4aUlIUmhjbWRsZEQwaVgySnNZVzVySWlCemRIbHNaVDBpYlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrUEdsdFp5QnpjbU05SW1oMGRIQTZMeTlqWkc0dGFXMWhaMlZ6TG0xaGFXeGphR2x0Y0M1amIyMHZhV052Ym5NdmMyOWphV0ZzTFdKc2IyTnJMWFl5TDJOdmJHOXlMWFIzYVhSMFpYSXRORGd1Y0c1bklpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ1lteHZZMnM3WW05eVpHVnlPaUF3TzJobGFXZG9kRG9nWVhWMGJ6dHZkWFJzYVc1bE9pQnViMjVsTzNSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUc3RiWE10YVc1MFpYSndiMnhoZEdsdmJpMXRiMlJsT2lCaWFXTjFZbWxqT3lJZ2FHVnBaMmgwUFNJeU5DSWdkMmxrZEdnOUlqSTBJaUJqYkdGemN6MGlJajQ4TDJFK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCemRIbHNaVDBpWkdsemNHeGhlVG9nYVc1c2FXNWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ2MzUjViR1U5SW5CaFpHUnBibWN0Y21sbmFIUTZJREE3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcxRGIyNTBZV2x1WlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2REYjI1MFpXNTBTWFJsYlNJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGliR1ZtZENJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ05YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRFZ3ZUR0d1lXUmthVzVuTFd4bFpuUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrK1BIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhkcFpIUm9QU0l5TkNJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBsamIyNURiMjUwWlc1MElpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0VnYUhKbFpqMGlhSFIwY0hNNkx5OTNkM2N1ZVc5MWRIVmlaUzVqYjIwdlkyaGhibTVsYkM5VlF6bFhXQzFxUldGRFdHMDRWRll6Y21SalEyazNZM2NpSUhSaGNtZGxkRDBpWDJKc1lXNXJJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStQR2x0WnlCemNtTTlJbWgwZEhBNkx5OWpaRzR0YVcxaFoyVnpMbTFoYVd4amFHbHRjQzVqYjIwdmFXTnZibk12YzI5amFXRnNMV0pzYjJOckxYWXlMMk52Ykc5eUxYbHZkWFIxWW1VdE5EZ3VjRzVuSWlCemRIbHNaVDBpWkdsemNHeGhlVG9nWW14dlkyczdZbTl5WkdWeU9pQXdPMmhsYVdkb2REb2dZWFYwYnp0dmRYUnNhVzVsT2lCdWIyNWxPM1JsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlRzdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPaUJpYVdOMVltbGpPeUlnYUdWcFoyaDBQU0l5TkNJZ2QybGtkR2c5SWpJMElpQmpiR0Z6Y3owaUlqNDhMMkUrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdiWE52WFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK0Nna0pDUWtKQ1FrSkNRa0pDUWs4TDNSaFlteGxQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJzaUlITjBlV3hsUFNKdGFXNHRkMmxrZEdnNklERXdNQ1U3WW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0MFlXSnNaUzFzWVhsdmRYUTZJR1pwZUdWa0lDRnBiWEJ2Y25SaGJuUTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVNCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJUM1YwWlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJ0SmJtNWxjaUlnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdHdZV1JrYVc1bk9pQTFjSGdnTVRod2VDQXlNSEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRMjl1ZEdWdWRDSWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxMGIzQXRkMmxrZEdnNklESndlRHRpYjNKa1pYSXRkRzl3TFhOMGVXeGxPaUJ6YjJ4cFpEdGliM0prWlhJdGRHOXdMV052Ykc5eU9pQWpSVVZGUlVWRk8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSE53WVc0K1BDOXpjR0Z1UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdENna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkNiRzlqYTBsdWJtVnlJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp6b2dNVGh3ZURzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeG9jaUJqYkdGemN6MGliV051UkdsMmFXUmxja052Ym5SbGJuUWlJSE4wZVd4bFBTSmliM0prWlhJdFltOTBkRzl0TFdOdmJHOXlPbTV2Ym1VN0lHSnZjbVJsY2kxc1pXWjBMV052Ykc5eU9tNXZibVU3SUdKdmNtUmxjaTF5YVdkb2RDMWpiMnh2Y2pwdWIyNWxPeUJpYjNKa1pYSXRZbTkwZEc5dExYZHBaSFJvT2pBN0lHSnZjbVJsY2kxc1pXWjBMWGRwWkhSb09qQTdJR0p2Y21SbGNpMXlhV2RvZEMxM2FXUjBhRG93T3lCdFlYSm5hVzR0ZEc5d09qQTdJRzFoY21kcGJpMXlhV2RvZERvd095QnRZWEpuYVc0dFltOTBkRzl0T2pBN0lHMWhjbWRwYmkxc1pXWjBPakE3SWlBdlBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGdvSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWVdKc1pUNDhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVKc2IyTnJJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVNCamJHRnpjejBpYldOdVZHVjRkRUpzYjJOclQzVjBaWElpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lIWmhiR2xuYmowaWRHOXdJaUJqYkdGemN6MGliV051VkdWNGRFSnNiMk5yU1c1dVpYSWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYUnZjRG9nT1hCNE8yMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnZDJsa2RHZzlJakV3TUNVaUlITjBlV3hsUFNKM2FXUjBhRG94TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQjNhV1IwYUQwaU5qQXdJaUJ6ZEhsc1pUMGlkMmxrZEdnNk5qQXdjSGc3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnYzNSNWJHVTlJbTFoZUMxM2FXUjBhRG9nTVRBd0pUdHRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVZHVjRkRU52Ym5SbGJuUkRiMjUwWVdsdVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdkbUZzYVdkdVBTSjBiM0FpSUdOc1lYTnpQU0p0WTI1VVpYaDBRMjl1ZEdWdWRDSWdjM1I1YkdVOUluQmhaR1JwYm1jdGRHOXdPaUF3TzNCaFpHUnBibWN0Y21sbmFIUTZJREU0Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURsd2VEdHdZV1JrYVc1bkxXeGxablE2SURFNGNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE8zZHZjbVF0WW5KbFlXczZJR0p5WldGckxYZHZjbVE3WTI5c2IzSTZJQ00yTlRZMU5qVTdabTl1ZEMxbVlXMXBiSGs2SUZSaGFHOXRZU3dnVm1WeVpHRnVZU3dnVTJWbmIyVXNJSE5oYm5NdGMyVnlhV1k3Wm05dWRDMXphWHBsT2lBeE1uQjRPMnhwYm1VdGFHVnBaMmgwT2lBeE5UQWxPM1JsZUhRdFlXeHBaMjQ2SUdObGJuUmxjanNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOFpHbDJJSE4wZVd4bFBTSjBaWGgwTFdGc2FXZHVPaUJqWlc1MFpYSTdJajVRYkdWaGMyVWdaRzhnYm05MElISmxjR3g1SUhSdklIUm9hWE1nWlMxdFlXbHNMaUJVYUdVZ2MyVnVaR1Z5SUdWdFlXbHNJR0ZrWkhKbGMzTWdhWE1nYm05MElHMXZibWwwYjNKbFpDNDhZbkkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pSbTl5SUdGdWVTQnhkV1Z6ZEdsdmJpd2djR3hsWVhObElEeGhJR2h5WldZOUltMWhhV3gwYnpwamIyNTBZV04wUUhCc1lYUm1iM0p0Tmk1cGJ5SWdkR0Z5WjJWMFBTSmZZbXhoYm1zaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3WTI5c2IzSTZJQ00yTlRZMU5qVTdabTl1ZEMxM1pXbG5hSFE2SUc1dmNtMWhiRHQwWlhoMExXUmxZMjl5WVhScGIyNDZJSFZ1WkdWeWJHbHVaVHNpUG5ObGJtUWdkWE1nWVNCdFpYTnpZV2RsUEM5aFBpNDhZbkkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0p5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHh6ZEhKdmJtYytVR3hoZEdadmNtMGdOaUJpZVNCQmJXRnNkRzhnVkdWamFHNXZiRzluYVdWelBDOXpkSEp2Ym1jK1BHSnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeGljajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNjS3BKbTVpYzNBN0pIc3VibTkzUDNOMGNtbHVaeTU1ZVhsNWZTWnVZbk53TzBOdmNIbHlhV2RvZEM0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNDhMMlJwZGo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoVzJWdVpHbG1YUzB0UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGdvSkNRa0pDUWtKQ1FrSkNRazhMM1JoWW14bFBqd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUdkMFpTQnRjMjhnT1YwK0Nna0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNUd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRazhMM1J5UGdvSkNRa0pQQzkwWVdKc1pUNEtDUWtKQ1R3aExTMGdMeThnUlU1RUlGUkZUVkJNUVZSRklDMHRQZ29KQ1FrOEwzUmtQZ29KQ1R3dmRISStDZ2s4TDNSaFlteGxQZ29KUEM5alpXNTBaWEkrQ2p3dlltOWtlVDRLUEM5b2RHMXNQZ289XCIsXCJ0YXJnZXRSb290XCI6XCIke0IyQk9YX0RBVEF9XCIsXCJ0YXJnZXRQYXRoXCI6XCIvcmVzb3VyY2VzL3RlbXBsYXRlcy9wNmRlbW9fUE9SZXZpZXcuZnRsXCIsXCJwcm9wc1wiOnt9LFwiZGVwbG95ZWRcIjp0cnVlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJwNmRlbW9fUE9SZXZpZXcuZnRsXCIsXCJhdHRhY2htZW50U2l6ZVwiOjUxMjY2fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTU3NTU5ODgyNn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5idW5kbGVkcmVzb3VyY2VzIiwibmFtZSI6IlRhYmxlSXRlbXNEYXRhIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVGFibGVJdGVtc0RhdGFcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQ1NWIGZpbGUgdG8gaW1wb3J0IGludG8gdGFibGUgSXRlbXNcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1NzU1OTg4NDQsXCJyZXZpc2lvbklkXCI6XCI3Mjg2ODllY2I3YWFiYjMwZDVhN2EwYWQzZWE2NjJlMVwiLFwiaXRlbUJ5dGVzXCI6XCJTV1FzUkdWelkzSnBjSFJwYjI0c1ZXNXBkRkJ5YVdObExFTjFjbkpsYm1ONUxGVlBUU3hEWVhSbFoyOXllUW93TURNME16UTFMRk5wYkhabGNpQklaV3h0WlhRc01qQXNWVk5FTEVWQkxFaGxiRzFsZEFveE1URXhNVEVzVTJ4dmRIUmxaQ0JUWTNKbGQyUnlhWFpsY2l3eU5TeFZVMFFzUlVFc1UyTnlaWGRrY21sMlpYSUtNVE01TkRVeE1URXNVR3hoYzNScFl5QklaV3h0WlhRc01UTXNWVk5FTEVWQkxFaGxiRzFsZEFveE5qYzJOemdzUTJ4aGR5QklZVzF0WlhJc01UVXNWVk5FTEVWQkxFaGhiVzFsY2dveU1qSXlNaklzVUdocGJHbHdjeUJUWTNKbGQyUnlhWFpsY2l3eU55eFZVMFFzUlVFc1UyTnlaWGRrY21sMlpYSUtNakl5TWpJMExGQnZlbWxrY21sMklGTmpjbVYzWkhKcGRtVnlMRE13TEZWVFJDeEZRU3hUWTNKbGQyUnlhWFpsY2dvME5EUTFOallzUTJ4MVlpQklZVzF0WlhJc01qQXNWVk5FTEVWQkxFaGhiVzFsY2dvNE9UTXlNak1zVTJ4bFpHZGxJRWhoYlcxbGNpd3hNREFzVlZORUxFVkJMRWhoYlcxbGNnbz1cIixcInRhcmdldFJvb3RcIjpcIiR7VE1QfVwiLFwidGFyZ2V0UGF0aFwiOlwiL3A2X2RlbW9faXRlbXMuY3N2XCIsXCJwcm9wc1wiOnt9LFwiZGVwbG95ZWRcIjp0cnVlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJ0YWJsZV9wNl9kZW1vLkl0ZW1zX2RhdGFfZXhwb3J0LmNzdlwiLFwiYXR0YWNobWVudFNpemVcIjozODZ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNTc1NTk4ODQ0fV0sInBsYXRmb3JtNi5zdG9yZWRwcm9jZWR1cmVzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zdG9yZWRwcm9jZWR1cmVzIiwibmFtZSI6IkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9ucyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEZWxldGUgYWxsIHA2X2RlbW8gdHJhbnNhY3Rpb24gLSBhdXRvbWF0aWNhbGx5IGNhbGxlZCB3aGVuIHA2X2RlbW8gYXBwbGljYXRpb24gaXMgdW5pbnN0YWxsZWRcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1MDcsXCJyZXZpc2lvbklkXCI6XCJkMWZhY2FkMDlkMWI2MjVkZDA3ZTM2NWIxY2NkMTE1YlwiLFwidHlwZVwiOlwiVXNlckRlZmluZWRcIixcInVzZXJRdWVyeVZhbHVlXCI6XCJkZWxldGVcXG5mcm9tIHA2Y29yZS5pdGVtXFxud2hlcmUgeHBhdGhfZXhpc3RzKCcvVHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlWy4vS2V5ID0gXFxcIkFwcGxpY2F0aW9uXFxcIiBhbmQgVmFsdWU9XFxcInA2X2RlbW9cXFwiXScgLCBjb250ZW50KTtcXG5cXG5kZWxldGVcXG5mcm9tIHA2Y29yZS5pdGVtXFxud2hlcmUgeHBhdGhfZXhpc3RzKCcvV29ya2Zsb3dUYXNrL2ZsaW5rL3ZpZXdbLj1cXFwicDZfZGVtby5UcmFuc2FjdGlvbnNcXFwiXScgLCBjb250ZW50KTtcXG5cIixcInRhcmdldERhdGFTb3VyY2VOYW1lXCI6bnVsbCxcImRlZmluZWRQYXJhbWV0ZXJzXCI6e30sXCJjYWNoaW5nT3ZlcnJpZGVcIjpmYWxzZSxcImFwcGVuZFRhcmdldERhdGFTb3VyY2VcIjpmYWxzZX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1MDd9XX0=", "enabled": false, "version": "0.10.0", "installed": false, "signature": "hC51RvJEqT35PFeY6VdDDc7EiEZGGqshvJCdidPZXYPkHjApL6L+ddV0qL5t8tqE8hzb9aS6Rtt5aPKkgxuZeibkedDvTou+4chv/4xLMdXJlQJESxBik+als34DHQMHcZ1hTpka3OlXhU+exYJ6ZUPBcpzNxXa/NxyK+HkRa60=", "createDate": 1567442840607, "expiryDays": 0, "revisionId": "b15bcc325053308e2795a9760543d44d", "contentMode": "READ", "description": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "publisherId": "4d8c4ac1-9db1-44d9-8d4e-604a845478e9", "appProperties": null, "publisherName": "Platform 6", "lastModifiedBy": "choucri.fahed@amalto.com", "applicationName": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "componentBundle": null, "installationDate": null, "lastModifiedDate": 1567774893482, "underDevelopment": false, "uninstallScriptId": "UninstallApplication", "maxInstanceVersion": "", "minInstanceVersion": "6.0.0-beta-1", "preInstallScriptId": null, "postInstallScriptId": "InitializeApplication"} \N 1567774893500
+\.
+
+
+--
+-- Data for Name: table_data; Type: TABLE DATA; Schema: p6core; Owner: b2box
+--
+
+COPY p6core.table_data (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin;
+\.
+
+
+--
+-- Data for Name: transaction; Type: TABLE DATA; Schema: p6core; Owner: b2box
+--
+
+COPY p6core.transaction (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin;
+\.
+
+
+--
+-- Name: activeroutingorder activeroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box
+--
+
+ALTER TABLE ONLY p6core.activeroutingorder
+ ADD CONSTRAINT activeroutingorder_pkey PRIMARY KEY (name);
+
+
+--
+-- Name: completedroutingorder completedroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box
+--
+
+ALTER TABLE ONLY p6core.completedroutingorder
+ ADD CONSTRAINT completedroutingorder_pkey PRIMARY KEY (name);
+
+
+--
+-- Name: failedroutingorder failedroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box
+--
+
+ALTER TABLE ONLY p6core.failedroutingorder
+ ADD CONSTRAINT failedroutingorder_pkey PRIMARY KEY (name);
+
+
+--
+-- Name: flyway_schema_history flyway_schema_history_pk; Type: CONSTRAINT; Schema: p6core; Owner: b2box
+--
+
+ALTER TABLE ONLY p6core.flyway_schema_history
+ ADD CONSTRAINT flyway_schema_history_pk PRIMARY KEY (installed_rank);
+
+
+--
+-- Name: transaction item_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box
+--
+
+ALTER TABLE ONLY p6core.transaction
+ ADD CONSTRAINT item_pkey PRIMARY KEY (datapartition, datatype, iid1, iid2, iid3, iid4);
+
+
+--
+-- Name: rawbytes rawbytes_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box
+--
+
+ALTER TABLE ONLY p6core.rawbytes
+ ADD CONSTRAINT rawbytes_pkey PRIMARY KEY (id1, id2);
+
+
+--
+-- Name: serviceconfig serviceconfig_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box
+--
+
+ALTER TABLE ONLY p6core.serviceconfig
+ ADD CONSTRAINT serviceconfig_pkey PRIMARY KEY (id1, id2, id3) WITH (fillfactor='100');
+
+
+--
+-- Name: aro_idx01; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX aro_idx01 ON p6core.activeroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeScheduled//text()'::text, content))::text[], ' '::text))::bigint));
+
+
+--
+-- Name: aro_idx02; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX aro_idx02 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text));
+
+
+--
+-- Name: aro_idx03; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX aro_idx03 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text));
+
+
+--
+-- Name: aro_idx04; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX aro_idx04 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text));
+
+
+--
+-- Name: aro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX aro_idx_itempk_datapartition ON p6core.activeroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256)));
+
+
+--
+-- Name: cro_idx01; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX cro_idx01 ON p6core.completedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeLastRunCompleted//text()'::text, content))::text[], ' '::text))::bigint));
+
+
+--
+-- Name: cro_idx02; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX cro_idx02 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text));
+
+
+--
+-- Name: cro_idx03; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX cro_idx03 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text));
+
+
+--
+-- Name: cro_idx04; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX cro_idx04 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text));
+
+
+--
+-- Name: cro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX cro_idx_itempk_datapartition ON p6core.completedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256)));
+
+
+--
+-- Name: flyway_schema_history_s_idx; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX flyway_schema_history_s_idx ON p6core.flyway_schema_history USING btree (success);
+
+
+--
+-- Name: fro_idx01; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX fro_idx01 ON p6core.failedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeLastRunCompleted//text()'::text, content))::text[], ' '::text))::bigint));
+
+
+--
+-- Name: fro_idx02; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX fro_idx02 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text));
+
+
+--
+-- Name: fro_idx03; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX fro_idx03 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text));
+
+
+--
+-- Name: fro_idx04; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX fro_idx04 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text));
+
+
+--
+-- Name: fro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX fro_idx_itempk_datapartition ON p6core.failedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256)));
+
+
+--
+-- Name: fts_aro_idx; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX fts_aro_idx ON p6core.activeroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text)));
+
+
+--
+-- Name: fts_cro_idx; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX fts_cro_idx ON p6core.completedroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text)));
+
+
+--
+-- Name: fts_fro_idx; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX fts_fro_idx ON p6core.failedroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text)));
+
+
+--
+-- Name: item_idx01; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX item_idx01 ON p6core.transaction USING btree (datapartition);
+
+
+--
+-- Name: item_idx02; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX item_idx02 ON p6core.transaction USING btree (datatype);
+
+
+--
+-- Name: item_mi_fts_idx01; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX item_mi_fts_idx01 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text));
+
+
+--
+-- Name: item_mi_fts_idx02; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX item_mi_fts_idx02 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/CreationDate//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text));
+
+
+--
+-- Name: item_mi_fts_idx03; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX item_mi_fts_idx03 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text));
+
+
+--
+-- Name: item_mi_fts_idx04; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX item_mi_fts_idx04 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text));
+
+
+--
+-- Name: item_mi_fts_idx05; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX item_mi_fts_idx05 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text));
+
+
+--
+-- Name: item_mi_idx01; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX item_mi_idx01 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/CreationDate//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text));
+
+
+--
+-- Name: item_mi_idx02; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX item_mi_idx02 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text));
+
+
+--
+-- Name: item_mi_idx03; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX item_mi_idx03 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text));
+
+
+--
+-- Name: item_mi_idx04; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX item_mi_idx04 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text));
+
+
+--
+-- Name: log_datatype_idx; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX log_datatype_idx ON p6core.log USING btree (datatype);
+
+
+--
+-- Name: sconfigjson_idx01; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX sconfigjson_idx01 ON p6core.serviceconfig USING gin (content jsonb_path_ops);
+
+
+--
+-- Name: table_data_datatype_idx; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX table_data_datatype_idx ON p6core.table_data USING btree (datatype);
+
+
+--
+-- Name: xrocswyd3g5rejujxo; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX xrocswyd3g5rejujxo ON p6core.table_data USING btree (public.array_to_string_i((xpath('/DUNS_Internal/DUNSNumber//text()'::text, content))::text[], ' '::text)) WHERE ((datapartition = 'TABLE_DATA'::p6core.itempartitiontype) AND ((datatype)::text = 'DUNS_Internal'::text));
+
+
+--
+-- Name: xrvlaoi4elt5bbntlz; Type: INDEX; Schema: p6core; Owner: b2box
+--
+
+CREATE INDEX xrvlaoi4elt5bbntlz ON p6core.table_data USING btree (public.array_to_string_i((xpath('/DUNS_Customers/DUNSNumber//text()'::text, content))::text[], ' '::text)) WHERE ((datapartition = 'TABLE_DATA'::p6core.itempartitiontype) AND ((datatype)::text = 'DUNS_Customers'::text));
+
+
+--
+-- Name: DATABASE b2box; Type: ACL; Schema: -; Owner: postgres
+--
+
+GRANT ALL ON DATABASE b2box TO b2box;
+
+
+--
+-- PostgreSQL database dump complete
+--
+
+--
+-- PostgreSQL database dump
+--
+
+-- Dumped from database version 11.3 (Debian 11.3-1.pgdg90+1)
+-- Dumped by pg_dump version 11.3 (Debian 11.3-1.pgdg90+1)
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET idle_in_transaction_session_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SELECT pg_catalog.set_config('search_path', '', false);
+SET check_function_bodies = false;
+SET xmloption = content;
+SET client_min_messages = warning;
+SET row_security = off;
+
+DROP DATABASE postgres;
+--
+-- Name: postgres; Type: DATABASE; Schema: -; Owner: postgres
+--
+
+CREATE DATABASE postgres WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8';
+
+
+ALTER DATABASE postgres OWNER TO postgres;
+
+\connect postgres
+
+SET statement_timeout = 0;
+SET lock_timeout = 0;
+SET idle_in_transaction_session_timeout = 0;
+SET client_encoding = 'UTF8';
+SET standard_conforming_strings = on;
+SELECT pg_catalog.set_config('search_path', '', false);
+SET check_function_bodies = false;
+SET xmloption = content;
+SET client_min_messages = warning;
+SET row_security = off;
+
+--
+-- Name: DATABASE postgres; Type: COMMENT; Schema: -; Owner: postgres
+--
+
+COMMENT ON DATABASE postgres IS 'default administrative connection database';
+
+
+--
+-- Name: b2head; Type: SCHEMA; Schema: -; Owner: postgres
+--
+
+CREATE SCHEMA b2head;
+
+
+ALTER SCHEMA b2head OWNER TO postgres;
+
+--
+-- Name: tablefunc; Type: EXTENSION; Schema: -; Owner:
+--
+
+CREATE EXTENSION IF NOT EXISTS tablefunc WITH SCHEMA public;
+
+
+--
+-- Name: EXTENSION tablefunc; Type: COMMENT; Schema: -; Owner:
+--
+
+COMMENT ON EXTENSION tablefunc IS 'functions that manipulate whole tables, including crosstab';
+
+
+--
+-- PostgreSQL database dump complete
+--
+
+--
+-- PostgreSQL database cluster dump complete
+--
+
diff --git a/reference_data/SNAPSHOT/p6core.data/conf/application.conf b/reference_data/SNAPSHOT/p6core.data/conf/application.conf
index 943619e..c8c5389 100644
--- a/reference_data/SNAPSHOT/p6core.data/conf/application.conf
+++ b/reference_data/SNAPSHOT/p6core.data/conf/application.conf
@@ -1,4 +1,4 @@
-b2auth {
+p6auth {
remote.provider {
url: "https://login.amalto.io/apis/v2/b2auth"
}
diff --git a/reference_data/SNAPSHOT/reference.sql b/reference_data/SNAPSHOT/reference.sql
index 4edf689..83c1367 100644
--- a/reference_data/SNAPSHOT/reference.sql
+++ b/reference_data/SNAPSHOT/reference.sql
@@ -201,12 +201,12 @@ ALTER TYPE p6core.itempartitiontype OWNER TO b2box;
CREATE FUNCTION public.array_to_string_i(texts text[], sep text) RETURNS text
LANGUAGE sql IMMUTABLE STRICT
- AS $$
-
-
- select array_to_string (texts, sep)
-
-
+ AS $$
+
+
+ select array_to_string (texts, sep)
+
+
$$;
@@ -301,18 +301,6 @@ FOR VALUES IN ('LOG');
ALTER TABLE p6core.log OWNER TO b2box;
---
--- Name: meta; Type: TABLE; Schema: p6core; Owner: b2box
---
-
-CREATE TABLE p6core.meta (
- id character varying(512) NOT NULL,
- version character varying(32)
-);
-
-
-ALTER TABLE p6core.meta OWNER TO b2box;
-
--
-- Name: rawbytes; Type: TABLE; Schema: p6core; Owner: b2box
--
@@ -408,6 +396,11 @@ COPY p6core.flyway_schema_history (installed_rank, version, description, type, s
14 13.1 B2BOX5-1540 Rename WFWorkItem to WorkflowTask in views SQL V13_1__B2BOX5-1540_Rename_WFWorkItem_to_WorkflowTask_in_views.sql 142754584 b2box 2019-07-09 16:56:55.631853 31 t
15 14 B2BOX5-1839 Simplify counter view SQL V14__B2BOX5-1839_Simplify_counter_view.sql 2110665982 b2box 2019-07-09 16:56:55.687712 35 t
16 15 B2BOX5-1901 Add indexes SQL V15__B2BOX5-1901_Add_indexes.sql -1607078097 b2box 2019-07-12 12:36:31.128033 66 t
+17 16 B2BOX5-1928 Remove meta table SQL V16__B2BOX5-1928_Remove_meta_table.sql -1060199810 b2box 2019-09-06 12:59:24.811813 33 t
+18 17 B2BOX5-1914 DSL migration SQL V17__B2BOX5-1914_DSL_migration.sql 2012373981 b2box 2019-09-06 12:59:24.884128 14 t
+19 18 B2BOX5-1937 Exception migration SQL V18__B2BOX5-1937_Exception_migration.sql 1562596096 b2box 2019-09-06 12:59:24.913329 11 t
+20 19 B2BOX5-1929 Remove application min-max version SQL V19__B2BOX5-1929_Remove_application_min-max_version.sql -656397094 b2box 2019-09-06 12:59:24.93409 169 t
+21 20 B2BOX5-1822 DSL remove deprecated SQL V20__B2BOX5-1822_DSL_remove_deprecated.sql 791640323 b2box 2019-09-06 12:59:25.121487 10 t
\.
@@ -419,28 +412,6 @@ COPY p6core.log (datapartition, datatype, iid1, iid2, iid3, iid4, content, inser
\.
---
--- Data for Name: meta; Type: TABLE DATA; Schema: p6core; Owner: b2box
---
-
-COPY p6core.meta (id, version) FROM stdin;
-ConfigurationInfo 1.0.0
-DataCluster 1.0.0
-DataModel 1.0.0
-Menu 1.0.0
-Role 1.0.0
-Universe 1.0.0
-ActiveRoutingOrder 1.0.0
-CompletedRoutingOrder 1.0.0
-FailedRoutingOrder 1.0.0
-RoutingRule 1.0.1
-Transformer 1.0.0
-RawBytes 1.0.0
-Item 1.0.0
-ServiceConfig 1.0.0
-\.
-
-
--
-- Data for Name: rawbytes; Type: TABLE DATA; Schema: p6core; Owner: b2box
--
@@ -455,15 +426,10 @@ COPY p6core.rawbytes (id1, id2, content, inserttime) FROM stdin;
COPY p6core.serviceconfig (id1, id2, id3, content, bytes, inserttime) FROM stdin;
Default email {"name": "Default", "type": "JAVAMAIL", "appKey": "", "enabled": true, "revisionId": "edf7ea27e3c35e3c0071e669e34d1d98", "contentMode": "NONE", "description": {"EN": "Default email profile"}, "defaultProfile": true, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548169368257, "configurationProperties": {}} \N 1548169368271
-_configuration datamodels {"name": "_configuration", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n", "enabled": false, "revisionId": "6d7cc540eca89f93c43f8e00823abd1d", "contentMode": "NONE", "description": {"EN": " b2box Configuration Model (formerly named .configuration)"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1538389927033} \N 1538389927046
-_issue_management datamodels {"name": "_issue_management", "appKey": "", "schema": "\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n", "enabled": false, "revisionId": "1d2105b391c1b61bb2060f8532de51a1", "contentMode": "NONE", "description": {"EN": " Issue Management Model (formerly named .issue_management)"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1538389926675} \N 1538389926679
Logging Event views {"name": "Logging Event", "type": "TRANSACTIONS", "appKey": "", "enabled": true, "xmlView": "\\n \\n logging_event\\n \\n LOG\\n \\n \\n \\n ID\\n \\n Id\\n Identifiant\\n \\n logging_event/id\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n RangeOfDates(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n StringContains\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n StringContains\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n StringContains\\n \\n \\n AnyField\\n \\n Contains the words\\n Contient les mots\\n \\n logging_event\\n StringContains\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n Date(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n String\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n String\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n String\\n \\n \\n Level\\n \\n Level\\n Level\\n \\n logging_event/level\\n String\\n \\n \\n\\n", "revisionId": "efe8acc7d4f399db36d7f501f3487c9c", "contentMode": "NONE", "description": {"EN": "Logging Event", "FR": "Evènement de log"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548267162338} \N 1548267162347
_logging_event datamodels {"name": "_logging_event", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n", "enabled": false, "revisionId": "92330d48ae06ac2623bca161872d6cf0", "contentMode": "NONE", "description": {"EN": " Logging events (formerly named .logging_event)"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1538389926868} \N 1538389926969
-_crossreferencing datamodels {"name": "_crossreferencing", "appKey": "", "schema": "", "enabled": false, "revisionId": "ffbe6e7ccdd46743ce21d6eebe61d3e9", "contentMode": "NONE", "description": {"EN": " Holds the Cross-References Tables Definitions (formerly named .crossreferencing)"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1538389926993} \N 1538389926996
-5d9e2bbcc76a422f9b4116b5dbefef9a p6_demo applications {"logo": "data:image/jpeg;base64,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", "name": "5d9e2bbcc76a422f9b4116b5dbefef9a", "appKey": "p6_demo", "status": "6.0.0-alpha-5", "content": "eyJwbGF0Zm9ybTYudmlld3MiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnZpZXdzIiwibmFtZSI6IlRyYW5zYWN0aW9ucyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUcmFuc2FjdGlvbnMgZm9yIHA2X2RlbW9cIixcIkZSXCI6XCJUcmFuc2FjdGlvbnMgcG91ciBwNl9kZW1vXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1NjQsXCJyZXZpc2lvbklkXCI6XCI1Y2ZmMGFkMTQ5ZDJjMzFkNmQyOWNiMGUzZDA3YWJkYVwiLFwidHlwZVwiOlwiVFJBTlNBQ1RJT05TXCIsXCJ4bWxWaWV3XCI6XCI8Vmlldz5cXG4gICAgPFNtYXJ0VGFncz5cXG4gICAgICAgIDxUcmFuc2FjdGlvblR5cGU+VHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZTwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICAgICAgPFRyYW5zYWN0aW9uRm9ybWF0PlRyYW5zYWN0aW9uSW5mby9QaXZvdERvY3VtZW50Rm9ybWF0PC9UcmFuc2FjdGlvbkZvcm1hdD5cXG4gICAgPC9TbWFydFRhZ3M+XFxuICAgIDxEYXRhVHlwZT5UcmFuc2FjdGlvbkluZm88L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPlRyYW5zYWN0aW9uSW5mbzwvRGF0YU1vZGVsPlxcbiAgICA8RGF0YVBhcnRpdGlvbj5UUkFOU0FDVElPTjwvRGF0YVBhcnRpdGlvbj5cXG4gICAgPFJlcHJvY2Vzc1JvdXRlVXJpPmRpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXI8L1JlcHJvY2Vzc1JvdXRlVXJpPlxcbiAgICA8TGlzdE9mS2V5cz5cXG4gICAgICAgIDxLZXk+XFxuICAgICAgICAgICAgPE5hbWU+SWQ8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+SWQ8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+SWQ8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9JZDwvWFBhdGg+XFxuICAgICAgICA8L0tleT5cXG4gICAgPC9MaXN0T2ZLZXlzPlxcbiAgICA8TGlzdE9mU2VhcmNoYWJsZXM+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Mb2FkRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Mb2FkIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBjcsOpYXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9DcmVhdGlvbkRhdGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlJhbmdlT2ZEYXRlcyh5eXl5TU1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlN0YXR1c0RhdGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VGVjaC4gU3RhdHVzIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBtb2RpZi4gU3RhdHV0IFRlY2guPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzRGF0ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+UmFuZ2VPZkRhdGVzKHl5eXlNTWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VHJhbnNhY3Rpb25UeXBlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRyYW5zYWN0aW9uIFR5cGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+VHlwZSBkZSB0cmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICAgICAgPENob2ljZSBmaWVsZC1saW5lLWhlaWdodD1cXFwiMVxcXCIgbXVsdGktc2VsZWN0PVxcXCJ0cnVlXFxcIiBtdWx0aS1zZWxlY3QtZGVsaW1pdGVyPVxcXCJ8XFxcIj5SZXF1ZXN0IGZvciBRdW90YXRpb24sIFF1b3RlLCBQdXJjaGFzZSBPcmRlcjwvQ2hvaWNlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VHJhbnNhY3Rpb25OdW1iZXI8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gTnVtYmVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk51bcOpcm8gZGUgdHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvbk51bWJlcjwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5CdXllck5hbWU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+QnV5ZXIgTmFtZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Ob20gZGUgbCdhY2hldGV1cjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlWy4vS2V5ID0gXFxcIkJ1eWVyIE5hbWVcXFwiXS9WYWx1ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5LZXl3b3JkczwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5LZXl3b3JkczwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Nb3RzIGNsZWZzPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm88L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VGVjaG5pY2FsU3RhdHVzQ29kZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UZWNobmljYWwgU3RhdHVzPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlN0YXR1dCB0ZWNobmlxdWU8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgICAgICA8Q2hvaWNlIGZpZWxkLWxpbmUtaGVpZ2h0PVxcXCIyXFxcIiBtdWx0aS1zZWxlY3Q9XFxcInRydWVcXFwiIG11bHRpLXNlbGVjdC1kZWxpbWl0ZXI9XFxcInxcXFwiPkhhbmRsZWQsUmVjZWl2ZWQsU2VudDwvQ2hvaWNlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+RnVuY3Rpb25hbFN0YXR1c0NvZGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+RnVuY3Rpb25hbCBTdGF0dXM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+U3RhdHV0IGZvbmN0aW9ubmVsPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vRnVuY3Rpb25hbFN0YXR1c0NvZGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgICAgIDxDaG9pY2UgZmllbGQtbGluZS1oZWlnaHQ9XFxcIjJcXFwiIG11bHRpLXNlbGVjdD1cXFwidHJ1ZVxcXCIgbXVsdGktc2VsZWN0LWRlbGltaXRlcj1cXFwifFxcXCI+QWNjZXB0ZWQsRGVjbGluZWQsUXVvdGUgcHJvdmlkZWQsUmVqZWN0ZWQ8L0Nob2ljZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgPC9MaXN0T2ZTZWFyY2hhYmxlcz5cXG4gICAgPExpc3RPZlZpZXdhYmxlcz5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Mb2FkRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Mb2FkIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBjcsOpYXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9DcmVhdGlvbkRhdGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eU1NZGQnVCdISDptbTpzcyk8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlN0YXR1c0RhdGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+U3RhdHVzIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBzdGF0dXQ8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNEYXRlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5EYXRlKHl5eXlNTWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UcmFuc2FjdGlvblR5cGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGRlIHRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlRyYW5zYWN0aW9uTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRyYW5zYWN0aW9uICM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+TsKwIGRlIHRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25OdW1iZXI8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+U2VsbGVyTmFtZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5TZWxsZXIgTmFtZTwvRU4+XFxuICAgICAgICAgICAgICAgICA8RlI+Tm9tIHZlbmRldXI8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9LZXlWYWx1ZVtLZXk9XFxcIlNlbGxlciBOYW1lXFxcIl0vVmFsdWU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+QnV5ZXJOYW1lPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkJ1eWVyIE5hbWU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+Tm9tIGRlIGwnYWNoZXRldXI8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9LZXlWYWx1ZVtLZXk9XFxcIkJ1eWVyIE5hbWVcXFwiXS9WYWx1ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UZWNobmljYWxTdGF0dXNDb2RlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRlY2guIFN0YXR1czwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgdGVjaC48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkZ1bmN0aW9uYWxTdGF0dXNDb2RlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkZ1bmN0LiBTdGF0dXM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+U3RhdHV0IGZvbmN0LjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0Z1bmN0aW9uYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkZ1bmN0LiBTdGF0dXMgTXNnLjwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgRm9uY3QuIE1zZy48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Eb2N1bWVudDwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Eb2N1bWVudDwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5BY2PDqHMgZG9jLjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RhcmdldERvY3VtZW50VVJJPC9YUGF0aD5cXG4gICAgICAgICAgICAgPFR5cGU+VVJJPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIFxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgIDxOYW1lPml0ZW1MaW5rPC9OYW1lPlxcbiAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8RU4+V29yayBJdGVtPC9FTj5cXG4gICAgICAgICAgICA8RlI+VHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9Xb3JrZmxvdy9JbnN0YW5jZS9mbGluazwvWFBhdGg+XFxuICAgICAgICAgPFR5cGU+SXRlbUxpbms8L1R5cGU+XFxuICAgICAgPC9WaWV3YWJsZT5cXG4gICAgPC9MaXN0T2ZWaWV3YWJsZXM+XFxuPC9WaWV3PlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODU2NCwibWluRXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiIsIm1heEV4dHJhU2VydmljZVZlcnNpb24iOiIifSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnZpZXdzIiwibmFtZSI6IldvcmtmbG93IFRhc2tzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiV29ya2Zsb3cgVGFza3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiV29ya2Zsb3cgVGFza3MgZm9yIHA2X2RlbW9cIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODU3OCxcInJldmlzaW9uSWRcIjpcIjIwZjYxMWViODYzNTNiN2E3OTdkZDZjZjc2ZDZkYTEzXCIsXCJ0eXBlXCI6XCJXT1JLSVRFTVNcIixcInhtbFZpZXdcIjpcIjxWaWV3PlxcbiAgICA8U21hcnRUYWdzLz5cXG4gICAgPERhdGFUeXBlPldvcmtmbG93VGFzazwvRGF0YVR5cGU+XFxuICAgIDxEYXRhTW9kZWw+V29ya2Zsb3dUYXNrPC9EYXRhTW9kZWw+XFxuICAgIDxEYXRhUGFydGl0aW9uPlRSQU5TQUNUSU9OPC9EYXRhUGFydGl0aW9uPlxcbiAgICA8UmVwcm9jZXNzUm91dGVVcmkvPlxcbiAgICA8TGlzdE9mS2V5cz5cXG4gICAgICAgIDxLZXk+XFxuICAgICAgICAgICAgPE5hbWU+SWQ8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+SWQ8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+SWQ8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPldvcmtmbG93VGFzay9pZDwvWFBhdGg+XFxuICAgICAgICA8L0tleT5cXG4gICAgPC9MaXN0T2ZLZXlzPlxcbiAgICA8TGlzdE9mU2VhcmNoYWJsZXM+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Eb2MuIFR5cGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+RG9jLiBUeXBlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlR5cGUgZHUgRG9jPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJUcmFuc2FjdGlvblR5cGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+RG9jLiBOdW1iZXI8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+RG9jLiBOdW1iZXI8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+TsKwIGR1IERvYzwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25OdW1iZXJcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+QXNzaWduZWU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+QXNzaWduZWU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGVzdGluYXRhaXJlPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svYXNzaWduZWVzL2Fzc2lnbmVlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5Jbkxpc3Q8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgIDwvTGlzdE9mU2VhcmNoYWJsZXM+XFxuICAgIDxMaXN0T2ZWaWV3YWJsZXM+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+V0ZTdGFydERhdGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+V0YuIFN0YXJ0IERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBkw6lidXQ8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPldvcmtmbG93VGFzay9pdGVtQXR0cmlidXRlc1trZXk9XFxcIlN0YXJ0RGF0ZVxcXCJdL3ZhbHVlcy9fdGV4dDwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+RGF0ZSh5eXl5LU1NLWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgPE5hbWU+RG9jVHlwZTwvTmFtZT5cXG4gICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICA8RU4+RG9jLiBUeXBlPC9FTj5cXG4gICAgICAgICAgICAgPEZSPlR5cGU8L0ZSPlxcbiAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICA8WFBhdGg+L1dvcmtmbG93VGFzay9pdGVtQXR0cmlidXRlc1trZXk9XFxcIlRyYW5zYWN0aW9uVHlwZVxcXCJdL3ZhbHVlcy9fdGV4dDwvWFBhdGg+XFxuICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICA8TmFtZT5Eb2NOdW1iZXI8L05hbWU+XFxuICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgPEVOPkRvYy4gTnVtYmVyPC9FTj5cXG4gICAgICAgICAgICAgPEZSPk7CsCBkb2MuPC9GUj5cXG4gICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPFhQYXRoPi9Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJUcmFuc2FjdGlvbk51bWJlclxcXCJdL3ZhbHVlcy9fdGV4dDwvWFBhdGg+XFxuICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIFxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPml0ZW1MaW5rPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRyYW5zYWN0aW9uPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svZmxpbms8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkl0ZW1MaW5rPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Xb3JrZmxvd1N0ZXA8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+V0YuIEFjdGlvbnM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+QWN0aW9ucyBXRi48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPldvcmtmbG93VGFzay9zdGVwL1dvcmtmbG93U3RlcDwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+V29ya2Zsb3dTdGVwPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgPC9MaXN0T2ZWaWV3YWJsZXM+XFxuPC9WaWV3PlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODU3OCwibWluRXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiIsIm1heEV4dHJhU2VydmljZVZlcnNpb24iOiIifV0sInBsYXRmb3JtNi5yb3V0ZXMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJSb3V0aW5nUnVsZURpc3BhdGNoZXIiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSb3V0aW5nUnVsZURpc3BhdGNoZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGlzcGF0Y2hlciB0byBSRlEsIFF1b3RlIG9yIFBPIFJvdXRpbmcgUnVsZXNcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODAwMyxcInJldmlzaW9uSWRcIjpcImYwNTAzNTcwNjRiYjJlZmFlODU0N2ZlZmRmM2JmNmQ0XCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJjYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG4gICAgdm9pZCBjb25maWd1cmUoKSB7XFxuICAgICAgICBmcm9tKCdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPSdSZXF1ZXN0IEZvciBRdW90YXRpb24nXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAudG8oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1JlcXVlc3RGb3JRdW90YXRpb24nKVxcbiAgICAgICAgICAgICAgICAud2hlbih4cGF0aChcXFwiL1RyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvblR5cGU9J1F1b3RlJ1xcXCIpKVxcbiAgICAgICAgICAgICAgICAgICAgLnRvKCdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19RdW90ZScpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZT0nUHVyY2hhc2UgT3JkZXInXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAudG8oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1B1cmNoYXNlT3JkZXInKVxcbiAgICAgICAgICAgICAgICAub3RoZXJ3aXNlKClcXG4gICAgICAgICAgICAgICAgICAgIC50aHJvd0V4Y2VwdGlvbihjb20uYW1hbHRvLmIyYm94LmNvcmUuYXBpLkIyYm94RXhjZXB0aW9uLCdObyBtYXRjaGluZyBydWxlIGZvdW5kIGZvciBpdGVtIScpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoXFxcInA2X2RlbW8gUm91dGluZyBSdWxlcyBEaXNwYXRjaGVyXFxcIilcXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gUm91dGluZyBSdWxlcyBEaXNwYXRjaGVyXFxcIilcXG4gICAgfVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJ4bWxfcm91dGluZ1wiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTgwMDMsIm1pbkV4dHJhU2VydmljZVZlcnNpb24iOiIiLCJtYXhFeHRyYVNlcnZpY2VWZXJzaW9uIjoiIn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5yb3V0ZXMiLCJuYW1lIjoiU2NoZWR1bGVyRm9yUkZRQ3JlYXRpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJTY2hlZHVsZXJGb3JSRlFDcmVhdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJTY2hlZHVsZWQgY3JlYXRpb24gb2YgUmVxdWVzdHMgZm9yIFF1b3RhdGlvblwifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYzMTk3Nzg5Nzk4LFwicmV2aXNpb25JZFwiOlwiZmZjNjEwODExMzQ1NjNkZDgzMmVhMDEyNDU3Yzg4ZjVcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcImRlZiByb3V0ZUlkID0gXFxcInA2X2RlbW8gU2NoZWR1bGVkIGNyZWF0aW9uIG9mIFJGUXNcXFwiXFxuXFxudHJ5IHtcXG4gICAgY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuICAgICAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgICAgICBmcm9tKFxcXCJ0aW1lcjovL215VGltZXI/cGVyaW9kPTEwbVxcXCIpXFxuICAgICAgICAgICAgICAgIC50bygncDZjbWI6Ly9zY3JpcHRzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1leGVjdXRlJmlkPXA2X2RlbW8uQ3JlYXRlUkZRVHJhbnNhY3Rpb24nKVxcbiAgICAgICAgICAgICAgICAucm91dGVJZChyb3V0ZUlkKVxcbiAgICAgICAgICAgICAgICAuZGVzY3JpcHRpb24ocm91dGVJZClcXG4gICAgICAgIH1cXG4gICAgfSlcXG5cXG4gICAgcGF1c2UoKVxcbn0gZmluYWxseSB7XFxuICBjYW1lbC5kZXN0cm95Um91dGUocm91dGVJZClcXG59XFxuXCIsXCJ0eXBlXCI6XCJzY2hlZHVsZXJcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYzMTk3Nzg5Nzk4LCJtaW5FeHRyYVNlcnZpY2VWZXJzaW9uIjoiIiwibWF4RXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlJvdXRpbmdSdWxlc0ZvclB1cmNoYXNlT3JkZXJzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUm91dGluZ1J1bGVzRm9yUHVyY2hhc2VPcmRlcnNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1Nzg5OTM3MTAsXCJyZXZpc2lvbklkXCI6XCI3ZDhlM2I4ZmM0ZDk0ZmFiMmExNGJlOGY5NzBkYmJiY1wiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwiY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuXFxuICAgIHZvaWQgY29uZmlndXJlKCkge1xcblxcbiAgICAgICAgZnJvbSgnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUHVyY2hhc2VPcmRlcicpXFxuICAgICAgICAgICAgLmNob2ljZSgpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0NvZGU9J1JlY2VpdmVkJ1xcXCIpKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwicGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uXFxcIikuY29uc3RhbnQoXFxcImludm9rZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGF0dXNcXFwiKS5jb25zdGFudChcXFwiUmVjZWl2ZWRcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwic3RlcFxcXCIpLmNvbnN0YW50KFxcXCJIYW5kbGVQdXJjaGFzZU9yZGVyXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcImFwcGtleVxcXCIpLmNvbnN0YW50KFxcXCJwNl9kZW1vXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcImZsb3duYW1lXFxcIikuY29uc3RhbnQoXFxcIlVVSURcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwic2NyaXB0XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW8uV0ZTdGVwQnVpbGRlclxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAudG8oXFxcInA2cm91dGU6Ly9wbGF0Zm9ybTYud29ya2Zsb3dzdGVwc1xcXCIpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzJylcXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzXFxcIilcXG4gICAgfVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJ4bWxfcm91dGluZ1wiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjE1Nzg5OTM3MTAsIm1pbkV4dHJhU2VydmljZVZlcnNpb24iOiIiLCJtYXhFeHRyYVNlcnZpY2VWZXJzaW9uIjoiIn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5yb3V0ZXMiLCJuYW1lIjoiU2NoZWR1bGVyRm9yQ291bnRlcnNSZWZyZXNoIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiU2NoZWR1bGVyRm9yQ291bnRlcnNSZWZyZXNoXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlNjaGVkdWxlZCByZWZyZXNoIG9mIHRoZSBDb3VudGVyc1wiLFwiRlJcIjpcIkFjdHVhbGlzYXRpb24gcGxhbmlmacOpZSBkZXMgY29tcHRldXJzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTgwMjgsXCJyZXZpc2lvbklkXCI6XCIzOWRhMTk2Y2Q0Y2Q1MzhiMmIyZTVlMTUxZTRkZDhlNlwiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwiY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuXFx0ZGVmIHZvaWQgY29uZmlndXJlKCkge1xcblxcdFxcdGZyb20oXFxcInF1YXJ0ejI6Ly9wbGF0Zm9ybTYvcDZyb3V0ZV9Db3VudF9SRlFzP2Nyb249MCsxKyorKisqKz8rKlxcXCIpXFxuXFx0XFx0XFx0LnRvKCdwNmNtYjovL2NvdW50ZXJzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1zeW5jaHJvbml6ZSZpZD1wNl9kZW1vLkNvdW50UkZRcycpXFxuXFx0XFx0XFx0LnJvdXRlSWQoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFJGUXMnKVxcblxcdFxcdFxcdC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRSRlFzIGNvdW50ZXJcXFwiKVxcblxcblxcdFxcdGZyb20oXFxcInF1YXJ0ejI6Ly9wbGF0Zm9ybTYvcDZyb3V0ZV9Db3VudF9RdW90ZXM/Y3Jvbj0wKzIrKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRRdW90ZXMnKVxcblxcdFxcdFxcdC5yb3V0ZUlkKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRRdW90ZXMnKVxcblxcdFxcdFxcdC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRRdW90ZXMgY291bnRlclxcXCIpXFxuXFxuICAgICAgICBmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfUE9zX0FjY2VwdGVkP2Nyb249MCszKyorKisqKz8rKlxcXCIpXFxuXFx0XFx0XFx0LnRvKCdwNmNtYjovL2NvdW50ZXJzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1zeW5jaHJvbml6ZSZpZD1wNl9kZW1vLkNvdW50QWNjZXB0ZWRQT3MnKVxcblxcdFxcdFxcdC5yb3V0ZUlkKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRBY2NlcHRlZFBPcycpXFxuXFx0XFx0XFx0LmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFNjaGVkdWxlZCByZWZyZXNoIG9mIHRoZSBDb3VudEFjY2VwdGVkUE9zIGNvdW50ZXJcXFwiKVxcblxcbiAgICAgICAgZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X1BPc19SZWplY3RlZD9jcm9uPTArNCsqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudFJlamVjdGVkUE9zJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50UmVqZWN0ZWRQT3MnKVxcblxcdFxcdFxcdC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRSZWplY3RlZFBPcyBjb3VudGVyXFxcIilcXG5cXG5cXHRcXHRmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfRmFpbGVkUm91dGluZ09yZGVycz9jcm9uPTArMC8xNSsqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudEZhaWxlZFJvdXRpbmdPcmRlcnMnKVxcblxcdFxcdFxcdC5yb3V0ZUlkKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50RmFpbGVkUm91dGluZ09yZGVycyBjb3VudGVyXFxcIilcXG5cXHR9XFxufSlcXG5cIixcInR5cGVcIjpcInNjaGVkdWxlclwiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTgwMjgsIm1pbkV4dHJhU2VydmljZVZlcnNpb24iOiIiLCJtYXhFeHRyYVNlcnZpY2VWZXJzaW9uIjoiIn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5yb3V0ZXMiLCJuYW1lIjoiQmxvY2tjaGFpbkV2ZW50SGFuZGxlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkJsb2NrY2hhaW5FdmVudEhhbmRsZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQmxvY2tjaGFpbiBFdmVudCBIYW5kbGVyXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjMxOTg0MjI1NDgsXCJyZXZpc2lvbklkXCI6XCI3NWE1MTE3NjI3NTFiOTdlNDg1M2MwNGY3NjA2ZTA0YVwiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwiZGVmIGV0aENsaWVudFVSTCA9IGFwcGNvbmZpZy5nZXQoJ3A2X2RlbW8nLCAnZXRoQ2xpZW50VVJMJylcXG5kZWYgY29udHJhY3RBZGRyZXNzID0gIGFwcGNvbmZpZy5nZXQoJ3A2X2RlbW8nLCAnY29udHJhY3RBZGRyZXNzJylcXG5cXG5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG4gICAgdm9pZCBjb25maWd1cmUoKSB7XFxuICAgICAgICBmcm9tKFxcXCJ3ZWIzajovL1xcXCIgKyBldGhDbGllbnRVUkwgKyBcXFwiP2FkZHJlc3M9XFxcIiArIGNvbnRyYWN0QWRkcmVzcyArIFxcXCImb3BlcmF0aW9uPUVUSF9MT0dfRkxPV0FCTEVcXFwiKVxcbiAgICAgICAgICAgIC50byhcXFwicDZjbWI6Ly9zY3JpcHRzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1leGVjdXRlJmlkPXA2X2RlbW8uQmxvY2tjaGFpbkV2ZW50SGFuZGxlclxcXCIpXFxuICAgICAgICAgICAgLnJvdXRlSWQoXFxcInA2X2RlbW8gV2ViM2ogLSBCbG9ja2NoYWluRXZlbnRIYW5kbGVyXFxcIilcXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gQmxvY2tjaGFpbiBFdmVudCBIYW5kbGVyXFxcIilcXG4gICAgfVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJ3ZWIzalwiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjMxOTg0MjI1NDgsIm1pbkV4dHJhU2VydmljZVZlcnNpb24iOiIiLCJtYXhFeHRyYVNlcnZpY2VWZXJzaW9uIjoiIn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5yb3V0ZXMiLCJuYW1lIjoiUm91dGluZ1J1bGVzRm9yUkZRcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJvdXRpbmdSdWxlc0ZvclJGUXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnNcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTU3ODk5Mzc1MyxcInJldmlzaW9uSWRcIjpcIjY5NDg1ZGFmYmIyZGVlYzQ4YTc2ZmI5MGM4ZTdmNGVkXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJjYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG5cXG4gICAgdm9pZCBjb25maWd1cmUoKSB7XFxuICAgICAgICBmcm9tKCdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19SZXF1ZXN0Rm9yUXVvdGF0aW9uJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzQ29kZT0nUmVjZWl2ZWQnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJwbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb25cXFwiKS5jb25zdGFudChcXFwiaW52b2tlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcInN0YXR1c1xcXCIpLmNvbnN0YW50KFxcXCJSZWNlaXZlZFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGVwXFxcIikuY29uc3RhbnQoXFxcIkhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb25cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiYXBwa2V5XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiZmxvd25hbWVcXFwiKS5jb25zdGFudChcXFwiVVVJRFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzY3JpcHRcXFwiKS5jb25zdGFudChcXFwicDZfZGVtby5XRlN0ZXBCdWlsZGVyXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC50byhcXFwicDZyb3V0ZTovL3BsYXRmb3JtNi53b3JrZmxvd3N0ZXBzXFxcIilcXG4gICAgICAgICAgICAgICAgLm90aGVyd2lzZSgpXFxuICAgICAgICAgICAgICAgICAgICAudGhyb3dFeGNlcHRpb24oY29tLmFtYWx0by5iMmJveC5jb3JlLmFwaS5CMmJveEV4Y2VwdGlvbiwnTm8gbWF0Y2hpbmcgcnVsZSBmb3VuZCBmb3IgaXRlbSEnKVxcbiAgICAgICAgICAgIC5lbmQoKVxcbiAgICAgICAgICAgIC5yb3V0ZUlkKFxcXCJwNl9kZW1vIFJvdXRpbmcgcnVsZXMgZm9yIFJlcXVlc3RGb3JRdW90YXRpb25zXFxcIilcXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnNcXFwiKVxcbiAgICB9XFxufSlcXG5cIixcInR5cGVcIjpcInhtbF9yb3V0aW5nXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTU3ODk5Mzc1MywibWluRXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiIsIm1heEV4dHJhU2VydmljZVZlcnNpb24iOiIifSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJSb3V0aW5nUnVsZXNGb3JRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSb3V0aW5nUnVsZXNGb3JRdW90ZXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUXVvdGVzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDcyNDc4MDcsXCJyZXZpc2lvbklkXCI6XCI0ZGUzY2RmZGJlMTJkZDVmMzIzZmViY2FhZjY5ZDA0ZVwiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwiY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuICAgIFxcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1F1b3RlJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzQ29kZT0nQ3JlYXRlZCdcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoICdwbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb24nKS5jb25zdGFudCgnZXhlY3V0ZScpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJhcHBrZXlcXFwiKS5jb25zdGFudChcXFwicDZfZGVtb1xcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKCdpZCcpLmNvbnN0YW50KCdwNl9kZW1vLlNlbmRRdW90ZVRvQmxvY2tjaGFpbicpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0UHJvcGVydHkoJ2V4ZWN1dGUuYXN5bmMnKS5jb25zdGFudCh0cnVlKVxcbiAgICAgICAgICAgICAgICAgICAgLnRvKFxcXCJwNnJvdXRlOi8vcGxhdGZvcm02LnNjcmlwdHNcXFwiKVxcbiAgICAgICAgICAgICAgICAub3RoZXJ3aXNlKClcXG4gICAgICAgICAgICAgICAgICAgIC50aHJvd0V4Y2VwdGlvbihjb20uYW1hbHRvLmIyYm94LmNvcmUuYXBpLkIyYm94RXhjZXB0aW9uLCdObyBtYXRjaGluZyBydWxlIGZvdW5kIGZvciBpdGVtIScpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUXVvdGVzJylcXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUXVvdGVzXFxcIilcXG4gICAgfVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJ4bWxfcm91dGluZ1wiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjE2NDcyNDc4MDcsIm1pbkV4dHJhU2VydmljZVZlcnNpb24iOiIiLCJtYXhFeHRyYVNlcnZpY2VWZXJzaW9uIjoiIn1dLCJwbGF0Zm9ybTYudGFibGVzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi50YWJsZXMiLCJuYW1lIjoiSXRlbXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJJdGVtc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJJdGVtc1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODU0NSxcInJldmlzaW9uSWRcIjpcIjk1MjUxOTI4YTdlMTZlMTI5MTlkMjhmNzdjMDc2NTQ4XCIsXCJmaWVsZHNcIjpbe1wibmFtZVwiOlwiSWRcIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH0se1wibmFtZVwiOlwiRGVzY3JpcHRpb25cIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH0se1wibmFtZVwiOlwiVW5pdFByaWNlXCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcIkN1cnJlbmN5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcIlVPTVwiLFwidHlwZVwiOlwic3RyaW5nXCIsXCJsZW5ndGhcIjotMS4wfSx7XCJuYW1lXCI6XCJDYXRlZ29yeVwiLFwidHlwZVwiOlwic3RyaW5nXCIsXCJsZW5ndGhcIjotMS4wfV0sXCJrZXlzXCI6W1wiSWRcIl19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4NTQ1LCJtaW5FeHRyYVNlcnZpY2VWZXJzaW9uIjoiIiwibWF4RXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYudGFibGVzIiwibmFtZSI6IkFwcENvbmZpZyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkFwcENvbmZpZ1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJBcHBsaWNhdGlvbiBDb25maWd1cmF0aW9uIFRhYmxlXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4NTMzLFwicmV2aXNpb25JZFwiOlwiZjU5OTMxYzQzZDdiOWQ1Nzk3MTc4MjEzYWI5NDEwNWRcIixcImZpZWxkc1wiOlt7XCJuYW1lXCI6XCJrZXlcIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH0se1wibmFtZVwiOlwidmFsdWVcIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH0se1wibmFtZVwiOlwidHlwZVwiLFwidHlwZVwiOlwic3RyaW5nXCIsXCJsZW5ndGhcIjotMS4wfV0sXCJrZXlzXCI6W1wia2V5XCJdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODUzMywibWluRXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiIsIm1heEV4dHJhU2VydmljZVZlcnNpb24iOiIifV0sInBsYXRmb3JtNi5zY3JpcHRzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlZpZXdfV29ya2Zsb3cgVGFza3MiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJWaWV3X1dvcmtmbG93IFRhc2tzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlByb3ZpZGUgaHRtbCBkaXNwbGF5IG9mIFdvcmtmbG93IFRhc2tzXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MjE5LFwicmV2aXNpb25JZFwiOlwiMjlmZjEzOGNjM2E5Yjk5N2YxNWQ1MDFlM2Y5Y2U3OTRcIixcIm1haW5TY3JpcHRcIjpcImRlZiByZXN1bHRzID0gcDYueHNsdC5wcm9jZXNzKFxcXCJWaWV3X1dvcmtsb3cgVGFza3NcXFwiLCBwNi5yZXNvdXJjZS5nZXQoJ1dvcmtmbG93X1Rhc2tfdG9fSFRNTCcpLCBwNi5waXBlbGluZS5nZXQoICd4bWwnKSlcXG5cXG5wNi5waXBlbGluZS5wdXQgJ3BvcnRhbEh0bWwnLCByZXN1bHRzLCAndGV4dC9odG1sJ1xcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbe1wibmFtZVwiOlwiV29ya2Zsb3dfVGFza190b19IVE1MXCIsXCJ0eXBlXCI6XCJYU0xUXCIsXCJjb250ZW50XCI6XCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiIGVuY29kaW5nPVxcXCJVVEYtOFxcXCI/Plxcbjx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9XFxcImh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybVxcXCIgdmVyc2lvbj1cXFwiMi4wXFxcIj5cXG4gICAgPHhzbDpvdXRwdXQgbWV0aG9kPVxcXCJodG1sXFxcIiBpbmRlbnQ9XFxcInllc1xcXCIgb21pdC14bWwtZGVjbGFyYXRpb249XFxcInllc1xcXCIgLz5cXG4gICAgXFxuICAgIDx4c2w6dGVtcGxhdGUgbWF0Y2g9XFxcIi9Xb3JrZmxvd1Rhc2tcXFwiPlxcblxcblxcblxcdFxcdDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12aWV3LXdyYXBwZXJcXFwiPlxcblxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiB0ZXh0LW1lZGl1bVxcXCIgc3R5bGU9XFxcIm1hcmdpbi1ib3R0b206IDVweDtcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicmlnaHQtc3BhY2VkXFxcIj48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdUcmFuc2FjdGlvblR5cGUnXS92YWx1ZXMvX3RleHRcXFwiLz48eHNsOnRleHQ+ICMgPC94c2w6dGV4dD48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdUcmFuc2FjdGlvbk51bWJlciddL3ZhbHVlcy9fdGV4dFxcXCIvPjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiB0ZXh0LW1lZGl1bVxcXCIgc3R5bGU9XFxcIm1hcmdpbi1ib3R0b206IDVweDtcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicmlnaHQtc3BhY2VkXFxcIj5Bc3NpZ25lZCB0bzo8L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cXFwiI1xcXCIgZGF0YS10b2dnbGU9XFxcIm1vZGFsXFxcIiBkYXRhLXRhcmdldD1cXFwiI2Fzc2lnbmVlc0RpYWxvZ1xcXCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9XFxcIml0ZW1BdHRyaWJ1dGVzW2tleT0nQXNzaWduZWRUbyddL3ZhbHVlcy9FTlxcXCIvPjwvYT5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLWxnLTRcXFwiPlxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhdHVzPC9kaXY+XFxuXFx0ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9XFxcIml0ZW1BdHRyaWJ1dGVzW2tleT0nU3RhdHVzJ10vdmFsdWVzL0VOXFxcIi8+PC9kaXY+XFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxuXFxuXFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLWxnLTRcXFwiPlxcblxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhcnQgZGF0ZTwvZGl2PlxcblxcdCAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J1N0YXJ0RGF0ZSddL3ZhbHVlcy9fdGV4dFxcXCIvPjwvZGl2PlxcblxcdFxcdFxcdFxcdDwvZGl2PlxcblxcdFxcdFxcdDwvZGl2PlxcblxcdFxcdDwvZGl2PlxcbiAgICAgICAgXFxuICAgICAgICA8ZGl2IGlkPVxcXCJhc3NpZ25lZXNEaWFsb2dcXFwiIGNsYXNzPVxcXCJtb2RhbCBmYWRlXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1kaWFsb2dcXFwiPlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1jb250ZW50XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWhlYWRlclxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIGNsYXNzPVxcXCJjbG9zZVxcXCIgZGF0YS1kaXNtaXNzPVxcXCJtb2RhbFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiYjMjE1Ozwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XFxcIm1vZGFsLXRpdGxlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+QXNzaWduZWQgdG86PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdBc3NpZ25lZFRvJ10vdmFsdWVzL0VOXFxcIi8+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oND5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtYm9keVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVxcXCJiYXNpYy1saXN0IG5vLWJvdHRvbS1tYXJnaW5cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOmZvci1lYWNoIHNlbGVjdD1cXFwiYXNzaWduZWVzL2Fzc2lnbmVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiLlxcXCIvPjwvbGk+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmZvci1lYWNoPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG5cXHQ8L3hzbDp0ZW1wbGF0ZT5cXG5cXG48L3hzbDpzdHlsZXNoZWV0PlwiLFwiY29tcGlsZWRDb250ZW50XCI6bnVsbCxcImJ5dGVDb250ZW50XCI6bnVsbH1dfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODIxOSwibWluRXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiIsIm1heEV4dHJhU2VydmljZVZlcnNpb24iOiIifSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZTdGVwQnVpbGRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGU3RlcEJ1aWxkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiV29ya2Zsb3cgU3RlcCBCdWlsZGVyXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxNjQ1MTIyMjc3LFwicmV2aXNpb25JZFwiOlwiZThiYzRjZmQ1NjA4YjQ2MWJmOGVmMzgxOTFkYzIwN2FcIixcIm1haW5TY3JpcHRcIjpcInA2LnBpcGVsaW5lLnZhcmlhYmxlcygpLmVhY2goKSB7IGxvZy5kZWJ1ZyBcXFwiUElQRUxJTkUgVkFSICR7aXR9XFxcIiB9XFxuXFxuZGVmIHdvcmtmbG93U3RlcCA9IHA2LnBpcGVsaW5lLmdldFhtbCAndGVtcGxhdGVTdGVwWG1sJ1xcblxcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIGl0ZW1JZHMgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG5kZWYgaXRlbVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgaXRlbUlkcylcXG5cXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmV4aXN0cyhpdGVtUGspXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoKVxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBzbHVycGVyLnBhcnNlVGV4dCh0cmFuc2FjdGlvbkluZm9Db250ZW50KVxcblxcbi8vZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHBpcGVsaW5lLmdldFhtbCAnX0RFRkFVTFRfJ1xcblxcblxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qICBBREQgT05FIFBBUkFNRVRFUiBCWSBMSU5FIFRPIEFDVElPTiAgICovXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuXFxuZGVmIG15QWN0aW9uID0gd29ya2Zsb3dTdGVwLkFjdGlvbnMuQWN0aW9uLmZpbmR7aXQuQGlkID0gJ3NlbmQnfVxcblxcbmludCBuYkxpbmVzID0gSW50ZWdlci5wYXJzZUludCh0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gJ0xpbmUgaXRlbXMnfS5WYWx1ZS50ZXh0KCkpXFxuXFxuZGVmIHN0ZXBYbWwgPSBncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKCB3b3JrZmxvd1N0ZXAgKVxcblxcbnA2LnBpcGVsaW5lLnB1dCAnc3RlcFhtbCcsIHN0ZXBYbWxcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNjQ1MTIyMjc3LCJtaW5FeHRyYVNlcnZpY2VWZXJzaW9uIjoiIiwibWF4RXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRldvcmtJdGVtRW5oYW5jZXIiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRldvcmtJdGVtRW5oYW5jZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiV0ZfV29ya0l0ZW1FbmhhbmNlclwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTY0NTEyMjM4MixcInJldmlzaW9uSWRcIjpcImE0OTJhODMxMzhmZTI0NDc1MDE1NTMzNGQ5ODA0MGViXCIsXCJtYWluU2NyaXB0XCI6XCJkZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpZHMgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG5kZWYgaXBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgaWRzKVxcbmRlZiBpdGVtID0gcDYudHJhbnNhY3Rpb24uZ2V0KGlwaylcXG5cXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gbmV3IFhtbFNsdXJwZXIoKS5wYXJzZVRleHQoaXRlbSlcXG5cXG5kZWYgdHJhbnNhY3Rpb25OdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uVHJhbnNhY3Rpb25OdW1iZXIudGV4dCgpXFxucDYucGlwZWxpbmUucHV0ICdUcmFuc2FjdGlvbk51bWJlcicsIHRyYW5zYWN0aW9uTnVtYmVyLCAndGV4dC9wbGFpbidcXG5cXG5kZWYgdHJhbnNhY3Rpb25UeXBlID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uVHlwZS50ZXh0KClcXG5wNi5waXBlbGluZS5wdXQgJ1RyYW5zYWN0aW9uVHlwZScsIHRyYW5zYWN0aW9uVHlwZSwgJ3RleHQvcGxhaW4nXFxuXFxuZGVmIGVuZHBvaW50ID0gdHJhbnNhY3Rpb25JbmZvLkVuZHBvaW50LnRleHQoKVxcbnA2LnBpcGVsaW5lLnB1dCAnRW5kcG9pbnQnLCBlbmRwb2ludCwgJ3RleHQvcGxhaW4nXFxuXFxuLy8gQWRkIGNvbW1vbiB3b3JrIGl0ZW0gYXR0cmlidXRlcyByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQgYjJib3ggJ1dvcmsgSXRlbXMnIHZpZXdcXG5kZWYgc3RlcFhtbCA9IHA2LnBpcGVsaW5lLmdldCAnX3dmX3N0ZXBYbWwnXFxuZGVmIHN0YXR1c01hcCA9IHA2LndvcmtmbG93LmxvY2FsZVRleHQgc3RlcFhtbCwgXFxcIlN0YXR1c0xhYmVscy9MYWJlbFtAbmFtZT0nXFxcIiArIHA2LnBpcGVsaW5lLmdldCgnX3dmX3N0YXR1c0lkJykgKyBcXFwiJ11cXFwiXFxucDYucGlwZWxpbmUucHV0ICdTdGF0dXMnLCBzdGF0dXNNYXAsICdhcHBsaWNhdGlvbi9iMmJveC5pMThuJ1xcblxcbmRlZiBhc3NpZ25lZU1hcCA9IHdvcmtmbG93LmxvY2FsZVRleHQgc3RlcFhtbCwgJ0Fzc2lnbmVlL0xhYmVsJ1xcbnA2LnBpcGVsaW5lLnB1dCAnQXNzaWduZWRUbycsIGFzc2lnbmVlTWFwLCAnYXBwbGljYXRpb24vYjJib3guaTE4bidcXG5wNi5waXBlbGluZS5wdXQgJ19BU1NJR05FRFRPTkFNRScsIHBpcGVsaW5lLmdldCgnX3dmX2Fzc2lnbmVkVG9JZCcpLCAndGV4dC9wbGFpbidcXG5wNi5waXBlbGluZS5wdXQgJ1N0YXJ0RGF0ZScsIHA2LnBpcGVsaW5lLmdldCgnX3dmX2luc3RhbmNlU3RhcnREYXRlJyksICd0ZXh0L3BsYWluJ1xcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjE2NDUxMjIzODIsIm1pbkV4dHJhU2VydmljZVZlcnNpb24iOiIiLCJtYXhFeHRyYVNlcnZpY2VWZXJzaW9uIjoiIn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IkluaXRpYWxpemVBcHBsaWNhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkluaXRpYWxpemVBcHBsaWNhdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEZXBsb3kgQnVuZGxlZCBSZXNvdXJjZXMgYW5kIGluaXRpYWxpemUgVGFibGVzXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxNTc1NTQwMjIxLFwicmV2aXNpb25JZFwiOlwiM2ExNjg2MGEwNzg0YzU5MjhjNThhYWI3M2QxYmFkYzBcIixcIm1haW5TY3JpcHRcIjpcIi8vIFRoaXMgc2NyaXB0IGlzIGxhdW5jaGVkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIGluc3RhbGxlZCBvbiB0aGUgaW5zdGFuY2VcXG5cXG5cXG5pbXBvcnQgaW8ucGxhdGZvcm02LmRlbW8uc2MuUmVxdWVzdEZvclF1b3RhdGlvbnNcXG5cXG5pbXBvcnQgb3JnLndlYjNqLnR4LipcXG5pbXBvcnQgb3JnLndlYjNqLnR4LnJlc3BvbnNlLlBvbGxpbmdUcmFuc2FjdGlvblJlY2VpcHRQcm9jZXNzb3JcXG5cXG5cXG4vLyBEZXBsb3kgKGNvcHkgdG8gbG9jYWwgZmlsZSBzeXN0ZW0pIGJ1bmRsZWQgcmVzb3VyY2VzXFxucDYuYnVuZGxlZC5kZXBsb3koJ3A2X2RlbW8uRGVtb1NtYXJ0Q29udHJhY3QnKVxcbnA2LmJ1bmRsZWQuZGVwbG95KCdwNl9kZW1vLlBPUmV2aWV3JylcXG5wNi5idW5kbGVkLmRlcGxveSgncDZfZGVtby5UYWJsZUl0ZW1zRGF0YScpXFxubG9nLmRlYnVnICdMb2FkZWQgYnVuZGxlZCByZXNvdXJjZXMnXFxuXFxuLy8gUG9wdWxhdGUgdGhlIEl0ZW1zIHRhYmxlIGZyb20gdGhlIHByb3ZpZGVkIENTViBmaWxlXFxuU3RyaW5nIFA2X1RNUCA9IFN5c3RlbS5nZXRlbnYoJ0IyQk9YX1RNUCcpXFxuZGVmIGNzdkZpbGUgPSBbIHNraXBMaW5lczogMCwgc2VwYXJhdG9yOiAnLCcsIHVzZUZpcnN0TGluZUhlYWRlcnM6IHRydWUsIHVyaTogXFxcImZpbGU6Ly8vJFA2X1RNUC9wNl9kZW1vX2l0ZW1zLmNzdlxcXCIgXVxcblxcbnA2LmNzdi5wYXJzZShjc3ZGaWxlKSB7IHJvdyAtPlxcbiAgICBkZWYgcmVjb3JkcyA9IG5ldyBBcnJheUxpc3QoKVxcbiAgICByZWNvcmRzWzBdID0gcm93XFxuICAgIHRhYmxlLnVwc2VydFJlY29yZHMoJ3A2X2RlbW8uSXRlbXMnLCByZWNvcmRzKVxcbiAgICB0cnVlXFxufVxcbmxvZy5kZWJ1ZyAnUG9wdWxhdGVkIHRoZSBJdGVtcyB0YWJsZSBmcm9tIHRoZSBDU1YgZmlsZSdcXG5cXG4vLyBTYXZlIHdhbGxldCB0byBpbnRlcmFjdCB3aXRoIHNtYXJ0IGNvbnRyYWN0XFxucDYuYXBwY29uZmlnLnNhdmUoXFxcInA2X2RlbW9cXFwiLCBbXFxuICAgICdkZW1vV2FsbGV0JzogJ3tcXFwiYWRkcmVzc1xcXCI6XFxcIjYyNzMwNjA5MGFiYWIzYTZlMTQwMGU5MzQ1YmM2MGM3OGE4YmVmNTdcXFwiLFxcXCJpZFxcXCI6XFxcImM5MTM4NjdmLWU1ZTQtNGJlNi1hN2RhLTY1NGNlODMzYmZiNFxcXCIsXFxcInZlcnNpb25cXFwiOjMsXFxcImNyeXB0b1xcXCI6e1xcXCJjaXBoZXJcXFwiOlxcXCJhZXMtMTI4LWN0clxcXCIsXFxcImNpcGhlcnRleHRcXFwiOlxcXCI0YzA2MDRjY2EzMzE0ODM4ZDYzODQ3YjRlZDAyZTdhMmQxN2U1MTFlZmQ0NGY2MDUwZTA5YzIzOGE1ZDUwMDk1XFxcIixcXFwiY2lwaGVycGFyYW1zXFxcIjp7XFxcIml2XFxcIjpcXFwiYjQ4ZDgxNzMyMGVkNWI0NTliYmRkZjE0MGU1ZjA0NTNcXFwifSxcXFwia2RmXFxcIjpcXFwic2NyeXB0XFxcIixcXFwia2RmcGFyYW1zXFxcIjp7XFxcImRrbGVuXFxcIjozMixcXFwiblxcXCI6MjYyMTQ0LFxcXCJwXFxcIjoxLFxcXCJyXFxcIjo4LFxcXCJzYWx0XFxcIjpcXFwiMzVkNTMzOWFjZjZhOGYxNTQ2MmZmYzBiYjk4MWNmMzE5Nzk0YWUyMzljNTEzNDFmYjg1NGMxOGVlNDU4ZDVjN1xcXCJ9LFxcXCJtYWNcXFwiOlxcXCI3NmMxYTQ3ZjcxMjRjZDYzNDYwYWQyNWZiYjBiOWM2ZTNlYWI4ZWQ1MGQzNmY2NmUyZGM0MGMwMzg4ODExMjNlXFxcIn19J1xcbl0pXFxuXFxuLy8gRGVwbG95IHRoZSBzbWFydCBjb250cmFjdFxcbmRlZiBldGhDbGllbnRVUkwgPSBcXFwiaHR0cDovLzE3Mi4xMy4wLjIwOjg1NDVcXFwiXFxuZGVmIHdlYjNqID0gcDYuZXRoZXJldW1ycGMuYnVpbGQoZXRoQ2xpZW50VVJMKVxcbmRlZiBjcmVkZW50aWFscyA9IHA2LmV0aGVyZXVtcnBjLmdldENyZWRlbnRpYWxzKFxcXCJwNl9kZW1vLkFwcENvbmZpZ1xcXCIsIFtrZXk6IFxcXCJkZW1vV2FsbGV0XFxcIl0sIFxcXCJ2YWx1ZVxcXCIsIFxcXCJBRHVtbXlQYXNzd29yZFxcXCIpXFxuXFxuLy8gRGVmaW5lIGEgY3VzdG9tIHRyYW5zYWN0aW9uIG1hbmFnZXIgd2l0aCBhIHBvbGxpbmcgZnJlcXVlbmN5IG9mIDIgc2Vjb25kc1xcbmRlZiBwcm9jZXNzb3IgPSBuZXcgUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3Nvcih3ZWIzaiwgMjAwMEwsIFRyYW5zYWN0aW9uTWFuYWdlci5ERUZBVUxUX1BPTExJTkdfQVRURU1QVFNfUEVSX1RYX0hBU0gpXFxuZGVmIHRtID0gbmV3IFJhd1RyYW5zYWN0aW9uTWFuYWdlcih3ZWIzaiwgY3JlZGVudGlhbHMsIENoYWluSWRMb25nLk5PTkUsIHByb2Nlc3NvcilcXG5kZWYgY29udHJhY3QgPSBSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5kZXBsb3kod2ViM2osIHRtLCBwNi5ldGhlcmV1bXJwYy5ERUZBVUxUX0dBU19QUk9WSURFUikuc2VuZCgpXFxuXFxuLy8gU2F2ZSB0aGUgY29udHJhY3QgYWRkcmVzcyBhbmQgRXRoZXJldW0gY2xpZW50IFVSTCBpbiBjb25maWcgdGFibGVcXG5wNi5hcHBjb25maWcuc2F2ZShcXFwicDZfZGVtb1xcXCIsIFtcXG4gICAgXFxcImV0aENsaWVudFVSTFxcXCI6IGV0aENsaWVudFVSTCxcXG4gICAgXFxcImNvbnRyYWN0QWRkcmVzc1xcXCI6IGNvbnRyYWN0LmdldENvbnRyYWN0QWRkcmVzcygpLFxcbl0pXFxuXFxuLy8gUmVzdGFydCBzZXJ2aWNlcyB0byBhY3RpdmF0ZSByb3V0ZXMgYW5kIHdvcmtmbG93IHN0ZXBzXFxucDYuc2VydmljZS5yZXN0YXJ0U2VydmljZSgncGxhdGZvcm02LndvcmtmbG93c3RlcHMnKVxcbnA2LnNlcnZpY2UucmVzdGFydFNlcnZpY2UoJ3BsYXRmb3JtNi5yb3V0ZXMnKVxcbnA2LnNlcnZpY2UucmVzdGFydFNlcnZpY2UoJ3BsYXRmb3JtNi52aWV3cycpXFxucDYuc2VydmljZS5yZXN0YXJ0U2VydmljZSgncGxhdGZvcm02LnRyYW5zYWN0aW9ucycpXFxubG9nLmRlYnVnICdTZXJ2aWNlcyByZXN0YXJ0ZWQgdG8gbG9hZHMgcm91dGVzIGFuZCB3b3JrZmxvdyBzdGVwcydcXG5cXG5sb2cuZGVidWcgJ0RlbW8gYXBwIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSEnXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTU3NTU0MDIyMSwibWluRXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiIsIm1heEV4dHJhU2VydmljZVZlcnNpb24iOiIifSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiUkZRU21hcnRDb250cmFjdEhlbHBlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUkZRIFNtYXJ0IENvbnRyYWN0IEhlbHBlclwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTU3NTkzMDM1NixcInJldmlzaW9uSWRcIjpcIjAyY2Y4YWVlMzk2YzdjMWYyYmExODdmMzZkZDFmZTM2XCIsXCJtYWluU2NyaXB0XCI6XCJkZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG4vLyBUZXN0IHByb3RlY3RpbmcgcHJpdmF0ZSBrZXkgd2l0aCBhIHBhc3N3b3JkIGluIGEgd2FsbGV0XFxuZGVmIHBhc3N3b3JkID0gXFxcIkFEdW1teVBhc3N3b3JkXFxcIlxcbmRlZiBwcml2YXRlS2V5ID0gXFxcIjB4Yzg3NTA5YTFjMDY3YmJkZTc4YmViNzkzZTZmYTc2NTMwYjYzODJhNGMwMjQxZTVlNGE5ZWMwYTBmNDRkYzBkM1xcXCJcXG5sb2cuZGVidWcgXFxcIldhbGxldCBmaWxlIFxcXCIgKyBoZWxwZXIuZ2VuZXJhdGVXYWxsZXRKU09ORnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleSwgcGFzc3dvcmQpXFxuXFxuLy8gVGVzdCByZWFkaW5nIGNyZWRlbnRpYWxzXFxuZGVmIGNyZWRlbnRpYWxzID0gaGVscGVyLnJlYWRDcmVkZW50aWFscygpXFxubG9nLmRlYnVnIFxcXCJBY2NvdW50IGFkZHJlc3MgaXM6IFxcXCIgKyBjcmVkZW50aWFscy5nZXRBZGRyZXNzKClcXG5sb2cuZGVidWcgXFxcIkFjY291bnQgcHJpdmF0ZSBrZXkgaXM6IDB4XFxcIiArIGNyZWRlbnRpYWxzLmdldEVjS2V5UGFpcigpLmdldFByaXZhdGVLZXkoKS50b1N0cmluZygxNilcXG5cXG4vLyBUZXN0IEV0aCBjbGllbnQgY29ubmVjdGlvblxcbmRlZiBjb250cmFjdCA9IGhlbHBlci5nZXRTbWFydENvbnRyYWN0KClcXG5sb2cuZGVidWcgXFxcIkdldCBudW1iZXIgb2YgUkZRc1xcXCJcXG5kZWYgbmJyT2ZSRlFzID0gY29udHJhY3QubmJyT2ZSRlFzKCkuc2VuZCgpXFxubG9nLmRlYnVnIFxcXCJDdXJyZW50IG51bWJlciBvZiBSRlFzIGlzOiBcXFwiICsgbmJyT2ZSRlFzXFxuXFxubG9nLmRlYnVnIFxcXCJHZXQgbnVtYmVyIG9mIHF1b3Rlc1xcXCJcXG5kZWYgbmJyT2ZRdW90ZXMgPSBjb250cmFjdC5uYnJPZlF1b3RlcygpLnNlbmQoKVxcbmxvZy5kZWJ1ZyBcXFwiQ3VycmVudCBudW1iZXIgb2YgcXVvdGVzIGlzOiBcXFwiICsgbmJyT2ZRdW90ZXNcXG5cXG4vLyBUZXN0IFJGUSBzdWJtaXNzaW9uXFxuZGVmIHJmcUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5sb2cuZGVidWcgXFxcIlJGUSBpZCBpcyBcXFwiICsgcmZxSWRcXG5cXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIHVibCA9IFxcXCI8Li4uPlxcXCJcXG5cXG5kZWYgcmVjZWlwdCA9IGhlbHBlci5zdWJtaXRSRlEocmZxSWQsIG5vdywgdWJsKVxcbmxvZy5kZWJ1ZyByZWNlaXB0LnRvU3RyaW5nKClcXG5cXG5kZWYgKHJlYWRJc3N1ZWRBdCwgcmVhZFVCTCwgcmVhZFN0YXR1cykgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVxcbmxvZy5kZWJ1ZyBcXFwiUkZRIGlzIGlzc3VlZCBhdDogXFxcIiArIHJlYWRJc3N1ZWRBdFxcbmxvZy5kZWJ1ZyBcXFwiUkZRIFVCTCBpczogXFxcIiArIHJlYWRVQkxcXG5sb2cuZGVidWcgXFxcIlJGUSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkU3RhdHVzXFxuXFxuLy8gUmVhZCBSRlFSZWNlaXZlZCBldmVudHNcXG4vL2RlZiB0b3BpY09mUkZRUmVjZWl2ZWQgPSBIYXNoLnNoYTNTdHJpbmcoXFxcIlJGUVJlY2VpdmVkKGJ5dGVzMTYsdWludDI1NixzdHJpbmcpXFxcIilcXG5sb2cuZGVidWcgXFxcIlRvcGljIG9mIFJGUVJlY2VpdmVkOiBcXFwiICsgaGVscGVyLlJGUVJlY2VpdmVkRXZlbnRIYXNoXFxuXFxuLy8gVGVzdCBkZWNsaW5pbmcgYSBSRlFcXG5kZWYgZGVjbGluZUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5yZWNlaXB0ID0gaGVscGVyLmRlY2xpbmVSRlEoZGVjbGluZUlkLCByZnFJZCwgbm93KVxcbmxvZy5kZWJ1ZyByZWNlaXB0LnRvU3RyaW5nKClcXG5cXG5kZWYgKHJlYWREZWNsaW5lSXNzdWVkQXQsIHJlYWREZWNsaW5lVUJMLCByZWFkRGVjbGluZVN0YXR1cywgcmVhZERlY2xpbmVSRlFJZCwgcmVhZERlY2xpbmVTdXBwbGllckFkZHJlc3MpID0gaGVscGVyLmdldFF1b3RlKGRlY2xpbmVJZClcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmUgaXMgaXNzdWVkIGF0OiBcXFwiICsgcmVhZERlY2xpbmVJc3N1ZWRBdFxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZSBVQkwgaXM6IFxcXCIgKyByZWFkRGVjbGluZVVCTCAvLyBzaG91bGQgYmUgZW1wdHlcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmUgc3RhdHVzIGlzOiBcXFwiICsgcmVhZERlY2xpbmVTdGF0dXMgLy8gc2hvdWxkIGJlIERlY2xpbmVcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmVkIFJGUSBpczogXFxcIiArIHJlYWREZWNsaW5lUkZRSWQgLy8gc2hvdWxkIGJlIHJmcUlkXFxubG9nLmRlYnVnIFxcXCJEZWNsaW5lIHN1cHBsaWVyIGFkZHJlc3MgaXM6IFxcXCIgKyByZWFkRGVjbGluZVN1cHBsaWVyQWRkcmVzc1xcblxcbmRlZiByZWFkRGVjbGluZWRSRlFTdGF0dXMgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVsyXVxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZWQgUkZRIHN0YXR1cyBpczogXFxcIiArIHJlYWREZWNsaW5lZFJGUVN0YXR1cyAvLyBzaG91bGQgYmUgRGVjbGluZWRcXG5cXG4vLyBUZXN0IHN1Ym1pdHRpbmcgYSBxdW90ZVxcbmRlZiBxdW90ZUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5kZWYgcXVvdGVVYmwgPSBcXFwiPHF1b3RlIC8+XFxcIlxcbnJlY2VpcHQgPSBoZWxwZXIuc3VibWl0UXVvdGUocXVvdGVJZCwgcmZxSWQsIG5vdywgcXVvdGVVYmwpXFxubG9nLmRlYnVnIHJlY2VpcHQudG9TdHJpbmcoKVxcblxcbmRlZiAocmVhZFF1b3RlSXNzdWVkQXQsIHJlYWRRdW90ZVVCTCwgcmVhZFF1b3RlU3RhdHVzLCByZWFkUXVvdGVSRlFJZCwgcmVhZFF1b3RlU3VwcGxpZXJBZGRyZXNzKSA9IGhlbHBlci5nZXRRdW90ZShxdW90ZUlkKVxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgaXMgaXNzdWVkIGF0OiBcXFwiICsgcmVhZFF1b3RlSXNzdWVkQXRcXG5sb2cuZGVidWcgXFxcIlF1b3RlIFVCTCBpczogXFxcIiArIHJlYWRRdW90ZVVCTFxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgc3RhdHVzIGlzOiBcXFwiICsgcmVhZFF1b3RlU3RhdHVzIC8vIHNob3VsZCBiZSBPZmZlclxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgUkZRIGlzOiBcXFwiICsgcmVhZFF1b3RlUkZRSWQgLy8gc2hvdWxkIGJlIHJmcUlkXFxubG9nLmRlYnVnIFxcXCJRdW90ZSBzdXBwbGllciBhZGRyZXNzIGlzOiBcXFwiICsgcmVhZFF1b3RlU3VwcGxpZXJBZGRyZXNzXFxuXFxuZGVmIHJlYWRSRlFTdGF0dXMgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVsyXVxcbmxvZy5kZWJ1ZyBcXFwiTmV3IFJGUSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkUkZRU3RhdHVzIC8vIHNob3VsZCBiZSBRdW90ZVByb3ZpZGVkXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7XCJSRlFTbWFydENvbnRyYWN0SGVscGVyXCI6XCJpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlclxcblxcbmltcG9ydCBpby5wbGF0Zm9ybTYuZGVtby5zYy5SZXF1ZXN0Rm9yUXVvdGF0aW9uc1xcblxcbmltcG9ydCBqYXZhLnRpbWUuKlxcblxcbmltcG9ydCBvcmcud2ViM2ouYWJpLkV2ZW50RW5jb2RlclxcbmltcG9ydCBvcmcud2ViM2ouYWJpLkV2ZW50VmFsdWVzXFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuRnVuY3Rpb25SZXR1cm5EZWNvZGVyXFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuVHlwZVJlZmVyZW5jZVxcbmltcG9ydCBvcmcud2ViM2ouYWJpLmRhdGF0eXBlcy5FdmVudFxcbmltcG9ydCBvcmcud2ViM2ouYWJpLmRhdGF0eXBlcy5UeXBlXFxuaW1wb3J0IG9yZy53ZWIzai5jcnlwdG8uKlxcbmltcG9ydCBvcmcud2ViM2oucHJvdG9jb2wuY29yZS5tZXRob2RzLnJlc3BvbnNlLlRyYW5zYWN0aW9uUmVjZWlwdFxcbmltcG9ydCBvcmcud2ViM2oudHguKlxcbmltcG9ydCBvcmcud2ViM2oudHgucmVzcG9uc2UuUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3NvclxcbmltcG9ydCBvcmcud2ViM2oudXRpbHMuTnVtZXJpY1xcblxcblxcbmVudW0gUkZRU3RhdHVzIHtcXG4gICAgUmVjZWl2ZWQsIERlY2xpbmVkLCBRdW90ZVByb3ZpZGVkXFxufVxcblxcbmVudW0gUXVvdGVTdGF0dXMge1xcbiAgICBPZmZlciwgRGVjbGluZVxcbn1cXG5cXG5jbGFzcyBSRlFTbWFydENvbnRyYWN0SGVscGVyIHtcXG5cXG4gICAgLy8gQ29uc3RhbnRzXFxuICAgIHN0YXRpYyBkZWYgY29uZmlnVGFibGVOYW1lID0gXFxcInA2X2RlbW8uQXBwQ29uZmlnXFxcIlxcbiAgICBzdGF0aWMgZGVmIGNyZWRlbnRpYWxLZXkgPSBba2V5OiBcXFwiZGVtb1dhbGxldFxcXCJdXFxuICAgIHN0YXRpYyBkZWYgY3JlZGVudGlhbEZpZWxkTmFtZSA9IFxcXCJ2YWx1ZVxcXCJcXG5cXG4gICAgLy8gISEhIEZvciBkZW1vIHB1cnBvc2VzLCBkb24ndCBkbyB0aGlzIGluIHByb2R1Y3Rpb24hIEFsd2F5cyBhc2sgdGhlIHVzZXIgZm9yIGhpcy9oZXIgcGFzc3dvcmQgb3Igc3RvcmUgeW91ciBwcml2YXRlIGtleSBpbiBhIHZhdWx0L0hEIHdhbGxldCFcXG4gICAgc3RhdGljIGRlZiBwYXNzd29yZCA9IFxcXCJBRHVtbXlQYXNzd29yZFxcXCJcXG5cXG4gICAgLy8gSGVscGVyIHN0YXRlXFxuICAgIGRlZiBjb250ZXh0XFxuICAgIGRlZiB3ZWIzalxcbiAgICBkZWYgc21hcnRDb250cmFjdFxcblxcbiAgICBSRlFTbWFydENvbnRyYWN0SGVscGVyKGRlZiBjb250ZXh0KSB7XFxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XFxuXFxuICAgICAgICBkZWYgZXRoQ2xpZW50VVJMICA9IGNvbnRleHQucDYudGFibGUubG9va3VwKCdwNl9kZW1vLkFwcENvbmZpZycsIFtrZXk6ICdldGhDbGllbnRVUkwnXSkudmFsdWVbMF1cXG4gICAgICAgIHRoaXMud2ViM2ogPSBjb250ZXh0LnA2LmV0aGVyZXVtcnBjLmJ1aWxkKGV0aENsaWVudFVSTClcXG5cXG4gICAgICAgIC8vIERlZmluZSBhIGN1c3RvbSB0cmFuc2FjdGlvbiBtYW5hZ2VyIHdpdGggYSBwb2xsaW5nIGZyZXF1ZW5jeSBvZiAyIHNlY29uZHNcXG4gICAgICAgIGRlZiBwcm9jZXNzb3IgPSBuZXcgUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3Nvcih3ZWIzaiwgMjAwMEwsIFRyYW5zYWN0aW9uTWFuYWdlci5ERUZBVUxUX1BPTExJTkdfQVRURU1QVFNfUEVSX1RYX0hBU0gpXFxuICAgICAgICBkZWYgdHJhbnNhY3Rpb25NYW5hZ2VyID0gbmV3IFJhd1RyYW5zYWN0aW9uTWFuYWdlcih3ZWIzaiwgcmVhZENyZWRlbnRpYWxzKCksIENoYWluSWRMb25nLk5PTkUsIHByb2Nlc3NvcilcXG5cXG4gICAgICAgIGRlZiBjb250cmFjdEFkZHJlc3MgPSBjb250ZXh0LnA2LnRhYmxlLmxvb2t1cCgncDZfZGVtby5BcHBDb25maWcnLCBba2V5OiAnY29udHJhY3RBZGRyZXNzJ10pLnZhbHVlWzBdXFxuICAgICAgICB0aGlzLnNtYXJ0Q29udHJhY3QgPSBSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5sb2FkKGNvbnRyYWN0QWRkcmVzcywgd2ViM2osIHRyYW5zYWN0aW9uTWFuYWdlciwgY29udGV4dC5wNi5ldGhlcmV1bXJwYy5ERUZBVUxUX0dBU19QUk9WSURFUilcXG4gICAgfVxcblxcbiAgICBDcmVkZW50aWFscyByZWFkQ3JlZGVudGlhbHMoKSB7XFxuICAgICAgICByZXR1cm4gY29udGV4dC5wNi5ldGhlcmV1bXJwYy5nZXRDcmVkZW50aWFscyhjb25maWdUYWJsZU5hbWUsIGNyZWRlbnRpYWxLZXksIGNyZWRlbnRpYWxGaWVsZE5hbWUsIHBhc3N3b3JkKVxcbiAgICB9XFxuXFxuICAgIFRyYW5zYWN0aW9uUmVjZWlwdCBzdWJtaXRSRlEoVVVJRCBpZCwgWm9uZWREYXRlVGltZSBub3csIFN0cmluZyB1YmwpIHtcXG4gICAgICAgIHJldHVybiBzbWFydENvbnRyYWN0LnN1Ym1pdFJGUShcXG4gICAgICAgICAgICBjb250ZXh0LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5jb252ZXJzaW9uLnpkdFRvQmlnSW50ZWdlcihub3cpLFxcbiAgICAgICAgICAgIHVibCkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UkZRKFVVSUQgaWQpIHtcXG4gICAgICAgIGRlZiByZXN1bHQgPSBzbWFydENvbnRyYWN0LmdldFJGUShjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCkpLnNlbmQoKVxcblxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVChyZXN1bHQuZ2V0VmFsdWUxKCkpXFxuICAgICAgICBkZWYgdWJsID0gcmVzdWx0LmdldFZhbHVlMigpXFxuICAgICAgICBkZWYgc3RhdHVzID0gUkZRU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IGRlY2xpbmVSRlEoVVVJRCBkZWNsaW5lSWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93KSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5kZWNsaW5lUkZRKFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRCeXRlc0Zyb21VVUlEKGRlY2xpbmVJZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UXVvdGUoVVVJRCBpZCkge1xcbiAgICAgICAgZGVmIHJlc3VsdCA9IHNtYXJ0Q29udHJhY3QuZ2V0UXVvdGUoY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQoaWQpKS5zZW5kKClcXG5cXG4gICAgICAgIGRlZiBpc3N1ZWRBdCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5iaWdJbnRlZ2VyVG9aRFQocmVzdWx0LmdldFZhbHVlMSgpKVxcbiAgICAgICAgZGVmIHVibCA9IHJlc3VsdC5nZXRWYWx1ZTIoKVxcbiAgICAgICAgZGVmIHN0YXR1cyA9IFF1b3RlU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMocmVzdWx0LmdldFZhbHVlNCgpKVxcbiAgICAgICAgZGVmIHN1cHBsaWVyQWRkcmVzcyA9IHJlc3VsdC5nZXRWYWx1ZTUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMsIHJmcUlkLCBzdXBwbGllckFkZHJlc3MpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IHN1Ym1pdFF1b3RlKFVVSUQgaWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93LCBTdHJpbmcgdWJsKSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5zdWJtaXRRdW90ZShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSwgdWJsKS5zZW5kKClcXG4gICAgfVxcblxcbiAgICAvLyBSZWFkIGV2ZW50c1xcblxcbiAgICBmaW5hbCBzdGF0aWMgU3RyaW5nIFJGUVJlY2VpdmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5SRlFSRUNFSVZFRF9FVkVOVClcXG5cXG4gICAgVHVwbGUgcmVhZFJGUVJlY2VpdmVkRXZlbnQoU3RyaW5nW10gbG9nVG9waWNzLCBTdHJpbmcgbG9nRGF0YSkge1xcbiAgICAgICAgZGVmIGV2ZW50ID0gZXh0cmFjdEV2ZW50KFJlcXVlc3RGb3JRdW90YXRpb25zLlJGUVJFQ0VJVkVEX0VWRU5ULCBsb2dUb3BpY3MsIGxvZ0RhdGEpXFxuXFxuICAgICAgICBkZWYgcmZxSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgaXNzdWVkQXQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uYmlnSW50ZWdlclRvWkRUKChCaWdJbnRlZ2VyKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDEpLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgdWJsID0gKFN0cmluZykgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgyKS5nZXRWYWx1ZSgpXFxuXFxuICAgICAgICByZXR1cm4gbmV3IFR1cGxlKHJmcUlkLCBpc3N1ZWRBdCwgdWJsKVxcbiAgICB9XFxuXFxuICAgIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkZRRGVjbGluZWRFdmVudEhhc2ggPSBFdmVudEVuY29kZXIuZW5jb2RlKFJlcXVlc3RGb3JRdW90YXRpb25zLlJGUURFQ0xJTkVEX0VWRU5UKVxcblxcbiAgICBUdXBsZSByZWFkUkZRRGVjbGluZWRFdmVudChTdHJpbmdbXSBsb2dUb3BpY3MsIFN0cmluZyBsb2dEYXRhKSB7XFxuICAgICAgICBkZWYgZXZlbnQgPSBleHRyYWN0RXZlbnQoUmVxdWVzdEZvclF1b3RhdGlvbnMuUkZRREVDTElORURfRVZFTlQsIGxvZ1RvcGljcywgbG9nRGF0YSlcXG5cXG4gICAgICAgIGRlZiBzdXBwbGllciA9IChTdHJpbmcpIGV2ZW50LmdldEluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKVxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgwKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHF1b3RlSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDEpLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgaXNzdWVkQXQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uYmlnSW50ZWdlclRvWkRUKChCaWdJbnRlZ2VyKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDIpLmdldFZhbHVlKCkpXFxuXFxuICAgICAgICByZXR1cm4gbmV3IFR1cGxlKHN1cHBsaWVyLCByZnFJZCwgcXVvdGVJZCwgaXNzdWVkQXQpXFxuICAgIH1cXG5cXG4gICAgZmluYWwgc3RhdGljIFN0cmluZyBRdW90ZVJlY2VpdmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5RVU9URVJFQ0VJVkVEX0VWRU5UKVxcblxcbiAgICBUdXBsZSByZWFkUXVvdGVSZWNlaXZlZEV2ZW50KFN0cmluZ1tdIGxvZ1RvcGljcywgU3RyaW5nIGxvZ0RhdGEpIHtcXG4gICAgICAgIGRlZiBldmVudCA9IGV4dHJhY3RFdmVudChSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5RVU9URVJFQ0VJVkVEX0VWRU5ULCBsb2dUb3BpY3MsIGxvZ0RhdGEpXFxuXFxuICAgICAgICBkZWYgc3VwcGxpZXIgPSAoU3RyaW5nKSBldmVudC5nZXRJbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKClcXG4gICAgICAgIGRlZiByZnFJZCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRVVUlERnJvbUJ5dGVzKChieXRlW10pIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKSlcXG4gICAgICAgIGRlZiBxdW90ZUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgxKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVCgoQmlnSW50ZWdlcikgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgyKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHVibCA9IChTdHJpbmcpIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMykuZ2V0VmFsdWUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0LCB1YmwpXFxuICAgIH1cXG5cXG4gICAgLy8gRXZlbnQgaGVscGVyIG1ldGhvZHNcXG5cXG4gICAgc3RhdGljIEV2ZW50VmFsdWVzIGV4dHJhY3RFdmVudChFdmVudCBldmVudCwgU3RyaW5nW10gbG9nVG9waWNzLCBTdHJpbmcgbG9nRGF0YSkge1xcbiAgICAgICAgU3RyaW5nIGVuY29kZWRFdmVudFNpZ25hdHVyZSA9IEV2ZW50RW5jb2Rlci5lbmNvZGUoZXZlbnQpXFxuXFxuICAgICAgICBpZiAobG9nVG9waWNzWzBdICE9IGVuY29kZWRFdmVudFNpZ25hdHVyZSkge1xcbiAgICAgICAgICAgIHJldHVybiBudWxsXFxuICAgICAgICB9XFxuXFxuICAgICAgICBMaXN0PFR5cGU+IGluZGV4ZWRWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PD4oKVxcbiAgICAgICAgTGlzdDxUeXBlPiBub25JbmRleGVkVmFsdWVzID0gRnVuY3Rpb25SZXR1cm5EZWNvZGVyLmRlY29kZShsb2dEYXRhLCBldmVudC5nZXROb25JbmRleGVkUGFyYW1ldGVycygpKVxcblxcbiAgICAgICAgTGlzdDxUeXBlUmVmZXJlbmNlPFR5cGU+PiBpbmRleGVkUGFyYW1ldGVycyA9IGV2ZW50LmdldEluZGV4ZWRQYXJhbWV0ZXJzKClcXG4gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXhlZFBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHtcXG4gICAgICAgICAgICBUeXBlIHZhbHVlID0gRnVuY3Rpb25SZXR1cm5EZWNvZGVyLmRlY29kZUluZGV4ZWRWYWx1ZShsb2dUb3BpY3NbaSArIDFdLCBpbmRleGVkUGFyYW1ldGVycy5nZXQoaSkpXFxuICAgICAgICAgICAgaW5kZXhlZFZhbHVlcy5hZGQodmFsdWUpXFxuICAgICAgICB9XFxuXFxuICAgICAgICByZXR1cm4gbmV3IEV2ZW50VmFsdWVzKGluZGV4ZWRWYWx1ZXMsIG5vbkluZGV4ZWRWYWx1ZXMpXFxuICAgIH1cXG5cXG4gICAgc3RhdGljIGdlbmVyYXRlV2FsbGV0SlNPTkZyb21Qcml2YXRlS2V5KFN0cmluZyBwcml2YXRlS2V5SW5IZXgsIFN0cmluZyBwYXNzd29yZCkge1xcbiAgICAgICAgZGVmIHByaXZhdGVLZXkgPSBuZXcgQmlnSW50ZWdlcihOdW1lcmljLmNsZWFuSGV4UHJlZml4KHByaXZhdGVLZXlJbkhleCksIDE2KVxcbiAgICAgICAgZGVmIGtleVBhaXIgPSBFQ0tleVBhaXIuY3JlYXRlKHByaXZhdGVLZXkpXFxuICAgICAgICBkZWYgd2FsbGV0RmlsZSA9IFdhbGxldC5jcmVhdGVTdGFuZGFyZChwYXNzd29yZCwga2V5UGFpcilcXG4gICAgICAgIGRlZiBvYmplY3RNYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKClcXG4gICAgICAgIHJldHVybiBvYmplY3RNYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKHdhbGxldEZpbGUpXFxuICAgIH1cXG5cXG4gICAgLy8gRGF0ZSAvIFRpbWUgaGVscGVyIGZ1bmN0aW9uc1xcblxcbiAgICBzdGF0aWMgWm9uZWREYXRlVGltZSBub3coKSB7XFxuICAgICAgICByZXR1cm4gWm9uZWREYXRlVGltZS5ub3coWm9uZUlkLnN5c3RlbURlZmF1bHQoKSlcXG4gICAgfVxcbn1cXG5cIn0sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjE1NzU5MzAzNTYsIm1pbkV4dHJhU2VydmljZVZlcnNpb24iOiIiLCJtYXhFeHRyYVNlcnZpY2VWZXJzaW9uIjoiIn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlJlY2VpdmVSRlFUcmFuc2FjdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJlY2VpdmVSRlFUcmFuc2FjdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJIYW5kbGUgdGhlIHJlY2VwdGlvbiBvZiBhbiBSRlEgKGNyZWF0aW9uIG9mIHRoZSBSRlEgVHJhbnNhY3Rpb25JbmZvLCBzdG9yYWdlIHRvIGZpbGUgc3lzdGVt4oCmKSAtIFNjcmlwdCBjYWxsZWQgYnkgdGhlIEJsb2NrY2hhaW5FdmVudEhhbmRsZXIgc2NyaXB0XCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MjMyLFwicmV2aXNpb25JZFwiOlwiZDViYmFiOThkYzEwOWNiYjFjYzZjYWY2NmY3MjBjMzRcIixcIm1haW5TY3JpcHRcIjpcImltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzXFxuaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0XFxuXFxuLy8gVGhpcyBzY3JpcHQgcmVhZHMgdGhlIGluY29taW5nIFJGUSwgcGFyc2VzIGl0cyBjb250ZW50IGFuZCB3cml0ZXMgdGhlIHRyYW5zYWN0aW9uIGluIFA2IGRhdGFiYXNlIHVzaW5nIGl0cyBpbnRlcm5hbCBUcmFuc2FjdGlvbkluZm8gbW9kZWwgKGNoZWNrIHRoZSBEYXRhIE1vZGVscyBtZW51IGZvciBtb3JlIGluZm8pXFxuZGVmIHJmcUNvbnRlbnQgPSBwNi5waXBlbGluZS5nZXQgJ3VibCdcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcihmYWxzZSwgdHJ1ZSlcXG5kZWYgcmZxID0gc2x1cnBlci5wYXJzZVRleHQocmZxQ29udGVudClcXG5cXG5kZWYgYXBwbGljYXRpb25JZCA9ICdEZW1vQXBwJ1xcblxcbmRlZiBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKClcXG5TaW1wbGVEYXRlRm9ybWF0IHRyYW5zYWN0aW9uU0RGID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKVxcbmRlZiBmb3JtYXR0ZWREYXRlID0gdHJhbnNhY3Rpb25TREYuZm9ybWF0KGN1cnJlbnREYXRlKVxcblxcbmRlZiB0cmFuc2FjdGlvbklkID0gcmZxLklELnRleHQoKVxcbmRlZiBjb21tZW50cyA9IHJmcS5Ob3RlLnRleHQoKVxcbmRlZiBpc3N1ZURhdGUgPSByZnEuSXNzdWVEYXRlLnRleHQoKVxcblxcbmludCBuYkxpbmVzID0gcmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLnNpemUoKVxcblxcbmRlZiBzZWxsZXJOYW1lID0gcmZxLlNlbGxlclN1cHBsaWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuZGVmIGJ1eWVyTmFtZSA9IHJmcS5PcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eS5QYXJ0eS5QYXJ0eU5hbWUuTmFtZS50ZXh0KClcXG5cXG5kZWYgdHJhbnNhY3Rpb25UeXBlID0gJ1JlcXVlc3RGb3JRdW90YXRpb24nXFxuZGVmIHN0YXR1cyA9ICdSZWNlaXZlZCdcXG5kZWYgc3RhdHVzTWVzc2FnZSA9ICdSZWNlaXZlZCBieSBEZW1vIEFwcCdcXG5cXG4vLyBXcml0ZSB0aGUgdHJhbnNhY3Rpb24gb24gdGhlIGZpbGUgc3lzdGVtXFxuZGVmIHNvdXJjZVVSSSA9IFxcXCJmaWxlOi8vJFA2X0RBVEEvcmVzb3VyY2VzL2RvY3VtZW50cy9SZXF1ZXN0Rm9yUXVvdGF0aW9uL2luL1xcXCIgKyB0cmFuc2FjdGlvbklkICsgXFxcIi54bWxcXFwiXFxuZGVmIHNvdXJjZUZpbGUgPSBwNi51cmkuZmlsZUZyb21Vcmwoc291cmNlVVJJKVxcbkZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZShzb3VyY2VGaWxlLCByZnFDb250ZW50LCdVVEYtOCcpXFxuXFxuZGVmIHRhcmdldFVSSSA9IFxcXCJmaWxlOi8vJFA2X0RBVEEvcmVzb3VyY2VzL2RvY3VtZW50cy9SZXF1ZXN0Rm9yUXVvdGF0aW9uL1xcXCIgKyB0cmFuc2FjdGlvbklkICsgXFxcIi54bWxcXFwiXFxuZGVmIHRhcmdldEZpbGUgPSBwNi51cmkuZmlsZUZyb21VcmwodGFyZ2V0VVJJKVxcbkZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZSh0YXJnZXRGaWxlLCByZnFDb250ZW50LCdVVEYtOCcpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IFxcXCJcXFwiXFxcIjxUcmFuc2FjdGlvbkluZm8+XFxuICAgIDxJZD4ke3RyYW5zYWN0aW9uSWR9PC9JZD5cXG4gICAgPENyZWF0aW9uRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9DcmVhdGlvbkRhdGU+XFxuICAgIDxUcmFuc2FjdGlvblR5cGU+UmVxdWVzdCBGb3IgUXVvdGF0aW9uPC9UcmFuc2FjdGlvblR5cGU+XFxuICAgIDxUcmFuc2FjdGlvbk51bWJlcj4ke3RyYW5zYWN0aW9uSWR9PC9UcmFuc2FjdGlvbk51bWJlcj5cXG4gICAgPFNvdXJjZVN5c3RlbT5EZW1vIEFwcDwvU291cmNlU3lzdGVtPlxcbiAgICA8VGFyZ2V0U3lzdGVtLz5cXG4gICAgPFNlbmRlci8+XFxuICAgIDxGaW5hbFJlY2lwaWVudD5TdXBwbGllcjwvRmluYWxSZWNpcGllbnQ+XFxuICAgIDxUcmFuc2ZlclByb3RvY29sPkJsb2NrY2hhaW48L1RyYW5zZmVyUHJvdG9jb2w+XFxuICAgIDxEZWxpdmVyZWRWaWE+RXRoZXJldW0gQmxvY2tjaGFpbjwvRGVsaXZlcmVkVmlhPlxcbiAgICA8U291cmNlRG9jdW1lbnRGb3JtYXQ+VUJMPC9Tb3VyY2VEb2N1bWVudEZvcm1hdD5cXG4gICAgPFNvdXJjZURvY3VtZW50VVJJPiR7c291cmNlVVJJfTwvU291cmNlRG9jdW1lbnRVUkk+XFxuICAgIDxTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlPnRleHQveG1sOyBjaGFyc2V0PXV0Zi04PC9Tb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8UGl2b3REb2N1bWVudEZvcm1hdD5VQkw8L1Bpdm90RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxQaXZvdERvY3VtZW50VVJJPiR7dGFyZ2V0VVJJfTwvUGl2b3REb2N1bWVudFVSST5cXG4gICAgPFBpdm90RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvUGl2b3REb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRGb3JtYXQ+VUJMPC9UYXJnZXREb2N1bWVudEZvcm1hdD5cXG4gICAgPFRhcmdldERvY3VtZW50VVJJPiR7dGFyZ2V0VVJJfTwvVGFyZ2V0RG9jdW1lbnRVUkk+XFxuICAgIDxUYXJnZXREb2N1bWVudENvbnRlbnRUeXBlPnRleHQveG1sOyBjaGFyc2V0PXV0Zi04PC9UYXJnZXREb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzQ29kZT4ke3N0YXR1c308L1RlY2huaWNhbFN0YXR1c0NvZGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNNZXNzYWdlPiR7c3RhdHVzTWVzc2FnZX08L1RlY2huaWNhbFN0YXR1c01lc3NhZ2U+XFxuICAgIDxUZWNobmljYWxTdGF0dXNEYXRlPiR7Zm9ybWF0dGVkRGF0ZX08L1RlY2huaWNhbFN0YXR1c0RhdGU+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzQ29kZS8+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzTWVzc2FnZS8+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzRGF0ZS8+XFxuICAgIDxGbGFncz57XFxcImFhdmlzaWJsZVxcXCI6IHRydWV9PC9GbGFncz5cXG4gICAgPE9yZ1BhdGg+LyR7YXBwbGljYXRpb25JZH0vPC9PcmdQYXRoPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5TZWxsZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke2VzY2FwZVhtbChzZWxsZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QnV5ZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke2VzY2FwZVhtbChidXllck5hbWUpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgICAgPEtleT5Db21tZW50PC9LZXk+XFxuICAgICAgICA8VmFsdWU+JHtlc2NhcGVYbWwoY29tbWVudHMpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+SXNzdWUgRGF0ZTwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7ZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgICAgPEtleT5MaW5lIGl0ZW1zPC9LZXk+XFxuICAgICAgICA8VmFsdWU+JHtuYkxpbmVzfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PlRvdGFsIEFtb3VudDwvS2V5PlxcbiAgICAgIDxWYWx1ZT48L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkN1cnJlbmN5PC9LZXk+XFxuICAgICAgPFZhbHVlPjwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5BcHBsaWNhdGlvbjwvS2V5PlxcbiAgICAgIDxWYWx1ZT5wNl9kZW1vPC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbjwvVHJhbnNhY3Rpb25JbmZvPlxcXCJcXFwiXFxcIlxcblxcbmRlZiBpcGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdUcmFuc2FjdGlvbkluZm8nLCB0cmFuc2FjdGlvbklkKVxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZSh0cmFuc2FjdGlvbkluZm8sICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIGlwaywgJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTgyMzIsIm1pbkV4dHJhU2VydmljZVZlcnNpb24iOiIiLCJtYXhFeHRyYVNlcnZpY2VWZXJzaW9uIjoiIn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlZpZXdfVHJhbnNhY3Rpb25zIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVmlld19UcmFuc2FjdGlvbnNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJvdmlkZSBodG1sIGRpc3BsYXkgb2YgVHJhbnNhY3Rpb25zXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4NDU0LFwicmV2aXNpb25JZFwiOlwiOTFmNzMzNmU5NmY5MjkyOTQ4NDliNGFlY2RiYTY0MWJcIixcIm1haW5TY3JpcHRcIjpcImltcG9ydCBqYXZhLnRleHQuRGVjaW1hbEZvcm1hdDtcXG5cXG5sb2cuZGVidWcgJ1A2X0RFTU8nXFxuXFxuRGVjaW1hbEZvcm1hdCBkZiA9IG5ldyBEZWNpbWFsRm9ybWF0KFxcXCIjIyMsIyMjLjAwXFxcIik7XFxuXFxuLy8gRGlzcGxheSBwaXBlbGluZSB2YXJpYWJsZXNcXG4vLyBwaXBlbGluZS52YXJpYWJsZXMoKS5lYWNoKCkgeyBcXG4vLyAgICAgbG9nLmRlYnVnIFxcXCJQSVBFTElORSBWQVIgJHtpdH1cXFwiIFxcbi8vIH1cXG5cXG4vLyBHZXQgYW5kIGRpc3BsYXkgcmF3IFhtbCBmb3IgdGVzdFxcbmRlZiBwcmV0dHlYbWwgPSBwNi5waXBlbGluZS5nZXQgJ3htbCdcXG5cXG4vLyBHZXQgc2x1cnBlZCB4bWxcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gcDYucGlwZWxpbmUuZ2V0WG1sICd4bWwnXFxuXFxuLy8gUmV0dXJuIGZpbGUgZXh0ZW5zaW9uXFxuZGVmIGdldF9maWxlX2V4dGVuc2lvbiA9IHsgU3RyaW5nIHBhdGggLT4gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZignLicpICsgMSkgfVxcblxcbi8vIFJldHVybiBmaWxlIG5hbWVcXG5kZWYgZ2V0X2ZpbGVfbmFtZSA9IHsgU3RyaW5nIHBhdGggLT4gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZignLycpICsgMSkgfSBcXG5cXG4vLyBLZXlcXG5kZWYgSWQgPSB0cmFuc2FjdGlvbkluZm8uSWQudGV4dCgpXFxuZGVmIEJ1c2luZXNzRG9jTmFtZSA9IHRyYW5zYWN0aW9uSW5mby5UcmFuc2FjdGlvblR5cGUudGV4dCgpXFxuZGVmIEJ1c2luZXNzRG9jTnVtYmVyID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uTnVtYmVyLnRleHQoKVxcbmRlZiBFbmRwb2ludCA9IHRyYW5zYWN0aW9uSW5mby5EZWxpdmVyZWRWaWEudGV4dCgpXFxuLy9kZWYgTWVzc2FnZSA9IG1lc3NhZ2VJbmZvLk1lc3NhZ2UudGV4dCgpXFxuXFxuLy8gVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiBibG9jayBzdGFydFxcbmRlZiBUZWNobmljYWxTdGF0dXNDb2RlID0gdHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUudGV4dCgpXFxuZGVmIFRlY2huaWNhbFN0YXR1c0RhdGUgPSB0cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzRGF0ZS50ZXh0KClcXG5kZWYgVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9IHRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNNZXNzYWdlLnRleHQoKVxcblxcblxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzQ29kZSA9IHRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZS50ZXh0KClcXG5kZWYgRnVuY3Rpb25hbFN0YXR1c0RhdGUgPSB0cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0RhdGUudGV4dCgpXFxuZGVmIEZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlID0gdHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlLnRleHQoKVxcbi8vIFRyYW5zYWN0aW9uU3RhdHVzSW5mb3JtYXRpb24gYmxvY2sgZW5kXFxuXFxuZGVmIFNvdXJjZURvY3VtZW50VVJJID0gdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKVxcbmRlZiBzcmNEb2NFeHRlbnNpb24gPSBnZXRfZmlsZV9leHRlbnNpb24oU291cmNlRG9jdW1lbnRVUkkpXFxuZGVmIHNyY0RvY0ZpbGVOYW1lID0gZ2V0X2ZpbGVfbmFtZShTb3VyY2VEb2N1bWVudFVSSSlcXG5cXG5kZWYgU291cmNlRG9jdW1lbnRDb250ZW50VHlwZSA9IHRyYW5zYWN0aW9uSW5mby5Tb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlLnRleHQoKVxcblxcbmRlZiBDdXJyZW50RG9jdW1lbnRVUkkgPSB0cmFuc2FjdGlvbkluZm8uVGFyZ2V0RG9jdW1lbnRVUkkudGV4dCgpXFxuZGVmIGN1ckRvY0V4dGVuc2lvbiA9IGdldF9maWxlX2V4dGVuc2lvbihDdXJyZW50RG9jdW1lbnRVUkkpXFxuZGVmIGN1ckRvY0ZpbGVOYW1lID0gZ2V0X2ZpbGVfbmFtZShDdXJyZW50RG9jdW1lbnRVUkkpXFxuXFxuZGVmIEN1cnJlbnREb2N1bWVudENvbnRlbnRUeXBlID0gdHJhbnNhY3Rpb25JbmZvLlRhcmdldERvY3VtZW50Q29udGVudFR5cGUudGV4dCgpXFxuXFxuZGVmIEF0dGFjaG1lbnRzID0gdHJhbnNhY3Rpb25JbmZvLkF0dGFjaG1lbnRzXFxuZGVmIERpc3BsYXlhYmxlQXR0YWNobWVudHMgPSBcXFwiXFxcIlxcblxcbkF0dGFjaG1lbnRzLmVhY2gge1xcbiAgICBkZWYgVVJJID0gaXQuQXR0YWNobWVudC5VUkkudGV4dCgpXFxuICAgIGRlZiBDb250ZW50VHlwZSA9IGl0LkF0dGFjaG1lbnQuQ29udGVudFR5cGUudGV4dCgpXFxuICAgIGRlZiBhdHRhY2htZW50RXh0ZW5zaW9uID0gZ2V0X2ZpbGVfZXh0ZW5zaW9uKFVSSSlcXG4gICAgZGVmIGF0dGFjaG1lbnRGaWxlTmFtZSA9IGdldF9maWxlX25hbWUoVVJJKVxcbiAgICBkZWYgY3VycmVudEF0dGFjaG1lbnQgPSBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiaW5saW5lLWJsb2NrXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+PGNlbnRlcj5BdHRhY2htZW50PC9jZW50ZXI+PC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPlxcblxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlXFxcIj5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBvbmNsaWNrPVxcXCJwbGF0Zm9ybTYudHJhbnNhY3Rpb25Eb3dubG9hZCh0aGlzKVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVxcXCJmdC1pY29uIGZ0LWljb24tJHthdHRhY2htZW50RXh0ZW5zaW9ufVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtZXh0ZW5zaW9uPVxcXCIke2F0dGFjaG1lbnRFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1pZHM9JHtJZH1cXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdXJpPVxcXCIkVVJJfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtY29udGVudC10eXBlPVxcXCIke0NvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT1cXFwiYXR0YWNobWVudEZpbGVOYW1lXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPVxcXCJnZXQtZmlsZS1uYW1lXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT1cXFwicGF0aFxcXCIgc2VsZWN0PVxcXCJVUklcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPlxcbiAgICAgICAgICAgICAgICAgICAgPC94c2w6dmFyaWFibGU+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke2F0dGFjaG1lbnRGaWxlTmFtZX1cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgJHthdHRhY2htZW50RmlsZU5hbWV9XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICBcXFwiXFxcIlxcXCJcXG4gICAgXFxuICAgIERpc3BsYXlhYmxlQXR0YWNobWVudHMgPSBcXFwiJHtEaXNwbGF5YWJsZUF0dGFjaG1lbnRzfSR7Y3VycmVudEF0dGFjaG1lbnR9XFxcIlxcbn1cXG5cXG4vLyBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJvbGRcXFwiIHdheVxcbmRlZiBJc3N1ZSA9IHRyYW5zYWN0aW9uSW5mby5Jc3N1ZVxcbmRlZiBJc3N1ZUxldmVsRVJST1IgPSBJc3N1ZS5maW5kQWxsIHsgaXQubGV2ZWwgPT0gJ0VSUk9SJyB9XFxuZGVmIGVycm9ycyA9IFtdXFxuXFxuSXNzdWVMZXZlbEVSUk9SLmVhY2gge1xcbiAgICBpZiAoaXQubGV2ZWwgPT0gJ0VSUk9SJykge1xcbiAgICAgICAgZXJyb3JzID0gdG9rZW5pemUoIGl0LlRleHQsICcmI3hBOycgKVxcbiAgICB9XFxufVxcblxcbmRlZiBJc3N1ZUVycm9yTGluZSA9IFxcXCJcXFwiXFxuXFxuZXJyb3JzLmVhY2gge1xcbiAgICBkZWYgbGluZSA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJtaS1saW5lXFxcIj5cXG4gICAgICAgIDxzdHJvbmc+PHNwYW4gY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHt0b2tlbml6ZShpdCwnXFxcXFxcXFx8JylbMV19PC9zcGFuPjwvc3Ryb25nPiA8c3Bhbj4gLSA8L3NwYW4+XFxuICAgICAgICA8c3BhbiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke3Rva2VuaXplKGl0LCdcXFxcXFxcXHwnKVsyXX08L3NwYW4+XFxuICAgIDwvZGl2PlxcbiAgICBcXFwiXFxcIlxcXCJcXG4gICAgXFxuICAgIElzc3VlRXJyb3JMaW5lID0gXFxcIiR7SXNzdWVFcnJvckxpbmV9JHtsaW5lfVxcXCJcXG59XFxuXFxuZGVmIElzc3VlTGV2ZWxFcnJvck9sZFdheSA9IChJc3N1ZUxldmVsRVJST1Iuc2l6ZSgpICE9IDApID8gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBtZXNzYWdlLWluZm8tc2VjdGlvblxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIj5JbnZhbGlkIGRvY3VtZW50IGR1ZSB0byA8c3Ryb25nPiR7ZXJyb3JzLnNpemUoKX0gZXJyb3Iocyk8L3N0cm9uZz48L2Rpdj5cXG4gICAgICAgIFxcbiAgICAgICAgJHtJc3N1ZUVycm9yTGluZX1cXG5cXG4gICAgPC9kaXY+XFxuXFxcIlxcXCJcXFwiIDogXFxcIlxcXCJcXG5cXG4vLyBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJuZXdcXFwiIHdheVxcbmRlZiBJc3N1ZXMgPSB0cmFuc2FjdGlvbkluZm8uSXNzdWVzXFxuZGVmIElzc3Vlc0xldmVsRVJST1IgPSBJc3N1ZXMuSXNzdWUuZmluZEFsbCB7IGl0LmxldmVsID09ICdFUlJPUicgfVxcblxcbmRlZiBJc3N1ZXNFcnJvckxpbmUgPSBcXFwiXFxcIlxcblxcbklzc3Vlc0xldmVsRVJST1IuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtaS1saW5lXFxcIj5cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj7igKIgJHtpdC5NZXNzYWdlfTwvc3Bhbj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICBcXFwiXFxcIlxcXCJcXG4gICAgXFxuICAgIGlzc3Vlc0xldmVsRXJyb3JOZXdXYXkgPSBcXFwiJHtpc3N1ZXNMZXZlbEVycm9yTmV3V2F5fSR7bGluZX1cXFwiXFxufVxcblxcbmRlZiBpc3N1ZXNMZXZlbEVycm9yTmV3V2F5ID0gKElzc3Vlc0xldmVsRVJST1Iuc2l6ZSgpICE9IDApID8gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBtZXNzYWdlLWluZm8tc2VjdGlvblxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIj5Db250ZW50IGNoZWNrIGhhcyBpZGVudGlmaWVkIDxzdHJvbmc+JHtJc3N1ZXNMZXZlbEVSUk9SLnNpemUoKX0gZXJyb3Iocyk8L3N0cm9uZz48L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgJHtpc3N1ZXNMZXZlbEVycm9yTmV3V2F5fVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgPC9kaXY+XFxuXFxcIlxcXCJcXFwiIDogXFxcIlxcXCJcXG5cXG5kZWYgQXVkaXRUcmFpbCA9IHRyYW5zYWN0aW9uSW5mby5BdWRpdFRyYWlsXFxuZGVmIEF1ZGlvVHJhaWxSZWNvcmQgPSBBdWRpdFRyYWlsLlJlY29yZCA/OiBbXVxcbmRlZiBBdWRpb1RyYWlsUmVjb3JkRGlzcGxheSA9IFxcXCJcXFwiXFxuXFxuQXVkaW9UcmFpbFJlY29yZC5lYWNoIHtcXG4gICAgZGVmIGF1ZGl0VHlwZSA9IChpdC5UeXBlID09IFxcXCJGdW5jdGlvbmFsU3RhdHVzXFxcIikgPyBcXFwiRnVuY3Rpb25hbCBzdGF0dXNcXFwiIDogKGl0LlR5cGUgPT0gXFxcIlRlY2huaWNhbFN0YXR1c1xcXCIpID8gXFxcIlRlY2huaWNhbCBzdGF0dXNcXFwiIDogJydcXG4gICAgZGVmIGxpbmUgPSBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwicm93IHJvdy1pdGVtLXNlcGFyYXRlZFxcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMVxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5UeXBlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgJHthdWRpdFR5cGV9XFxuICAgICAgICAgICAgL2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhdHVzPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LkNvZGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0zXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkRhdGU8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuRGF0ZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTZcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+TWVzc2FnZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5NZXNzYWdlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuXFxuICAgIDwvZGl2PlxcbiAgICBcXFwiXFxcIlxcXCJcXG4gICAgXFxuICAgIEF1ZGlvVHJhaWxSZWNvcmREaXNwbGF5ID0gXFxcIiR7QXVkaW9UcmFpbFJlY29yZERpc3BsYXl9JHtsaW5lfVxcXCJcXG59XFxuXFxuZGVmIEF1ZGlvVHJhaWxEaXNwbGF5ID0gKEF1ZGlvVHJhaWxSZWNvcmQuc2l6ZSgpID4gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwicm93IHRvcC1tYXJnaW5cXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XFxcImJ0biBidG4teHMgYnRuLXN1Y2Nlc3NcXFwiIGRhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCIgZGF0YS10YXJnZXQ9XFxcIiNhdWRpdFRyYWlsXFxcIj5TdGF0dXMgaGlzdG9yeTwvYnV0dG9uPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgaWQ9XFxcImF1ZGl0VHJhaWxcXFwiIGNsYXNzPVxcXCJjb2xsYXBzZSBzaWRlLXBhZGRlZFxcXCI+PGRpdj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgJHtBdWRpb1RyYWlsUmVjb3JkRGlzcGxheX1cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbmRlZiBXb3JrZmxvdyA9IHRyYW5zYWN0aW9uSW5mby5Xb3JrZmxvd1xcbmRlZiBXb3JrZmxvd0luc3RhbmNlID0gdHJhbnNhY3Rpb25JbmZvLldvcmtmbG93Lkluc3RhbmNlXFxuZGVmIFdvcmtmbG93SW5zdGFuY2VEaXNwbGF5ID0gXFxcIlxcXCJcXG5cXG5cXG5Xb3JrZmxvd0luc3RhbmNlLmVhY2gge1xcbiAgICBkZWYgbGluZSA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgcm93LWl0ZW0tc2VwYXJhdGVkXFxcIj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPldvcmtmbG93IFR5cGU8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuc3RlcC5zdGVwSWR9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlN0YXJ0IERhdGU8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuc3RhcnREYXRlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5FbmQgRGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5lbmREYXRlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5Bc3NpZ25lZCB0bzwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGVwLmFzc2lnbmVkVG9OYW1lfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5IYW5kbGVkIGJ5PC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LnN0ZXAuYWN0aW9uZWRCeUVtYWlsfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuc3RhdHVzfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICBcXFwiXFxcIlxcXCJcXG4gICAgXFxuICAgIFdvcmtmbG93SW5zdGFuY2VEaXNwbGF5ID0gXFxcIiR7V29ya2Zsb3dJbnN0YW5jZURpc3BsYXl9JHtsaW5lfVxcXCJcXG59XFxuXFxuZGVmIFdvcmtmbG93RGlzcGxheSA9IChXb3JrZmxvd0luc3RhbmNlLnNpemUoKSA+IDApID8gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvdyB0b3AtbWFyZ2luXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBtZXNzYWdlLWluZm8tc2VjdGlvblxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWhlYWRlclxcXCIgc3R5bGU9XFxcIm1hcmdpbi1ib3R0b206IDVweDtcXFwiPlxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVxcXCJidG4gYnRuLXhzIGJ0bi1zdWNjZXNzXFxcIiBkYXRhLXRvZ2dsZT1cXFwiY29sbGFwc2VcXFwiIGRhdGEtdGFyZ2V0PVxcXCIjaGlzdG9yeVRyYWlsXFxcIj5Xb3JrZmxvdyBoaXN0b3J5PC9idXR0b24+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBpZD1cXFwiaGlzdG9yeVRyYWlsXFxcIiBjbGFzcz1cXFwiY29sbGFwc2Ugc2lkZS1wYWRkZWRcXFwiPjxkaXY+PC9kaXY+XFxuICAgICAgICAgICAgICAgICR7V29ya2Zsb3dJbnN0YW5jZURpc3BsYXl9XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgPC9kaXY+XFxuXFxcIlxcXCJcXFwiIDogXFxcIlxcXCJcXG5cXG4vLyBLZXlWYWx1ZVxcbmRlZiBTZWxsZXJOYW1lID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09IFxcXCJTZWxsZXIgTmFtZVxcXCJ9LlZhbHVlLnRleHQoKVxcbmRlZiBCdXllck5hbWUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkJ1eWVyIE5hbWVcXFwifS5WYWx1ZS50ZXh0KClcXG5kZWYgSXNzdWVEYXRlID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09IFxcXCJJc3N1ZSBEYXRlXFxcIn0uVmFsdWUudGV4dCgpXFxuZGVmIEN1cnJlbmN5ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09IFxcXCJDdXJyZW5jeVxcXCJ9LlZhbHVlLnRleHQoKVxcblxcbmRlZiBUb3RhbEFtb3VudCA9IHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5maW5ke2l0LktleSA9PSBcXFwiVG90YWwgQW1vdW50XFxcIn0uVmFsdWUudGV4dCgpXFxuXFxucHJpbnQgXFxcIlRPVEFMIEFNT1VOVFxcXCIgKyBUb3RhbEFtb3VudFxcbmRlZiBGb3JtYXR0ZWRUb3RhbEFtb3V0ID0gVG90YWxBbW91bnQgPyBkZi5mb3JtYXQoRG91YmxlLnZhbHVlT2YoVG90YWxBbW91bnQpKSA6IFxcXCJcXFwiXFxuXFxubG9nLmRlYnVnICdQNl9ERU1PIEZvcm1hdHRlZFRvdGFsQW1vdXQgPSAnK0Zvcm1hdHRlZFRvdGFsQW1vdXRcXG5cXG5cXG5kZWYgTGluZUl0ZW1zID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09IFxcXCJMaW5lIGl0ZW1zXFxcIn0uVmFsdWUudGV4dCgpXFxuXFxuZGVmIFRyYW5zYWN0aW9uU3RhdHVzSW5mb3JtYXRpb24gPSAoVGVjaG5pY2FsU3RhdHVzQ29kZSAhPSAnJylcXG4gICAgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5UZWNobmljYWwgc3RhdHVzPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke1RlY2huaWNhbFN0YXR1c0NvZGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtOFxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5Bc3NvY2lhdGVkIG1lc3NhZ2UgLSBhcyBvZiAke1RlY2huaWNhbFN0YXR1c0RhdGV9PC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke1RlY2huaWNhbFN0YXR1c01lc3NhZ2V9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICA6IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlN0YXR1czwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtOFxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5Bc3NvY2lhdGVkIG1lc3NhZ2U8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPjwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICBcXFwiXFxcIlxcXCJcXG4gICAgXFxubG9nLmRlYnVnICdQNkRFTU8gVmlld19EZW1vIFRyYW5zYWN0aW9uIHNjcmlwdCBMSU5FIDMwNicgIFxcbiAgICBcXG5kZWYgRnVuY3Rpb25hbFN0YXR1c0luZm9ybWF0aW9uID0gKEZ1bmN0aW9uYWxTdGF0dXNDb2RlICE9ICcnKVxcbiAgICA/IFxcXCJcXFwiXFxcIlxcbiAgICA8aHIvPlxcdFxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkZ1bmN0aW9uYWwgc3RhdHVzPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0Z1bmN0aW9uYWxTdGF0dXNDb2RlfTwvZGl2PlxcblxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLThcXFwiPlxcbiAgICAgICAgXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5Bc3NvY2lhdGVkIG1lc3NhZ2UgLSBhcyBvZiAke0Z1bmN0aW9uYWxTdGF0dXNEYXRlfTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtGdW5jdGlvbmFsU3RhdHVzTWVzc2FnZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICA8L2Rpdj4gXFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICA6ICcnXFxuXFxuLy8gZGVmIG15X2h0bWwgPSBcXFwiXFxcIlxcXCI8ZGl2PlRFU1Q8L2Rpdj5cXFwiXFxcIlxcXCJcXG5cXG5sb2cuZGVidWcgJ1A2REVNTyBWaWV3X0RlbW8gVHJhbnNhY3Rpb24gc2NyaXB0IExJTkUgMzMxJ1xcblxcbmRlZiBteV9odG1sID0gXFxcIlxcXCJcXFwiXFxuPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZpZXctd3JhcHBlclxcXCI+XFxuXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPlRyYW5zYWN0aW9uOiA8c3Ryb25nPjxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPiR7QnVzaW5lc3NEb2NOYW1lfTwvc3Bhbj4gJHtCdXNpbmVzc0RvY051bWJlcn08L3N0cm9uZz48L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcblxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TZWxsZXIgbmFtZTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke1NlbGxlck5hbWV9PC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkJ1eWVyIG5hbWU8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtCdXllck5hbWV9PC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkRlbGl2ZXJlZCB2aWE8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtFbmRwb2ludH08L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHhzLXN0YWNrZWQtc3BhY2VyIGNvbC1zbS02IG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIj5BZGRpdGlvbmFsIGluZm9ybWF0aW9uPC9kaXY+XFxuXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG5cXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGF0ZTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtJc3N1ZURhdGV9PC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+VG90YWwgQW1vdW50PC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPiR7Q3VycmVuY3l9PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0Zvcm1hdHRlZFRvdGFsQW1vdXR9XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5MaW5lIGl0ZW1zPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0xpbmVJdGVtc308L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgICAgICA8L2Rpdj5cXG5cXG5cXG4gICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93IHRvcC1tYXJnaW5cXFwiPlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHhzLXN0YWNrZWQtc3BhY2VyIGNvbC1zbS02IG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIj5UcmFuc2FjdGlvbiBzdGF0dXMgaW5mb3JtYXRpb248L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICAke1RyYW5zYWN0aW9uU3RhdHVzSW5mb3JtYXRpb259IFxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgICR7RnVuY3Rpb25hbFN0YXR1c0luZm9ybWF0aW9ufVxcbiAgICAgICAgICAgIFxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICBcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtc20tNiBtZXNzYWdlLWluZm8tc2VjdGlvblxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWhlYWRlclxcXCI+RG9jdW1lbnRzIGFuZCBBdHRhY2htZW50KHMpPC9kaXY+XFxuXFxuICAgICAgICAgICAgPGRpdj5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5saW5lLWJsb2NrXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+PGNlbnRlcj5Tb3VyY2UgZG9jdW1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke3NyY0RvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWV4dGVuc2lvbj1cXFwiJHtzcmNEb2NFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1pZHM9XFxcIiR7SWR9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiR7U291cmNlRG9jdW1lbnRVUkl9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50LXR5cGU9XFxcIiR7U291cmNlRG9jdW1lbnRDb250ZW50VHlwZX1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXZpZXc9XFxcInt7VklFV05BTUV9fVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tZmlsZS1uYW1lXFxcIiB0aXRsZT1cXFwiJHtzcmNEb2NGaWxlTmFtZX1cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtzcmNEb2NGaWxlTmFtZX1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImlubGluZS1ibG9ja1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPjxjZW50ZXI+VGFyZ2V0IGRvY3VtZW50PC9jZW50ZXI+PC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlXFxcIj5cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBvbmNsaWNrPVxcXCJwbGF0Zm9ybTYudHJhbnNhY3Rpb25Eb3dubG9hZCh0aGlzKVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVxcXCJmdC1pY29uIGZ0LWljb24tJHtjdXJEb2NFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1leHRlbnNpb249XFxcIiR7Y3VyRG9jRXh0ZW5zaW9ufVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtaWRzPVxcXCIke0lkfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdXJpPVxcXCIke0N1cnJlbnREb2N1bWVudFVSSX1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQtdHlwZT1cXFwiJHtDdXJyZW50RG9jdW1lbnRDb250ZW50VHlwZX1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXZpZXc9XFxcInt7VklFV05BTUV9fVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9XFxcImN1ckRvY0ZpbGVOYW1lXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPVxcXCJnZXQtZmlsZS1uYW1lXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT1cXFwicGF0aFxcXCIgc2VsZWN0PVxcXCJDdXJyZW50RG9jdW1lbnRVUklcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOnZhcmlhYmxlPlxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tZmlsZS1uYW1lXFxcIiB0aXRsZT1cXFwiJHtjdXJEb2NGaWxlTmFtZX1cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjdXJEb2NGaWxlTmFtZX1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIFxcblxcbiAgICAgICAgICAgICAgICAke0Rpc3BsYXlhYmxlQXR0YWNobWVudHN9XFxuXFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgICAgICA8L2Rpdj5cXG5cXG5cXG4gICAgICAgIDwhLS0gV2lsbCBkaXNwbGF5IGluZm8gb24gRXJyb3JzIGNhcHR1cmVkIHRoZSBcXFwib2xkXFxcIiB3YXkgLS0+XFxuICAgICAgICBcXG4gICAgICAgICR7SXNzdWVMZXZlbEVycm9yT2xkV2F5fSBcXG5cXG4gICAgICAgIDwhLS0gV2lsbCBkaXNwbGF5IGluZm8gb24gRXJyb3JzIGNhcHR1cmVkIHRoZSBcXFwibmV3XFxcIiB3YXkgLS0+XFxuICAgICAgICBcXG4gICAgICAgICR7aXNzdWVzTGV2ZWxFcnJvck5ld1dheX1cXG5cXG4gICAgXFxuICAgIDwvZGl2PlxcblxcbiAgICAke0F1ZGlvVHJhaWxEaXNwbGF5fSAgICAgICAgICAgIFxcbiAgICBcXG4gICAgJHtXb3JrZmxvd0Rpc3BsYXl9ICAgICAgICAgICAgIFxcbiAgICBcXG4gICAgXFxuPC9kaXY+XFxuXFxcIlxcXCJcXFwiXFxuXFxucDYucGlwZWxpbmUucHV0ICdwb3J0YWxIdG1sJywgbXlfaHRtbCwgJ3RleHQvaHRtbCdcXG5cXG5sb2cuZGVidWcgJ1A2REVNTyBWaWV3X0RlbW8gVHJhbnNhY3Rpb24gc2NyaXB0IGV4ZWN1dGlvbiBpcyBPVkVSJ1wiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg0NTQsIm1pbkV4dHJhU2VydmljZVZlcnNpb24iOiIiLCJtYXhFeHRyYVNlcnZpY2VWZXJzaW9uIjoiIn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlVuaW5zdGFsbEFwcGxpY2F0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVW5pbnN0YWxsQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVsZXRlIGFsbCBTZXJ2aWNlIEl0ZW1zLCBUcmFuc2FjdGlvbnMgYW5kIFdvcmtmbG93IFRhc2tzIHJlbGF0ZWQgdG8gcDZfZGVtb1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MzE5Nzc4OTk1NCxcInJldmlzaW9uSWRcIjpcIjA1NGU0YjE2YjgxYWNkODI5NmUwOTU2ZDAzYjg3ZTVjXCIsXCJtYWluU2NyaXB0XCI6XCIvLyBUaGlzIHNjcmlwdCBpcyBleGVjdXRlZCB0byBjbGVhbiB1cCBhbGwgdGhlIGFwcGxpY2F0aW9ucyByZXNvdXJjZXNcXG5cXG4vLyBEZWxldGUgYWxsIHRyYW5zYWN0aW9ucyBhbmQgd29ya2Zsb3cgdGFza3NcXG5wNi5zcHJvYy5leGVjdXRlKCdwNl9kZW1vLkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9ucycpXFxubG9nLmRlYnVnICdEZW1vIGFwcCB0cmFuc2FjdGlvbnMgYW5kIHdvcmtmbG93IHRhc2tzIGRlbGV0ZWQnXFxuXFxuLy8gUmVzdGFydCBzZXJ2aWNlc1xcbnA2LnNlcnZpY2UucmVzdGFydFNlcnZpY2UoJ3BsYXRmb3JtNi53b3JrZmxvd3N0ZXBzJylcXG5wNi5zZXJ2aWNlLnJlc3RhcnRTZXJ2aWNlKCdwbGF0Zm9ybTYudmlld3MnKVxcbnA2LnNlcnZpY2UucmVzdGFydFNlcnZpY2UoJ3BsYXRmb3JtNi50cmFuc2FjdGlvbnMnKVxcbmxvZy5kZWJ1ZyAnU2VydmljZXMgcmVzdGFydGVkIHRvIGZpbmlzaCBjbGVhbmluZyB1cCB0cmFuc2FjdGlvbiBkYXRhJ1xcblxcbi8vIERlc3Ryb3kgcm91dGVzXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFdlYjNqIC0gQmxvY2tjaGFpbkV2ZW50SGFuZGxlcicpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlcicpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJvdXRpbmcgcnVsZXMgZm9yIFB1cmNoYXNlIE9yZGVycycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJvdXRpbmcgcnVsZXMgZm9yIFF1b3RlcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJvdXRpbmcgcnVsZXMgZm9yIFJlcXVlc3RGb3JRdW90YXRpb25zJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gU2NoZWR1bGVkIGNyZWF0aW9uIG9mIFJGUXMnKVxcbnA2LmNhbWVsLmRlc3Ryb3lSb3V0ZSgncDZfZGVtbyBSZWZyZXNoIENvdW50UkZRcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRRdW90ZXMnKVxcbnA2LmNhbWVsLmRlc3Ryb3lSb3V0ZSgncDZfZGVtbyBSZWZyZXNoIENvdW50QWNjZXB0ZWRQT3MnKVxcbnA2LmNhbWVsLmRlc3Ryb3lSb3V0ZSgncDZfZGVtbyBSZWZyZXNoIENvdW50UmVqZWN0ZWRQT3MnKVxcbnA2LmNhbWVsLmRlc3Ryb3lSb3V0ZSgncDZfZGVtbyBSZWZyZXNoIENvdW50RmFpbGVkUm91dGluZ09yZGVycycpXFxuXFxuLy8gVW5kZXBsb3kgYnVuZGxlZCByZXNvdXJjZXNcXG5wNi5idW5kbGVkLnVuZGVwbG95KCdwNl9kZW1vLlBPUmV2aWV3JylcXG5wNi5idW5kbGVkLnVuZGVwbG95KCdwNl9kZW1vLlRhYmxlSXRlbXNEYXRhJylcXG5sb2cuZGVidWcgJ0J1bmRsZWQgcmVzb3VyY2VzIGRlbGV0ZWQgZnJvbSB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0nXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MzE5Nzc4OTk1NCwibWluRXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiIsIm1heEV4dHJhU2VydmljZVZlcnNpb24iOiIifSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiU2VuZFF1b3RlVG9CbG9ja2NoYWluIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiU2VuZFF1b3RlVG9CbG9ja2NoYWluXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIldyaXRlIFF1b3RlIGluIGFuIEV0aGVyZXVtIHNtYXJ0IGNvbnRyYWN0XCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxNjQ3MjQ3ODg5LFwicmV2aXNpb25JZFwiOlwiYjZmNmYzNjM5MmE1M2JmNTM0ODQ5ZjQ0NjBjZDk1ZDBcIixcIm1haW5TY3JpcHRcIjpcIi8qKlxcbiAqIFlvdSBjYW4gY2FsbCBhbm90aGVyIHNjcmlwdCBieSB1c2luZyAnSW5jbHVkZScgdGFnc1xcbiAqIFxcbiAqIEBpbmNsdWRlIFJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcXG4gKi9cXG5cXG5pbXBvcnQgamF2YS50aW1lLmZvcm1hdC5EYXRlVGltZUZvcm1hdHRlclxcbmltcG9ydCBqYXZhLnV0aWwuVVVJRFxcbmltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzXFxuXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgcXVvdGVJZFN0cmluZyA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuaWRzJ1xcblxcbi8vIEZldGNoIHRoZSBxdW90ZSB0cmFuc2FjdGlvbiBpbmZvXFxuZGVmIHF1b3RlUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCBxdW90ZUlkU3RyaW5nKVxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZ2V0KHF1b3RlUGspXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoKVxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBzbHVycGVyLnBhcnNlVGV4dCh0cmFuc2FjdGlvbkluZm9Db250ZW50KVxcblxcbmRlZiBzcmNGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHRyYW5zYWN0aW9uSW5mby5Tb3VyY2VEb2N1bWVudFVSSS50ZXh0KCkpXFxuU3RyaW5nIHF1b3RlQ29udGVudCA9IEZpbGVVdGlscy5yZWFkRmlsZVRvU3RyaW5nKHNyY0ZpbGUpXFxuXFxuLy8gVXBkYXRlIHRyYW5zYWN0aW9uIGluZm8gc3RhdHVzXFxuZGVmIG5vdyA9IGhlbHBlci5ub3coKVxcbmRlZiBmb3JtYXR0ZWREYXRlID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJ5eXl5TU1kZCdUJ0hIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5cXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZSA9ICdTZW50J1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG5wNi50cmFuc2FjdGlvbi5zYXZlKGdyb292eS54bWwuWG1sVXRpbC5zZXJpYWxpemUodHJhbnNhY3Rpb25JbmZvKSwgJ3A2X2RlbW8uVHJhbnNhY3Rpb25JbmZvJywgcXVvdGVQaylcXG5cXG4vLyBXcml0ZSBxdW90ZSBpbiB0aGUgYmxvY2tjaGFpblxcbmRlZiBxdW90ZUlkID0gVVVJRC5mcm9tU3RyaW5nKHF1b3RlSWRTdHJpbmcpXFxuXFxuZGVmIHF1b3RlWE1MID0gc2x1cnBlci5wYXJzZVRleHQocXVvdGVDb250ZW50KVxcbmRlZiByZnFJZCA9IFVVSUQuZnJvbVN0cmluZyhxdW90ZVhNTC5SZXF1ZXN0Rm9yUXVvdGF0aW9uRG9jdW1lbnRSZWZlcmVuY2UuVVVJRC50ZXh0KCkpXFxuXFxuaGVscGVyLnN1Ym1pdFF1b3RlKHF1b3RlSWQsIHJmcUlkLCBub3csIHF1b3RlQ29udGVudClcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNjQ3MjQ3ODg5LCJtaW5FeHRyYVNlcnZpY2VWZXJzaW9uIjoiIiwibWF4RXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJDcmVhdGVSRlFUcmFuc2FjdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkNyZWF0ZVJGUVRyYW5zYWN0aW9uXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkNyZWF0ZSBhIFJlcXVlc3RGb3JRdW90YXRpb24gVUJMIERvY3VtZW50IGFuZCB3cml0ZSBpdCBpbiBhbiBFdGhlcmV1bSBzbWFydCBjb250cmFjdFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODMxMCxcInJldmlzaW9uSWRcIjpcIjYzNjNjMmNlNDdjZGRmNjQyNTM3ZDE3NDM0NjFhYzkwXCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5pbXBvcnQgamF2YS51dGlsLlVVSURcXG5pbXBvcnQgamF2YS51dGlsLlJhbmRvbVxcblxcblxcbi8vIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBidXllciBpbiB0aGUgc3lzdGVtIHRvIGtlZXAgdGhlIERlbW8gQXBwIHNpbXBsZVxcbmRlZiBidXllcklkID0gJzEnXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuLy8gQ2FsY3VsYXRlIGlzc3VlIGRhdGUgYW5kIHRpbWUgZm9yIGdlbmVyYXRlZCBSRlEgdHJhbnNhY3Rpb25cXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIGlzc3VlRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eS1NTS1kZFxcXCIpLmZvcm1hdChub3cpXFxuZGVmIGlzc3VlVGltZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwiSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcblxcblJhbmRvbSByYW5kID0gbmV3IFJhbmRvbSgpXFxuXFxuLy8gUmV0cmlldmUgdGhlIGxpc3Qgb2YgY2F0ZWdvcmllcyBmcm9tIEl0ZW1zIHRhYmxlXFxuZGVmIGl0ZW1SZWNvcmRzID0gcDYudGFibGUubG9va3VwKCdwNl9kZW1vLkl0ZW1zJywgWzpdKVxcblxcblNldDxTdHJpbmc+IGNhdGVnb3JpZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KClcXG5NYXA8U3RyaW5nLFN0cmluZz4gY2F0X3RvX3VvbSA9IG5ldyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+KClcXG5cXG5mb3IgKG15UmVjb3JkIGluIGl0ZW1SZWNvcmRzKSB7XFxuICAgIGRlZiBjYXRlZ29yeSA9IG15UmVjb3JkLkNhdGVnb3J5XFxuICAgIGRlZiB1b20gPSBteVJlY29yZC5VT01cXG5cXG4gICAgaWYgKCFjYXRlZ29yaWVzLmNvbnRhaW5zKGNhdGVnb3J5KSkge1xcbiAgICAgICAgY2F0ZWdvcmllcy5hZGQoY2F0ZWdvcnkpXFxuICAgICAgICBjYXRfdG9fdW9tLnB1dChjYXRlZ29yeSwgdW9tKVxcbiAgICB9XFxufVxcblxcbi8vIEdlbmVyYXRlIHJhbmRvbSBSRlEgbGluZXMgZnJvbSBhdmFpbGFibGUgaXRlbXNcXG5pbnQgbmJMaW5lTWF4ID0gY2F0ZWdvcmllcy5zaXplKClcXG5pbnQgcXVhbnRpdHlNYXggPSAxMFxcbmludCBuYkxpbmVzID0gcmFuZC5uZXh0SW50KG5iTGluZU1heCkgKyAxXFxuXFxuZGVmIHJmcUxpbmVzPSAnJ1xcbmZvciAoaW50IGkgPTA7IGk8IG5iTGluZXM7IGkrKykge1xcbiAgICBcXG4gICAgaW50IGNhdGVnb3J5SW5kZXggPSByYW5kLm5leHRJbnQoY2F0ZWdvcmllcy5zaXplKCkpXFxuICAgIGRlZiBjYXRlZ29yeUFycmF5ID0gY2F0ZWdvcmllcy50b0FycmF5KClcXG4gICAgXFxuICAgIGRlZiBjYXRlZ29yeSA9IGNhdGVnb3J5QXJyYXlbY2F0ZWdvcnlJbmRleF1cXG4gICAgY2F0ZWdvcmllcy5yZW1vdmUoY2F0ZWdvcnkpXFxuXFxuICAgIGRlZiBxdWFudGl0eSA9IHJhbmQubmV4dEludChxdWFudGl0eU1heCArIDEpICsgMVxcbiAgICBkZWYgdW9tID0gY2F0X3RvX3VvbS5nZXQoY2F0ZWdvcnkpXFxuICAgICAgICBcXG4gICAgcmZxTGluZXMgKz0gXFxcIlxcXCJcXFwiPGNhYzpSZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZT5cXG4gICAgICA8Y2JjOklEPiR7aSsxfTwvY2JjOklEPlxcbiAgICAgIDxjYmM6Tm90ZT5zYW1wbGU8L2NiYzpOb3RlPlxcbiAgICAgIDxjYWM6TGluZUl0ZW0+XFxuICAgICAgICAgPGNiYzpJRD4ke2krMX08L2NiYzpJRD5cXG4gICAgICAgICA8Y2JjOlF1YW50aXR5IHVuaXRDb2RlPVxcXCIke3VvbX1cXFwiPiR7cXVhbnRpdHl9PC9jYmM6UXVhbnRpdHk+XFxuICAgICAgICAgPGNhYzpJdGVtPlxcbiAgICAgICAgICAgIDxjYmM6RGVzY3JpcHRpb24+PC9jYmM6RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPGNiYzpOYW1lPiR7ZXNjYXBlWG1sKGNhdGVnb3J5KX08L2NiYzpOYW1lPlxcbiAgICAgICAgICAgIDxjYWM6QnV5ZXJzSXRlbUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgICAgICAgIDxjYmM6SUQ+JHtidXllcklkfTwvY2JjOklEPlxcbiAgICAgICAgICAgIDwvY2FjOkJ1eWVyc0l0ZW1JZGVudGlmaWNhdGlvbj5cXG4gICAgICAgICA8L2NhYzpJdGVtPlxcbiAgICAgIDwvY2FjOkxpbmVJdGVtPlxcbiAgIDwvY2FjOlJlcXVlc3RGb3JRdW90YXRpb25MaW5lPlxcbiAgICBcXFwiXFxcIlxcXCJcXG59XFxuXFxuLy8gR2VuZXJhdGUgdGhlIHRyYW5zYWN0aW9uIElEIGFuZCB0aGUgY29ycmVzcG9uZGluZyBVQkxcXG5kZWYgdHJhbnNhY3Rpb25JZCA9IFVVSUQucmFuZG9tVVVJRCgpXFxuXFxuZGVmIHJlcXVlc3RGb3JRdW90YXRpb25VQkwgPSBcXFwiXFxcIlxcXCI8UmVxdWVzdEZvclF1b3RhdGlvbiB4bWxucz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6UmVxdWVzdEZvclF1b3RhdGlvbi0yXFxcIiB4bWxuczpjYWM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkFnZ3JlZ2F0ZUNvbXBvbmVudHMtMlxcXCIgeG1sbnM6Y2JjPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25CYXNpY0NvbXBvbmVudHMtMlxcXCI+XFxuICAgPGNiYzpVQkxWZXJzaW9uSUQ+Mi4wPC9jYmM6VUJMVmVyc2lvbklEPlxcbiAgIDxjYmM6SUQ+JHt0cmFuc2FjdGlvbklkfTwvY2JjOklEPlxcbiAgIDxjYmM6SXNzdWVEYXRlPiR7ZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgIDxjYmM6SXNzdWVUaW1lPiR7ZXNjYXBlWG1sKGlzc3VlVGltZSl9PC9jYmM6SXNzdWVUaW1lPlxcbiAgIDxjYmM6Tm90ZT5BdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBSRlE8L2NiYzpOb3RlPlxcbiAgIDxjYWM6T3JpZ2luYXRvckN1c3RvbWVyUGFydHk+XFxuICAgICAgPGNhYzpQYXJ0eT5cXG4gICAgICAgICA8Y2FjOlBhcnR5TmFtZT5cXG4gICAgICAgICAgICA8Y2JjOk5hbWU+QnV5ZXIgQ29ycC48L2NiYzpOYW1lPlxcbiAgICAgICAgIDwvY2FjOlBhcnR5TmFtZT5cXG4gICAgICAgICA8Y2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgICAgICAgPGNiYzpTdHJlZXROYW1lPkF2b24gV2F5PC9jYmM6U3RyZWV0TmFtZT5cXG4gICAgICAgICAgICA8Y2JjOkJ1aWxkaW5nTmFtZT5UaGVyZWFib3V0czwvY2JjOkJ1aWxkaW5nTmFtZT5cXG4gICAgICAgICAgICA8Y2JjOkJ1aWxkaW5nTnVtYmVyPjU2QTwvY2JjOkJ1aWxkaW5nTnVtYmVyPlxcbiAgICAgICAgICAgIDxjYmM6Q2l0eU5hbWU+QnJpZGd0b3c8L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgICAgICA8Y2JjOlBvc3RhbFpvbmU+Wlo5OSAxWlo8L2NiYzpQb3N0YWxab25lPlxcbiAgICAgICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5Bdm9uPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgICAgICA8Y2FjOkFkZHJlc3NMaW5lPlxcbiAgICAgICAgICAgICAgIDxjYmM6TGluZT4zcmQgRmxvb3IsIFJvb20gNTwvY2JjOkxpbmU+XFxuICAgICAgICAgICAgPC9jYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgPGNhYzpDb3VudHJ5PlxcbiAgICAgICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPkdCPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgICAgIDwvY2FjOkNvdW50cnk+XFxuICAgICAgICAgPC9jYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICA8L2NhYzpQYXJ0eT5cXG4gICA8L2NhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICA8Y2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgICAgPGNiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPkNPMDAxPC9jYmM6Q3VzdG9tZXJBc3NpZ25lZEFjY291bnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5PlxcbiAgICAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6TmFtZT5TZWxsZXIgSW5jLjwvY2JjOk5hbWU+XFxuICAgICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QnVzeSBTdHJlZXQ8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOYW1lPlRoZXJlYWJvdXRzPC9jYmM6QnVpbGRpbmdOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+NTZBPC9jYmM6QnVpbGRpbmdOdW1iZXI+XFxuICAgICAgICAgICAgPGNiYzpDaXR5TmFtZT5GYXJ0aGluZzwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6UG9zdGFsWm9uZT5BQTk5IDFCQjwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PkhlcmVtb3V0aHNoaXJlPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgICAgICA8Y2FjOkFkZHJlc3NMaW5lPlxcbiAgICAgICAgICAgICAgIDxjYmM6TGluZT5UaGUgUm91bmRhYm91dDwvY2JjOkxpbmU+XFxuICAgICAgICAgICAgPC9jYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgPGNhYzpDb3VudHJ5PlxcbiAgICAgICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPkdCPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgICAgIDwvY2FjOkNvdW50cnk+XFxuICAgICAgICAgPC9jYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICA8L2NhYzpQYXJ0eT5cXG4gICA8L2NhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgICR7cmZxTGluZXN9XFxuPC9SZXF1ZXN0Rm9yUXVvdGF0aW9uPlxcblxcXCJcXFwiXFxcIlxcblxcbi8vIFdyaXRlIHRoZSB0cmFuc2FjdGlvbiBpbiB0aGUgYmxvY2tjaGFpblxcbmhlbHBlci5zdWJtaXRSRlEodHJhbnNhY3Rpb25JZCwgbm93LCByZXF1ZXN0Rm9yUXVvdGF0aW9uVUJMKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTgzMTAsIm1pbkV4dHJhU2VydmljZVZlcnNpb24iOiIiLCJtYXhFeHRyYVNlcnZpY2VWZXJzaW9uIjoiIn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJXRl9SZXF1ZXN0Rm9yUXVvdGF0aW9uXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MTM4LFwicmV2aXNpb25JZFwiOlwiYWJlMzM2Y2ZiNGFmZTNjMjZhZTY4ZGY3NTU3OWEzNTVcIixcIm1haW5TY3JpcHRcIjpcImltcG9ydCBncm9vdnkuanNvbi4qXFxuaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5pby5GaWxlVXRpbHNcXG5cXG5kZWYgeG1sIFxcdFxcdD0gcDYucGlwZWxpbmUuZ2V0WG1sICd4bWwnXFxubG9nLmRlYnVnICdYTUwgPT09PT09PiAnKyB4bWxcXG5cXG5wNi5waXBlbGluZS52YXJpYWJsZXMoKS5lYWNoKCkgeyBsb2cuZGVidWcgXFxcIlBJUEVMSU5FIFZBUiAke2l0fVxcXCIgfVxcblxcbmRlZiBtcGsgXFx0XFx0PSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKHhtbC5pdGVtRGF0YVR5cGUudGV4dCgpLCB4bWwuaXRlbUlkcy50ZXh0KCkuc3BsaXQoJ1xcXFxcXFxcLicpKVxcbmRlZiBtZXNzYWdlIFxcdD0gcDYudHJhbnNhY3Rpb24uZ2V0KG1waylcXG5cXG5sb2cuZGVidWcgJ01FU1NBR0UgPT09PT09PiAnKyBtZXNzYWdlXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoZmFsc2UsIHRydWUpXFxuZGVmIHRyYW5zYWN0aW9uID0gc2x1cnBlci5wYXJzZVRleHQobWVzc2FnZSlcXG5cXG5kZWYgbXlVUkkgPSB0cmFuc2FjdGlvbi5Tb3VyY2VEb2N1bWVudFVSSS50ZXh0KClcXG4gICAgICAgIFxcbmRlZiAgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybChteVVSSSlcXG4gICAgICAgIFxcblN0cmluZyByZnFDb250ZW50ID0gRmlsZVV0aWxzLnJlYWRGaWxlVG9TdHJpbmcoc3JjRmlsZSlcXG5cXG5kZWYgcmZxID0gc2x1cnBlci5wYXJzZVRleHQocmZxQ29udGVudClcXG5cXG5kZWYgcmZxTGluZXMgPSBcXFwiXFxcIlxcbnJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5lYWNoeyByZnFMaW5lIC0+IFxcblxcbiAgICBkZWYgaXRlbUNhdGVnb3J5ID0gcmZxTGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpXFxuICAgIFxcbiAgICBkZWYgaXRlbVJlY29yZHMgPSBwNi50YWJsZS5sb29rdXAoJ3A2X2RlbW8uSXRlbXMnLCBbJ0NhdGVnb3J5JzppdGVtQ2F0ZWdvcnldKVxcblxcbiAgICBkZWYgaXRlbXM9ICcnXFxuICAgIGZvcihteVJlY29yZCBpbiBpdGVtUmVjb3Jkcykge1xcbiAgICAgICAgZGVmIGRlc2NyaXB0aW9uID0gbXlSZWNvcmQuRGVzY3JpcHRpb25cXG4gICAgICAgIGRlZiBpZCA9IG15UmVjb3JkLklkXFxuICAgICAgICBkZWYgdW9tID0gbXlSZWNvcmQuVU9NXFxuICAgICAgICBkZWYgdW5pdFByaWNlID0gbXlSZWNvcmQuVW5pdFByaWNlXFxuICAgICAgICBkZWYgY3VycmVuY3kgPSBteVJlY29yZC5DdXJyZW5jeVxcbiAgICBcXG4gICAgICAgIGlmICghJycuZXF1YWxzKGl0ZW1zKSkge1xcbiAgICAgICAgICAgIGl0ZW1zICs9ICcsXFxcXHJcXFxcbidcXG4gICAgICAgIH0gICAgICAgIFxcbiAgICAgICAgaXRlbXMgKz0gJ3sgXFxcImlkXFxcIjogJytKc29uT3V0cHV0LnRvSnNvbihkZXNjcmlwdGlvbikrJywgXFxcInByaWNlXFxcIjogJytKc29uT3V0cHV0LnRvSnNvbih1bml0UHJpY2UpKycsIFxcXCJ1bml0XFxcIjogJytKc29uT3V0cHV0LnRvSnNvbihjdXJyZW5jeSkrJywgXFxcImN1cnJlbmN5XFxcIjogJytKc29uT3V0cHV0LnRvSnNvbihjdXJyZW5jeSkrJywgXFxcInVvbVxcXCI6ICcrSnNvbk91dHB1dC50b0pzb24odW9tKSsnIH0nXFxuICAgIH0gICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgIFxcbiAgICBsb2cuZGVidWcgJ0lURU1TID0+ICcraXRlbXMgIFxcblxcblxcbiAgICBkZWYgb25lTGluZSA9IFxcXCJcXFwiXFxcIiB7XFxuICAgICAgICAgICAgIFxcXCJpZFxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5JRC50ZXh0KCkpfSxcXG4gICAgICAgICAgICAgXFxcIm5vdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcUxpbmUuTGluZUl0ZW0uSXRlbS5OYW1lLnRleHQoKSl9LFxcbiAgICAgICAgICAgICBcXFwicXVhbnRpdHlcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcUxpbmUuTGluZUl0ZW0uUXVhbnRpdHkudGV4dCgpKX0sXFxuICAgICAgICAgICAgIFxcXCJpdGVtc1xcXCI6IFtcXG4gICAgICAgICAgICAgICAgICR7aXRlbXN9XFxuICAgICAgICAgICAgXVxcbiAgICAgICAgfVxcXCJcXFwiXFxcIlxcbiAgICAgICAgXFxuXFxuICAgIGlmICghXFxcIlxcXCIuZXF1YWxzKHJmcUxpbmVzKSkge1xcbiAgICAgICAgcmZxTGluZXMgKz0gXFxcIixcXFxcclxcXFxuXFxcIlxcbiAgICB9XFxuICAgICByZnFMaW5lcyArPSBvbmVMaW5lXFxufVxcblxcbmxvZy5kZWJ1ZyAnUkZRIExJTkVTID0+ICcrcmZxTGluZXNcXG5cXG5kZWYgbW9kZWwgPSBcXFwiXFxcIlxcXCJ7XFxuICAgIFxcXCJyZnFcXFwiOiB7IFxcbiAgICAgICAgXFxcImlkXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnEuSUQudGV4dCgpKX0sXFxuICAgICAgICBcXFwiaXNzdWVEYXRlXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnEuSXNzdWVEYXRlLnRleHQoKSl9LFxcbiAgICAgICAgXFxcImlzc3VlVGltZVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxLklzc3VlVGltZS50ZXh0KCkpfSxcXG4gICAgICAgIFxcXCJub3RlXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnEuTm90ZS50ZXh0KCkpfVxcbiAgICB9LFxcbiAgICBcXFwibGluZXNcXFwiOiBbXFxuICAgICAgICAke3JmcUxpbmVzfVxcbiAgICBdXFxufVxcXCJcXFwiXFxcIlxcblxcbmxvZy5kZWJ1ZyAnTU9ERUwgPT4gJyttb2RlbFxcblxcbmRlZiBmb3JtID0gcDYucmVzb3VyY2UuZ2V0KCAnV0ZfUkZRX0Zvcm0nIClcXG5hc3NlcnQgZm9ybSAhPSBudWxsIDogXFxcIlVuYWJsZSB0byBmaW5kIHRoZSBjb21waWxlZCByZXNvdXJjZSBXRl9SRlFfRm9ybVxcXCJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ21vZGVsJywgbW9kZWxcXG5wNi5waXBlbGluZS5wdXQgJ2Zvcm0nLCBmb3JtXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOlt7XCJuYW1lXCI6XCJXRl9SRlFfRm9ybVwiLFwidHlwZVwiOlwiVFlQRVNDUklQVFwiLFwiY29udGVudFwiOlwiLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxcbi8qKioqKiovIFxcdC8vIFRoZSBtb2R1bGUgY2FjaGVcXG4vKioqKioqLyBcXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cXG4vKioqKioqLyBcXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHRcXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcXG4vKioqKioqLyBcXHRcXHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xcbi8qKioqKiovIFxcdFxcdFxcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xcbi8qKioqKiovIFxcdFxcdH1cXG4vKioqKioqLyBcXHRcXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxcbi8qKioqKiovIFxcdFxcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcXG4vKioqKioqLyBcXHRcXHRcXHRpOiBtb2R1bGVJZCxcXG4vKioqKioqLyBcXHRcXHRcXHRsOiBmYWxzZSxcXG4vKioqKioqLyBcXHRcXHRcXHRleHBvcnRzOiB7fVxcbi8qKioqKiovIFxcdFxcdH07XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHRcXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cXG4vKioqKioqLyBcXHRcXHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcXG4vKioqKioqLyBcXHRcXHRtb2R1bGUubCA9IHRydWU7XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHRcXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxcbi8qKioqKiovIFxcdFxcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcXG4vKioqKioqLyBcXHR9XFxuLyoqKioqKi9cXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xcbi8qKioqKiovIFxcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xcbi8qKioqKiovIFxcdFxcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcXG4vKioqKioqLyBcXHRcXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xcbi8qKioqKiovIFxcdFxcdFxcdFxcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXFxuLyoqKioqKi8gXFx0XFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG4vKioqKioqLyBcXHRcXHRcXHRcXHRnZXQ6IGdldHRlclxcbi8qKioqKiovIFxcdFxcdFxcdH0pO1xcbi8qKioqKiovIFxcdFxcdH1cXG4vKioqKioqLyBcXHR9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcXG4vKioqKioqLyBcXHRcXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cXG4vKioqKioqLyBcXHRcXHRcXHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxcbi8qKioqKiovIFxcdFxcdFxcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XFxuLyoqKioqKi8gXFx0XFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xcbi8qKioqKiovIFxcdFxcdHJldHVybiBnZXR0ZXI7XFxuLyoqKioqKi8gXFx0fTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxcbi8qKioqKiovIFxcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXFxcIlxcXCI7XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcXG4vKioqKioqLyBcXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA5MCk7XFxuLyoqKioqKi8gfSlcXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKioqKiovIChbXFxuLyogMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0O1xcblxcbi8qKiovIH0pLFxcbi8qIDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXFxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xcblxcbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxcblxcbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XFxuXFxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XFxufVxcbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xcbn1cXG4oZnVuY3Rpb24gKCkge1xcbiAgICB0cnkge1xcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xcbiAgICAgICAgfVxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XFxuICAgIH1cXG59ICgpKVxcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XFxuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XFxuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XFxuICAgIH1cXG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XFxuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XFxuICAgIH0gY2F0Y2goZSl7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcXG4gICAgICAgIH0gY2F0Y2goZSl7XFxuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG5cXG59XFxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcXG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xcbiAgICB9XFxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XFxuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XFxuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcXG4gICAgfSBjYXRjaCAoZSl7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpe1xcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxcbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcblxcblxcbn1cXG52YXIgcXVldWUgPSBbXTtcXG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcXG52YXIgY3VycmVudFF1ZXVlO1xcbnZhciBxdWV1ZUluZGV4ID0gLTE7XFxuXFxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcXG4gICAgICAgIHJldHVybjtcXG4gICAgfVxcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcXG4gICAgfVxcbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XFxuICAgICAgICBkcmFpblF1ZXVlKCk7XFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcXG4gICAgaWYgKGRyYWluaW5nKSB7XFxuICAgICAgICByZXR1cm47XFxuICAgIH1cXG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XFxuICAgIGRyYWluaW5nID0gdHJ1ZTtcXG5cXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcXG4gICAgd2hpbGUobGVuKSB7XFxuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcXG4gICAgICAgIHF1ZXVlID0gW107XFxuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XFxuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xcbiAgICB9XFxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XFxuICAgIGRyYWluaW5nID0gZmFsc2U7XFxuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcXG59XFxuXFxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcXG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcXG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcXG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XFxuICAgIH1cXG59O1xcblxcbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcXG4gICAgdGhpcy5mdW4gPSBmdW47XFxuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcXG59XFxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcXG59O1xcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XFxucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcXG5wcm9jZXNzLmVudiA9IHt9O1xcbnByb2Nlc3MuYXJndiA9IFtdO1xcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcXG5cXG5mdW5jdGlvbiBub29wKCkge31cXG5cXG5wcm9jZXNzLm9uID0gbm9vcDtcXG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcXG5wcm9jZXNzLm9uY2UgPSBub29wO1xcbnByb2Nlc3Mub2ZmID0gbm9vcDtcXG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcXG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XFxucHJvY2Vzcy5lbWl0ID0gbm9vcDtcXG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XFxucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcXG5cXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XFxuXFxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xcbn07XFxuXFxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcXG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xcbn07XFxucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNBcnJheSgnYWJjJyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2ZyZWVHbG9iYWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTEpO1xcblxcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXFxudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XFxuXFxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXFxudmFyIHJvb3QgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2ZyZWVHbG9iYWxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChyb290KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXFxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc09iamVjdCh7fSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcXG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNPYmplY3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXFxcIm9iamVjdFxcXCIuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzT2JqZWN0TGlrZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzTmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0VmFsdWVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA0KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxcbiAqL1xcbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xcbiAgdmFyIHZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0VmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5KTtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNOYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXROYXRpdmUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UmF3VGFnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19vYmplY3RUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NSk7XFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXFxuICovXFxuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcXG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xcbiAgfVxcbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxcbiAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFJhd1RhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpXFxuICAgIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fb2JqZWN0VG9TdHJpbmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUdldFRhZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3BsaWNlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0SW5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjIwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRJbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2RlZXBFcXVhbF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2RlbGV0ZUluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fa2V5c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjQpO1xcblxcblxcblxcblxcblxcblxcblxcbnZhciBzdHJ1Y3R1cmUgPSB7XFxuICBlbXB0eToge30sXFxuICBlbXB0eUxpc3Q6IFtdLFxcbiAgZ2V0SW46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0SW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICBzZXRJbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRJbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIGRlZXBFcXVhbDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19kZWVwRXF1YWxfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICBkZWxldGVJbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19kZWxldGVJbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIGZyb21KUzogZnVuY3Rpb24gZnJvbUpTKHZhbHVlKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH0sXFxuICBrZXlzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICBzaXplOiBmdW5jdGlvbiBzaXplKGFycmF5KSB7XFxuICAgIHJldHVybiBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XFxuICB9LFxcbiAgc3BsaWNlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3NwbGljZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHRvSlM6IGZ1bmN0aW9uIHRvSlModmFsdWUpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RydWN0dXJlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBQZXJmb3JtcyBhXFxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XFxuICpcXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmVxKCdhJywgJ2EnKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmVxKE5hTiwgTmFOKTtcXG4gKiAvLyA9PiB0cnVlXFxuICovXFxuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XFxuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZXEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N5bWJvbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XFxuXFxuXFxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXFxudmFyIElORklOSVRZID0gMSAvIDA7XFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxcbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXFxuICovXFxuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9XFxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9ICh0b0tleSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbXBvbmVudHNfUHJvdmlkZXJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19jb21wb25lbnRzX2Nvbm5lY3RBZHZhbmNlZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY29ubmVjdF9jb25uZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwMCk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgUHJvdmlkZXIgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVQcm92aWRlciAqL1xcbi8qIHVudXNlZCBoYXJtb255IHJlZXhwb3J0IGNvbm5lY3RBZHZhbmNlZCAqL1xcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jb25uZWN0X2Nvbm5lY3RfX1tcXFwiYVxcXCJdOyB9KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG4vKipcXG4gKiBVc2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuXFxuICpcXG4gKiBQcm92aWRlIHNwcmludGYtc3R5bGUgZm9ybWF0IChvbmx5ICVzIGlzIHN1cHBvcnRlZCkgYW5kIGFyZ3VtZW50c1xcbiAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZVxcbiAqIGV4cGVjdGluZy5cXG4gKlxcbiAqIFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50XFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxcbiAqL1xcblxcbnZhciBpbnZhcmlhbnQgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO1xcbiAgICB9XFxuICB9XFxuXFxuICBpZiAoIWNvbmRpdGlvbikge1xcbiAgICB2YXIgZXJyb3I7XFxuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxcbiAgICAgICAgJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcgK1xcbiAgICAgICAgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJ1xcbiAgICAgICk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XFxuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcXG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihcXG4gICAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107IH0pXFxuICAgICAgKTtcXG4gICAgICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICB9XFxuXFxuICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWVcXG4gICAgdGhyb3cgZXJyb3I7XFxuICB9XFxufTtcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGludmFyaWFudDtcXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18sIF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fOy8qIVxcbiAgQ29weXJpZ2h0IChjKSAyMDE2IEplZCBXYXRzb24uXFxuICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxcbiAgaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xcbiovXFxuLyogZ2xvYmFsIGRlZmluZSAqL1xcblxcbihmdW5jdGlvbiAoKSB7XFxuXFx0J3VzZSBzdHJpY3QnO1xcblxcblxcdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcXG5cXG5cXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcXG5cXHRcXHR2YXIgY2xhc3NlcyA9IFtdO1xcblxcblxcdFxcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XFxuXFx0XFx0XFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcXG5cXHRcXHRcXHRpZiAoIWFyZykgY29udGludWU7XFxuXFxuXFx0XFx0XFx0dmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnO1xcblxcblxcdFxcdFxcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xcblxcdFxcdFxcdFxcdGNsYXNzZXMucHVzaChhcmcpO1xcblxcdFxcdFxcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XFxuXFx0XFx0XFx0XFx0Y2xhc3Nlcy5wdXNoKGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKSk7XFxuXFx0XFx0XFx0fSBlbHNlIGlmIChhcmdUeXBlID09PSAnb2JqZWN0Jykge1xcblxcdFxcdFxcdFxcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcXG5cXHRcXHRcXHRcXHRcXHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XFxuXFx0XFx0XFx0XFx0XFx0XFx0Y2xhc3Nlcy5wdXNoKGtleSk7XFxuXFx0XFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdFxcdH1cXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcblxcdFxcdHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcXG5cXHR9XFxuXFxuXFx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XFxuXFx0XFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xcblxcdH0gZWxzZSBpZiAodHJ1ZSkge1xcblxcdFxcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcXG5cXHRcXHQhKF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18gPSBbXSwgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gPSAoZnVuY3Rpb24gKCkge1xcblxcdFxcdFxcdHJldHVybiBjbGFzc05hbWVzO1xcblxcdFxcdH0pLmFwcGx5KGV4cG9ydHMsIF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18pLFxcblxcdFxcdFxcdFxcdF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fICE9PSB1bmRlZmluZWQgJiYgKG1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18pKTtcXG5cXHR9IGVsc2Uge1xcblxcdFxcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcXG5cXHR9XFxufSgpKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlNYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvcHlBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc1N5bWJvbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RyaW5nVG9QYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X190b0tleV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9TdHJpbmdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xcblxcblxcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8udG9QYXRoKCdhLmIuYycpO1xcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxcbiAqXFxuICogXy50b1BhdGgoJ2FbMF0uYi5jJyk7XFxuICogLy8gPT4gWydhJywgJzAnLCAnYicsICdjJ11cXG4gKi9cXG5mdW5jdGlvbiB0b1BhdGgodmFsdWUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5TWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuICB9XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSA/IFt2YWx1ZV0gOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19jb3B5QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0cmluZ1RvUGF0aF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9TdHJpbmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9ICh0b1BhdGgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc1N5bWJvbCgnYWJjJyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxcbiAgICAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID09IHN5bWJvbFRhZyk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzU3ltYm9sKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgU3ltYm9sID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLlN5bWJvbDtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChTeW1ib2wpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xcbnZhciBuYXRpdmVDcmVhdGUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdCwgJ2NyZWF0ZScpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG5hdGl2ZUNyZWF0ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpc3RDYWNoZUNsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbGlzdENhY2hlRGVsZXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbGlzdENhY2hlR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbGlzdENhY2hlSGFzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fbGlzdENhY2hlU2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMyk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcXG5cXG4gIHRoaXMuY2xlYXIoKTtcXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xcbiAgfVxcbn1cXG5cXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saXN0Q2FjaGVDbGVhcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbGlzdENhY2hlRGVsZXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saXN0Q2FjaGVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2xpc3RDYWNoZUhhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fbGlzdENhY2hlU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKExpc3RDYWNoZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXFxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXFxuICovXFxuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcXG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XFxuICB3aGlsZSAobGVuZ3RoLS0pIHtcXG4gICAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2VxX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XFxuICAgICAgcmV0dXJuIGxlbmd0aDtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIC0xO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NvY0luZGV4T2YpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0tleWFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTE1KTtcXG5cXG5cXG4vKipcXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxcbiAqL1xcbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcXG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzS2V5YWJsZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoa2V5KVxcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxcbiAgICA6IGRhdGEubWFwO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRNYXBEYXRhKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZGVmaW5lUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTYpO1xcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XFxuICogdmFsdWUgY2hlY2tzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XFxuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZGVmaW5lUHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZGVmaW5lUHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5LCB7XFxuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcXG4gICAgfSk7XFxuICB9IGVsc2Uge1xcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlQXNzaWduVmFsdWUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3JpZ2luYWxNb2R1bGUpIHtcXG5cXHRpZighb3JpZ2luYWxNb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XFxuXFx0XFx0dmFyIG1vZHVsZSA9IE9iamVjdC5jcmVhdGUob3JpZ2luYWxNb2R1bGUpO1xcblxcdFxcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxcblxcdFxcdGlmKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xcblxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFxcXCJsb2FkZWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUubDtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImlkXFxcIiwge1xcblxcdFxcdFxcdGVudW1lcmFibGU6IHRydWUsXFxuXFx0XFx0XFx0Z2V0OiBmdW5jdGlvbigpIHtcXG5cXHRcXHRcXHRcXHRyZXR1cm4gbW9kdWxlLmk7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH0pO1xcblxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFxcXCJleHBvcnRzXFxcIiwge1xcblxcdFxcdFxcdGVudW1lcmFibGU6IHRydWUsXFxuXFx0XFx0fSk7XFxuXFx0XFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XFxuXFx0fVxcblxcdHJldHVybiBtb2R1bGU7XFxufTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xcblxcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXFxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLmxlbmd0aCkgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRnVuY3Rpb25fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcnJheUxpa2UpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFByb3RvdHlwZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXFxudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXFxudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC44LjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYSA9IDE7XFxuICogfVxcbiAqXFxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XFxuICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgdmFyIHByb3RvID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxuICBpZiAocHJvdG8gPT09IG51bGwpIHtcXG4gICAgcmV0dXJuIHRydWU7XFxuICB9XFxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNQbGFpbk9iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IGZvcm1hdE5hbWU7XFxuZnVuY3Rpb24gZm9ybWF0TmFtZShjb250ZXh0LCBuYW1lKSB7XFxuICB2YXIgc2VjdGlvblByZWZpeCA9IGNvbnRleHQuX3JlZHV4Rm9ybS5zZWN0aW9uUHJlZml4O1xcblxcbiAgcmV0dXJuICFzZWN0aW9uUHJlZml4ID8gbmFtZSA6IHNlY3Rpb25QcmVmaXggKyBcXFwiLlxcXCIgKyBuYW1lO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhY3Rpb25UeXBlc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYWN0aW9uVHlwZXM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5SW5zZXJ0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheUluc2VydDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlNb3ZlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheU1vdmU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UG9wXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVBvcDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlQdXNoXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVB1c2g7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UmVtb3ZlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVJlbW92ZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlSZW1vdmVBbGxcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UmVtb3ZlQWxsOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVNoaWZ0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVNoaWZ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVNwbGljZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlTcGxpY2U7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U3dhcFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlTd2FwOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVVuc2hpZnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5VW5zaGlmdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXV0b2ZpbGxcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGF1dG9maWxsOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJibHVyXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBibHVyOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJjaGFuZ2VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNoYW5nZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZGVzdHJveVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGVzdHJveTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiRmllbGRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZHNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZpZWxkczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiRmllbGRBcnJheVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGRBcnJheTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiRm9ybVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRm9ybTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiRm9ybVNlY3Rpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZvcm1TZWN0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJmb2N1c1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZm9jdXM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImZvcm1WYWx1ZVNlbGVjdG9yXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmb3JtVmFsdWVTZWxlY3RvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybU5hbWVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtTmFtZXM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImdldEZvcm1WYWx1ZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1WYWx1ZXM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImdldEZvcm1Jbml0aWFsVmFsdWVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtSW5pdGlhbFZhbHVlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybVN5bmNFcnJvcnNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1TeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtQXN5bmNFcnJvcnNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1Bc3luY0Vycm9yczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybVN5bmNXYXJuaW5nc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVN5bmNXYXJuaW5nczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybVN1Ym1pdEVycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVN1Ym1pdEVycm9yczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaW5pdGlhbGl6ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5pdGlhbGl6ZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNEaXJ0eVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNEaXJ0eTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNJbnZhbGlkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc0ludmFsaWQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImlzUHJpc3RpbmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzUHJpc3RpbmU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImlzVmFsaWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzVmFsaWQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImlzU3VibWl0dGluZ1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNTdWJtaXR0aW5nOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJoYXNTdWJtaXRTdWNjZWVkZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGhhc1N1Ym1pdFN1Y2NlZWRlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaGFzU3VibWl0RmFpbGVkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBoYXNTdWJtaXRGYWlsZWQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInByb3BUeXBlc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcHJvcFR5cGVzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWR1Y2VyXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWR1Y2VyOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWR1eEZvcm1cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlZHV4Rm9ybTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwicmVnaXN0ZXJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVnaXN0ZXJGaWVsZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwicmVzZXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlc2V0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzZXRTdWJtaXRGYWlsZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNldFN1Ym1pdEZhaWxlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic2V0U3VibWl0U3VjY2VlZGVkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzZXRTdWJtaXRTdWNjZWVkZWQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0YXJ0QXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGFydEFzeW5jVmFsaWRhdGlvbjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0U3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wQXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wQXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wU3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU3VibWlzc2lvbkVycm9yXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdWJtaXNzaW9uRXJyb3I7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInRvdWNoXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB0b3VjaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidW5yZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1bnJlZ2lzdGVyRmllbGQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInVudG91Y2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVudG91Y2g7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInZhbHVlc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdmFsdWVzOyB9KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVBbGxfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG5cXG5cXG5cXG52YXIgX2NyZWF0ZUFsbCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUFsbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbnZhciBhY3Rpb25UeXBlcyA9IF9jcmVhdGVBbGwuYWN0aW9uVHlwZXMsXFxuICAgIGFycmF5SW5zZXJ0ID0gX2NyZWF0ZUFsbC5hcnJheUluc2VydCxcXG4gICAgYXJyYXlNb3ZlID0gX2NyZWF0ZUFsbC5hcnJheU1vdmUsXFxuICAgIGFycmF5UG9wID0gX2NyZWF0ZUFsbC5hcnJheVBvcCxcXG4gICAgYXJyYXlQdXNoID0gX2NyZWF0ZUFsbC5hcnJheVB1c2gsXFxuICAgIGFycmF5UmVtb3ZlID0gX2NyZWF0ZUFsbC5hcnJheVJlbW92ZSxcXG4gICAgYXJyYXlSZW1vdmVBbGwgPSBfY3JlYXRlQWxsLmFycmF5UmVtb3ZlQWxsLFxcbiAgICBhcnJheVNoaWZ0ID0gX2NyZWF0ZUFsbC5hcnJheVNoaWZ0LFxcbiAgICBhcnJheVNwbGljZSA9IF9jcmVhdGVBbGwuYXJyYXlTcGxpY2UsXFxuICAgIGFycmF5U3dhcCA9IF9jcmVhdGVBbGwuYXJyYXlTd2FwLFxcbiAgICBhcnJheVVuc2hpZnQgPSBfY3JlYXRlQWxsLmFycmF5VW5zaGlmdCxcXG4gICAgYXV0b2ZpbGwgPSBfY3JlYXRlQWxsLmF1dG9maWxsLFxcbiAgICBibHVyID0gX2NyZWF0ZUFsbC5ibHVyLFxcbiAgICBjaGFuZ2UgPSBfY3JlYXRlQWxsLmNoYW5nZSxcXG4gICAgZGVzdHJveSA9IF9jcmVhdGVBbGwuZGVzdHJveSxcXG4gICAgRmllbGQgPSBfY3JlYXRlQWxsLkZpZWxkLFxcbiAgICBGaWVsZHMgPSBfY3JlYXRlQWxsLkZpZWxkcyxcXG4gICAgRmllbGRBcnJheSA9IF9jcmVhdGVBbGwuRmllbGRBcnJheSxcXG4gICAgRm9ybSA9IF9jcmVhdGVBbGwuRm9ybSxcXG4gICAgRm9ybVNlY3Rpb24gPSBfY3JlYXRlQWxsLkZvcm1TZWN0aW9uLFxcbiAgICBmb2N1cyA9IF9jcmVhdGVBbGwuZm9jdXMsXFxuICAgIGZvcm1WYWx1ZVNlbGVjdG9yID0gX2NyZWF0ZUFsbC5mb3JtVmFsdWVTZWxlY3RvcixcXG4gICAgZ2V0Rm9ybU5hbWVzID0gX2NyZWF0ZUFsbC5nZXRGb3JtTmFtZXMsXFxuICAgIGdldEZvcm1WYWx1ZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1WYWx1ZXMsXFxuICAgIGdldEZvcm1Jbml0aWFsVmFsdWVzID0gX2NyZWF0ZUFsbC5nZXRGb3JtSW5pdGlhbFZhbHVlcyxcXG4gICAgZ2V0Rm9ybVN5bmNFcnJvcnMgPSBfY3JlYXRlQWxsLmdldEZvcm1TeW5jRXJyb3JzLFxcbiAgICBnZXRGb3JtQXN5bmNFcnJvcnMgPSBfY3JlYXRlQWxsLmdldEZvcm1Bc3luY0Vycm9ycyxcXG4gICAgZ2V0Rm9ybVN5bmNXYXJuaW5ncyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVN5bmNXYXJuaW5ncyxcXG4gICAgZ2V0Rm9ybVN1Ym1pdEVycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVN1Ym1pdEVycm9ycyxcXG4gICAgaW5pdGlhbGl6ZSA9IF9jcmVhdGVBbGwuaW5pdGlhbGl6ZSxcXG4gICAgaXNEaXJ0eSA9IF9jcmVhdGVBbGwuaXNEaXJ0eSxcXG4gICAgaXNJbnZhbGlkID0gX2NyZWF0ZUFsbC5pc0ludmFsaWQsXFxuICAgIGlzUHJpc3RpbmUgPSBfY3JlYXRlQWxsLmlzUHJpc3RpbmUsXFxuICAgIGlzVmFsaWQgPSBfY3JlYXRlQWxsLmlzVmFsaWQsXFxuICAgIGlzU3VibWl0dGluZyA9IF9jcmVhdGVBbGwuaXNTdWJtaXR0aW5nLFxcbiAgICBoYXNTdWJtaXRTdWNjZWVkZWQgPSBfY3JlYXRlQWxsLmhhc1N1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgaGFzU3VibWl0RmFpbGVkID0gX2NyZWF0ZUFsbC5oYXNTdWJtaXRGYWlsZWQsXFxuICAgIHByb3BUeXBlcyA9IF9jcmVhdGVBbGwucHJvcFR5cGVzLFxcbiAgICByZWR1Y2VyID0gX2NyZWF0ZUFsbC5yZWR1Y2VyLFxcbiAgICByZWR1eEZvcm0gPSBfY3JlYXRlQWxsLnJlZHV4Rm9ybSxcXG4gICAgcmVnaXN0ZXJGaWVsZCA9IF9jcmVhdGVBbGwucmVnaXN0ZXJGaWVsZCxcXG4gICAgcmVzZXQgPSBfY3JlYXRlQWxsLnJlc2V0LFxcbiAgICBzZXRTdWJtaXRGYWlsZWQgPSBfY3JlYXRlQWxsLnNldFN1Ym1pdEZhaWxlZCxcXG4gICAgc2V0U3VibWl0U3VjY2VlZGVkID0gX2NyZWF0ZUFsbC5zZXRTdWJtaXRTdWNjZWVkZWQsXFxuICAgIHN0YXJ0QXN5bmNWYWxpZGF0aW9uID0gX2NyZWF0ZUFsbC5zdGFydEFzeW5jVmFsaWRhdGlvbixcXG4gICAgc3RhcnRTdWJtaXQgPSBfY3JlYXRlQWxsLnN0YXJ0U3VibWl0LFxcbiAgICBzdG9wQXN5bmNWYWxpZGF0aW9uID0gX2NyZWF0ZUFsbC5zdG9wQXN5bmNWYWxpZGF0aW9uLFxcbiAgICBzdG9wU3VibWl0ID0gX2NyZWF0ZUFsbC5zdG9wU3VibWl0LFxcbiAgICBzdWJtaXQgPSBfY3JlYXRlQWxsLnN1Ym1pdCxcXG4gICAgU3VibWlzc2lvbkVycm9yID0gX2NyZWF0ZUFsbC5TdWJtaXNzaW9uRXJyb3IsXFxuICAgIHRvdWNoID0gX2NyZWF0ZUFsbC50b3VjaCxcXG4gICAgdW5yZWdpc3RlckZpZWxkID0gX2NyZWF0ZUFsbC51bnJlZ2lzdGVyRmllbGQsXFxuICAgIHVudG91Y2ggPSBfY3JlYXRlQWxsLnVudG91Y2gsXFxuICAgIHZhbHVlcyA9IF9jcmVhdGVBbGwudmFsdWVzO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX0lOU0VSVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfSU5TRVJUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9NT1ZFXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9NT1ZFOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9QT1BcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1BPUDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfUFVTSFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUFVTSDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfUkVNT1ZFXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9SRU1PVkU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX1JFTU9WRV9BTExcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1JFTU9WRV9BTEw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX1NISUZUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9TSElGVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU1BMSUNFXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9TUExJQ0U7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX1VOU0hJRlRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1VOU0hJRlQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX1NXQVBcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NXQVA7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFVVE9GSUxMXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBVVRPRklMTDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQkxVUlxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQkxVUjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQ0hBTkdFXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDSEFOR0U7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX1NVQk1JVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ0xFQVJfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJDTEVBUl9TVUJNSVRfRVJST1JTXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9TVUJNSVRfRVJST1JTOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJDTEVBUl9BU1lOQ19FUlJPUlxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ0xFQVJfQVNZTkNfRVJST1I7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkRFU1RST1lcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERFU1RST1k7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkZPQ1VTXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGT0NVUzsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiSU5JVElBTElaRVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSU5JVElBTElaRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiUkVHSVNURVJfRklFTERcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJFR0lTVEVSX0ZJRUxEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJSRVNFVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUkVTRVQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNFVF9TVUJNSVRfRkFJTEVEXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTRVRfU1VCTUlUX0ZBSUxFRDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNFVF9TVUJNSVRfU1VDQ0VFREVEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVEFSVF9BU1lOQ19WQUxJREFUSU9OXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTVEFSVF9BU1lOQ19WQUxJREFUSU9OOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVEFSVF9TVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUQVJUX1NVQk1JVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU1RPUF9BU1lOQ19WQUxJREFUSU9OXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTVE9QX0FTWU5DX1ZBTElEQVRJT047IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUT1BfU1VCTUlUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTVE9QX1NVQk1JVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU1VCTUlUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTVUJNSVQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlRPVUNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUT1VDSDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVU5SRUdJU1RFUl9GSUVMRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVU5SRUdJU1RFUl9GSUVMRDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVU5UT1VDSFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVU5UT1VDSDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVVBEQVRFX1NZTkNfRVJST1JTXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVUERBVEVfU1lOQ19FUlJPUlM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlVQREFURV9TWU5DX1dBUk5JTkdTXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVUERBVEVfU1lOQ19XQVJOSU5HUzsgfSk7XFxudmFyIEFSUkFZX0lOU0VSVCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfSU5TRVJUJztcXG52YXIgQVJSQVlfTU9WRSA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfTU9WRSc7XFxudmFyIEFSUkFZX1BPUCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfUE9QJztcXG52YXIgQVJSQVlfUFVTSCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfUFVTSCc7XFxudmFyIEFSUkFZX1JFTU9WRSA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfUkVNT1ZFJztcXG52YXIgQVJSQVlfUkVNT1ZFX0FMTCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfUkVNT1ZFX0FMTCc7XFxudmFyIEFSUkFZX1NISUZUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9TSElGVCc7XFxudmFyIEFSUkFZX1NQTElDRSA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfU1BMSUNFJztcXG52YXIgQVJSQVlfVU5TSElGVCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfVU5TSElGVCc7XFxudmFyIEFSUkFZX1NXQVAgPSAnQEByZWR1eC1mb3JtL0FSUkFZX1NXQVAnO1xcbnZhciBBVVRPRklMTCA9ICdAQHJlZHV4LWZvcm0vQVVUT0ZJTEwnO1xcbnZhciBCTFVSID0gJ0BAcmVkdXgtZm9ybS9CTFVSJztcXG52YXIgQ0hBTkdFID0gJ0BAcmVkdXgtZm9ybS9DSEFOR0UnO1xcbnZhciBDTEVBUl9TVUJNSVQgPSAnQEByZWR1eC1mb3JtL0NMRUFSX1NVQk1JVCc7XFxudmFyIENMRUFSX1NVQk1JVF9FUlJPUlMgPSAnQEByZWR1eC1mb3JtL0NMRUFSX1NVQk1JVF9FUlJPUlMnO1xcbnZhciBDTEVBUl9BU1lOQ19FUlJPUiA9ICdAcmVkdXgtZm9ybS9DTEVBUl9BU1lOQ19FUlJPUic7XFxudmFyIERFU1RST1kgPSAnQEByZWR1eC1mb3JtL0RFU1RST1knO1xcbnZhciBGT0NVUyA9ICdAQHJlZHV4LWZvcm0vRk9DVVMnO1xcbnZhciBJTklUSUFMSVpFID0gJ0BAcmVkdXgtZm9ybS9JTklUSUFMSVpFJztcXG52YXIgUkVHSVNURVJfRklFTEQgPSAnQEByZWR1eC1mb3JtL1JFR0lTVEVSX0ZJRUxEJztcXG52YXIgUkVTRVQgPSAnQEByZWR1eC1mb3JtL1JFU0VUJztcXG52YXIgU0VUX1NVQk1JVF9GQUlMRUQgPSAnQEByZWR1eC1mb3JtL1NFVF9TVUJNSVRfRkFJTEVEJztcXG52YXIgU0VUX1NVQk1JVF9TVUNDRUVERUQgPSAnQEByZWR1eC1mb3JtL1NFVF9TVUJNSVRfU1VDQ0VFREVEJztcXG52YXIgU1RBUlRfQVNZTkNfVkFMSURBVElPTiA9ICdAQHJlZHV4LWZvcm0vU1RBUlRfQVNZTkNfVkFMSURBVElPTic7XFxudmFyIFNUQVJUX1NVQk1JVCA9ICdAQHJlZHV4LWZvcm0vU1RBUlRfU1VCTUlUJztcXG52YXIgU1RPUF9BU1lOQ19WQUxJREFUSU9OID0gJ0BAcmVkdXgtZm9ybS9TVE9QX0FTWU5DX1ZBTElEQVRJT04nO1xcbnZhciBTVE9QX1NVQk1JVCA9ICdAQHJlZHV4LWZvcm0vU1RPUF9TVUJNSVQnO1xcbnZhciBTVUJNSVQgPSAnQEByZWR1eC1mb3JtL1NVQk1JVCc7XFxudmFyIFRPVUNIID0gJ0BAcmVkdXgtZm9ybS9UT1VDSCc7XFxudmFyIFVOUkVHSVNURVJfRklFTEQgPSAnQEByZWR1eC1mb3JtL1VOUkVHSVNURVJfRklFTEQnO1xcbnZhciBVTlRPVUNIID0gJ0BAcmVkdXgtZm9ybS9VTlRPVUNIJztcXG52YXIgVVBEQVRFX1NZTkNfRVJST1JTID0gJ0BAcmVkdXgtZm9ybS9VUERBVEVfU1lOQ19FUlJPUlMnO1xcbnZhciBVUERBVEVfU1lOQ19XQVJOSU5HUyA9ICdAQHJlZHV4LWZvcm0vVVBEQVRFX1NZTkNfV0FSTklOR1MnO1xcblxcbi8qKiovIH0pLFxcbi8qIDI4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbnZhciBnO1xcblxcbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXFxuZyA9IChmdW5jdGlvbigpIHtcXG5cXHRyZXR1cm4gdGhpcztcXG59KSgpO1xcblxcbnRyeSB7XFxuXFx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXFxuXFx0ZyA9IGcgfHwgRnVuY3Rpb24oXFxcInJldHVybiB0aGlzXFxcIikoKSB8fCAoMSxldmFsKShcXFwidGhpc1xcXCIpO1xcbn0gY2F0Y2goZSkge1xcblxcdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXFxuXFx0aWYodHlwZW9mIHdpbmRvdyA9PT0gXFxcIm9iamVjdFxcXCIpXFxuXFx0XFx0ZyA9IHdpbmRvdztcXG59XFxuXFxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxcbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXFxuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxcblxcbm1vZHVsZS5leHBvcnRzID0gZztcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWFwQ2FjaGVDbGVhcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbWFwQ2FjaGVEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTE0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19tYXBDYWNoZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcENhY2hlSGFzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fbWFwQ2FjaGVTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTE4KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBjb25zdHJ1Y3RvclxcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxcbiAqL1xcbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcXG5cXG4gIHRoaXMuY2xlYXIoKTtcXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xcbiAgfVxcbn1cXG5cXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxcbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWFwQ2FjaGVDbGVhcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tYXBDYWNoZURlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19tYXBDYWNoZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19tYXBDYWNoZUhhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBDYWNoZVNldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChNYXBDYWNoZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0Z1bmN0aW9uKF8pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XFxuICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXFxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cXG4gIHZhciB0YWcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0Z1bmN0aW9uKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xcbnZhciBNYXAgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ01hcCcpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKE1hcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0xpc3RDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RhY2tDbGVhcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3N0YWNrRGVsZXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fc3RhY2tHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdGFja0hhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3N0YWNrU2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNyk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBjb25zdHJ1Y3RvclxcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxcbiAqL1xcbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0xpc3RDYWNoZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShlbnRyaWVzKTtcXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcXG59XFxuXFxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0YWNrQ2xlYXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc3RhY2tEZWxldGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuU3RhY2sucHJvdG90eXBlLmdldCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fc3RhY2tHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuU3RhY2sucHJvdG90eXBlLmhhcyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RhY2tIYXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuU3RhY2sucHJvdG90eXBlLnNldCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc3RhY2tTZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoU3RhY2spO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDMzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XFxuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xcblxcbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNQcm90b3R5cGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxcbiAqICBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxudmFyIGlzQXJndW1lbnRzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzQXJndW1lbnRzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzQXJndW1lbnRzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogZnVuY3Rpb24odmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzQXJndW1lbnRzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXFxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXFxuICpcXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxcbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNMZW5ndGgoMyk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNMZW5ndGgoJzMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XFxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXFxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNMZW5ndGgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdHViRmFsc2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM3KTtcXG5cXG5cXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xcbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXFxudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcXG5cXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xcbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLkJ1ZmZlciA6IHVuZGVmaW5lZDtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMy4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdHViRmFsc2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNCdWZmZXIpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAzNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzVHlwZWRBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VVbmFyeV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25vZGVVdGlsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MCk7XFxuXFxuXFxuXFxuXFxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbm9kZVV0aWxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19ub2RlVXRpbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5pc1R5cGVkQXJyYXk7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VVbmFyeV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkobm9kZUlzVHlwZWRBcnJheSkgOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc1R5cGVkQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNUeXBlZEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXFxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xcblxcbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXFxcZCopJC87XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XFxuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XFxuXFxuICByZXR1cm4gISFsZW5ndGggJiZcXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcXG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXFxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzSW5kZXgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBjYXRlZ29yeSBVdGlsXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XFxuICpcXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWU7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlkZW50aXR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA0MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTU3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBtZW1iZXJPZiBfXFxuICogQGNhdGVnb3J5IE9iamVjdFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBGb28oKSB7XFxuICogICB0aGlzLmEgPSAxO1xcbiAqICAgdGhpcy5iID0gMjtcXG4gKiB9XFxuICpcXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xcbiAqXFxuICogXy5rZXlzKG5ldyBGb28pO1xcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcXG4gKlxcbiAqIF8ua2V5cygnaGknKTtcXG4gKiAvLyA9PiBbJzAnLCAnMSddXFxuICovXFxuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5TGlrZUtleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoa2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsRGVlcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXFxuICogYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cXG4gKiAgMSAtIFVub3JkZXJlZCBjb21wYXJpc29uXFxuICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spIHtcXG4gIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcXG4gICAgcmV0dXJuIHRydWU7XFxuICB9XFxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpKSkge1xcbiAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcXG4gIH1cXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNFcXVhbERlZXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUlzRXF1YWwpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG5cXG5cXG5cXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXFxudmFyIHJlSXNEZWVwUHJvcCA9IC9cXFxcLnxcXFxcWyg/OlteW1xcXFxdXSp8KFtcXFwiJ10pKD86KD8hXFxcXDEpW15cXFxcXFxcXF18XFxcXFxcXFwuKSo/XFxcXDEpXFxcXF0vLFxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXFxcdyokLztcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUgYW5kIG5vdCBhIHByb3BlcnR5IHBhdGguXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcXG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgcmV0dXJuIHRydWU7XFxuICB9XFxuICByZXR1cm4gcmVJc1BsYWluUHJvcC50ZXN0KHZhbHVlKSB8fCAhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpIHx8XFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzS2V5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA0MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXFxuICpcXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXFxuICovXFxuXFxuXFxuXFxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3YXJuaW5nO1xcbi8qKlxcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxcbiAqXFxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZS5cXG4gKiBAcmV0dXJucyB7dm9pZH1cXG4gKi9cXG5mdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHtcXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cXG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcXG4gIH1cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xcbiAgdHJ5IHtcXG4gICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBpZiB5b3UgZW5hYmxlXFxuICAgIC8vIFxcXCJicmVhayBvbiBhbGwgZXhjZXB0aW9uc1xcXCIgaW4geW91ciBjb25zb2xlLFxcbiAgICAvLyBpdCB3b3VsZCBwYXVzZSB0aGUgZXhlY3V0aW9uIGF0IHRoaXMgbGluZS5cXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eSAqL1xcbiAgfSBjYXRjaCAoZSkge31cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tZW1wdHkgKi9cXG59XFxuXFxuLyoqKi8gfSksXFxuLyogNDUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihwcm9jZXNzKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlU3RvcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvbWJpbmVSZWR1Y2Vyc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2JpbmRBY3Rpb25DcmVhdG9yc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2FwcGx5TWlkZGxld2FyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2NvbXBvc2VfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxzX3dhcm5pbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzQpO1xcbi8qIHVudXNlZCBoYXJtb255IHJlZXhwb3J0IGNyZWF0ZVN0b3JlICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29tYmluZVJlZHVjZXJzICovXFxuLyogaGFybW9ueSByZWV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2JpbmRBY3Rpb25DcmVhdG9yc19fW1xcXCJhXFxcIl07IH0pO1xcbi8qIHVudXNlZCBoYXJtb255IHJlZXhwb3J0IGFwcGx5TWlkZGxld2FyZSAqL1xcbi8qIHVudXNlZCBoYXJtb255IHJlZXhwb3J0IGNvbXBvc2UgKi9cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKlxcbiogVGhpcyBpcyBhIGR1bW15IGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBmdW5jdGlvbiBuYW1lIGhhcyBiZWVuIGFsdGVyZWQgYnkgbWluaWZpY2F0aW9uLlxcbiogSWYgdGhlIGZ1bmN0aW9uIGhhcyBiZWVuIG1pbmlmaWVkIGFuZCBOT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLCB3YXJuIHRoZSB1c2VyLlxcbiovXFxuZnVuY3Rpb24gaXNDcnVzaGVkKCkge31cXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgaXNDcnVzaGVkLm5hbWUgPT09ICdzdHJpbmcnICYmIGlzQ3J1c2hlZC5uYW1lICE9PSAnaXNDcnVzaGVkJykge1xcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbHNfd2FybmluZ19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoJ1lvdSBhcmUgY3VycmVudGx5IHVzaW5nIG1pbmlmaWVkIGNvZGUgb3V0c2lkZSBvZiBOT0RFX0VOViA9PT0gXFxcXCdwcm9kdWN0aW9uXFxcXCcuICcgKyAnVGhpcyBtZWFucyB0aGF0IHlvdSBhcmUgcnVubmluZyBhIHNsb3dlciBkZXZlbG9wbWVudCBidWlsZCBvZiBSZWR1eC4gJyArICdZb3UgY2FuIHVzZSBsb29zZS1lbnZpZnkgKGh0dHBzOi8vZ2l0aHViLmNvbS96ZXJ0b3NoL2xvb3NlLWVudmlmeSkgZm9yIGJyb3dzZXJpZnkgJyArICdvciBEZWZpbmVQbHVnaW4gZm9yIHdlYnBhY2sgKGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzAwMzAwMzEpICcgKyAndG8gZW5zdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGNvZGUgZm9yIHlvdXIgcHJvZHVjdGlvbiBidWlsZC4nKTtcXG59XFxuXFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbm1vZHVsZS5leHBvcnRzID0gaXNQcm9taXNlO1xcblxcbmZ1bmN0aW9uIGlzUHJvbWlzZShvYmopIHtcXG4gIHJldHVybiAhIW9iaiAmJiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykgJiYgdHlwZW9mIG9iai50aGVuID09PSAnZnVuY3Rpb24nO1xcbn1cXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA0NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGFzRXJyb3JfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjI2KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNWYWxpZCA9IGZ1bmN0aW9uIGNyZWF0ZUlzVmFsaWQoc3RydWN0dXJlKSB7XFxuICB2YXIgZ2V0SW4gPSBzdHJ1Y3R1cmUuZ2V0SW4sXFxuICAgICAga2V5cyA9IHN0cnVjdHVyZS5rZXlzO1xcblxcbiAgdmFyIGhhc0Vycm9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGFzRXJyb3JfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSk7XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICB2YXIgaWdub3JlU3VibWl0RXJyb3JzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHZhciBmb3JtU3RhdGUgPSBnZXRGb3JtU3RhdGUoc3RhdGUpO1xcbiAgICAgIHZhciBzeW5jRXJyb3IgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnN5bmNFcnJvcicpO1xcbiAgICAgIGlmIChzeW5jRXJyb3IpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICB9XFxuICAgICAgaWYgKCFpZ25vcmVTdWJtaXRFcnJvcnMpIHtcXG4gICAgICAgIHZhciBlcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuZXJyb3InKTtcXG4gICAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHZhciBzeW5jRXJyb3JzID0gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5zeW5jRXJyb3JzJyk7XFxuICAgICAgdmFyIGFzeW5jRXJyb3JzID0gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5hc3luY0Vycm9ycycpO1xcbiAgICAgIHZhciBzdWJtaXRFcnJvcnMgPSBpZ25vcmVTdWJtaXRFcnJvcnMgPyB1bmRlZmluZWQgOiBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnN1Ym1pdEVycm9ycycpO1xcbiAgICAgIGlmICghc3luY0Vycm9ycyAmJiAhYXN5bmNFcnJvcnMgJiYgIXN1Ym1pdEVycm9ycykge1xcbiAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgfVxcblxcbiAgICAgIHZhciByZWdpc3RlcmVkRmllbGRzID0gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5yZWdpc3RlcmVkRmllbGRzJyk7XFxuICAgICAgaWYgKCFyZWdpc3RlcmVkRmllbGRzKSB7XFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICB9XFxuXFxuICAgICAgcmV0dXJuICFrZXlzKHJlZ2lzdGVyZWRGaWVsZHMpLmZpbHRlcihmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHJlZ2lzdGVyZWRGaWVsZHMsICdbXFxcXCcnICsgbmFtZSArICdcXFxcJ10uY291bnQnKSA+IDA7XFxuICAgICAgfSkuc29tZShmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgcmV0dXJuIGhhc0Vycm9yKGdldEluKHJlZ2lzdGVyZWRGaWVsZHMsICdbXFxcXCcnICsgbmFtZSArICdcXFxcJ10nKSwgc3luY0Vycm9ycywgYXN5bmNFcnJvcnMsIHN1Ym1pdEVycm9ycyk7XFxuICAgICAgfSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSXNWYWxpZCk7XFxuXFxuLyoqKi8gfSksXFxuLyogNDggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzRXF1YWxXaXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgyKTtcXG5cXG5cXG5cXG52YXIgY3VzdG9taXplciA9IGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqZWN0VmFsdWUsIG90aGVyVmFsdWUsIGluZGV4T3JrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKSB7XFxuICAvLyBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjQjaXNFcXVhbFdpdGhcXG4gIGlmIChzdGFjaykge1xcbiAgICAvLyBTaGFsbG93IGNvbXBhcmVzXFxuICAgIC8vIEZvciAxc3QgbGV2ZWwsIHN0YWNrID09PSB1bmRlZmluZWQuXFxuICAgIC8vICAgLT4gRG8gbm90aGluZyAoYW5kIGltcGxpY2l0bHkgcmV0dXJuIHVuZGVmaW5lZCBzbyB0aGF0IGl0IGdvZXMgdG8gY29tcGFyZSAybmQgbGV2ZWwpXFxuICAgIC8vIEZvciAybmQgbGV2ZWwgYW5kIHVwLCBzdGFjayAhPT0gdW5kZWZpbmVkLlxcbiAgICAvLyAgIC0+IENvbXBhcmUgYnkgPT09IG9wZXJhdG9yXFxuICAgIHJldHVybiBvYmplY3RWYWx1ZSA9PT0gb3RoZXJWYWx1ZTtcXG4gIH1cXG59O1xcblxcbnZhciBzaGFsbG93Q29tcGFyZSA9IGZ1bmN0aW9uIHNoYWxsb3dDb21wYXJlKGluc3RhbmNlLCBuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xcbiAgcmV0dXJuICFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5zdGFuY2UucHJvcHMsIG5leHRQcm9wcywgY3VzdG9taXplcikgfHwgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzRXF1YWxXaXRoX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpbnN0YW5jZS5zdGF0ZSwgbmV4dFN0YXRlLCBjdXN0b21pemVyKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNoYWxsb3dDb21wYXJlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA0OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXFxuICogc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxcbiAqL1xcbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheU1hcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cXG4gKi9cXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcXG5cXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcXG4gIH1cXG4gIHJldHVybiBhcnJheTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY29weUFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGdsb2JhbCkgey8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXFxudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGZyZWVHbG9iYWwpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX21lbW9pemVDYXBwZWRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTYpO1xcblxcblxcbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxcXF1dK3xcXFxcWyg/OigtP1xcXFxkKyg/OlxcXFwuXFxcXGQrKT8pfChbXFxcIiddKSgoPzooPyFcXFxcMilbXlxcXFxcXFxcXXxcXFxcXFxcXC4pKj8pXFxcXDIpXFxcXF18KD89KD86XFxcXC58XFxcXFtcXFxcXSkoPzpcXFxcLnxcXFxcW1xcXFxdfCQpKS9nO1xcblxcbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xcbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXFxcXFwoXFxcXFxcXFwpPy9nO1xcblxcbi8qKlxcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqL1xcbnZhciBzdHJpbmdUb1BhdGggPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tZW1vaXplQ2FwcGVkX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbihzdHJpbmcpIHtcXG4gIHZhciByZXN1bHQgPSBbXTtcXG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xcbiAgICByZXN1bHQucHVzaCgnJyk7XFxuICB9XFxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XFxuICAgIHJlc3VsdC5wdXNoKHF1b3RlID8gc3ViU3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCAnJDEnKSA6IChudW1iZXIgfHwgbWF0Y2gpKTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHJpbmdUb1BhdGgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDUzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXFxudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxcbiAqL1xcbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcXG4gIGlmIChmdW5jICE9IG51bGwpIHtcXG4gICAgdHJ5IHtcXG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIHRyeSB7XFxuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xcbiAgICB9IGNhdGNoIChlKSB7fVxcbiAgfVxcbiAgcmV0dXJuICcnO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9ICh0b1NvdXJjZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTkpO1xcblxcblxcbi8qKlxcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy50b1N0cmluZyhudWxsKTtcXG4gKiAvLyA9PiAnJ1xcbiAqXFxuICogXy50b1N0cmluZygtMCk7XFxuICogLy8gPT4gJy0wJ1xcbiAqXFxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xcbiAqIC8vID0+ICcxLDIsMydcXG4gKi9cXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9ICh0b1N0cmluZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhc3NpZ25WYWx1ZWAgZXhjZXB0IHRoYXQgaXQgZG9lc24ndCBhc3NpZ25cXG4gKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxcbiAqL1xcbmZ1bmN0aW9uIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XFxuICBpZiAoKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2VxX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3Rba2V5XSwgdmFsdWUpKSB8fFxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIHZhbHVlKTtcXG4gIH1cXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYXNzaWduTWVyZ2VWYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG5cXG5cXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XFxuICB0cnkge1xcbiAgICB2YXIgZnVuYyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcXG4gICAgZnVuYyh7fSwgJycsIHt9KTtcXG4gICAgcmV0dXJuIGZ1bmM7XFxuICB9IGNhdGNoIChlKSB7fVxcbn0oKSk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmaW5lUHJvcGVydHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDU3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVCYXNlRm9yX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyOCk7XFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcXG4gKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS5cXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxudmFyIGJhc2VGb3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVCYXNlRm9yX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VGb3IpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDU4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBVaW50OEFycmF5ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLlVpbnQ4QXJyYXk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoVWludDhBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX292ZXJBcmdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjApO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBnZXRQcm90b3R5cGUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0UHJvdG90eXBlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcXG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcXG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob3ZlckFyZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgLCB1bmxlc3MgYGtleWAgaXMgXFxcIl9fcHJvdG9fX1xcXCIuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gc2FmZUdldChvYmplY3QsIGtleSkge1xcbiAgaWYgKGtleSA9PSAnX19wcm90b19fJykge1xcbiAgICByZXR1cm47XFxuICB9XFxuXFxuICByZXR1cm4gb2JqZWN0W2tleV07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNhZmVHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheUxpa2VLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlS2V5c0luX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheUxpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAzLjAuMFxcbiAqIEBjYXRlZ29yeSBPYmplY3RcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogZnVuY3Rpb24gRm9vKCkge1xcbiAqICAgdGhpcy5hID0gMTtcXG4gKiAgIHRoaXMuYiA9IDI7XFxuICogfVxcbiAqXFxuICogRm9vLnByb3RvdHlwZS5jID0gMztcXG4gKlxcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqL1xcbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5TGlrZUtleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgdHJ1ZSkgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlS2V5c0luX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChrZXlzSW4pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDYzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlVGltZXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0J1ZmZlcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNJbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNUeXBlZEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqL1xcbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xcbiAgdmFyIGlzQXJyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0J1ZmZlcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc1R5cGVkQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSxcXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlVGltZXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XFxuXFxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcXG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxcbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxcbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXFxuICAgICAgICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0luZGV4X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShrZXksIGxlbmd0aClcXG4gICAgICAgICkpKSB7XFxuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYXJyYXlMaWtlS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUZvck93bl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Jhc2VJdGVyYXRlZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTkpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhcyBgb2JqZWN0YCBhbmQgdmFsdWVzIGdlbmVyYXRlZFxcbiAqIGJ5IHJ1bm5pbmcgZWFjaCBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAgdGhydVxcbiAqIGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxcbiAqICh2YWx1ZSwga2V5LCBvYmplY3QpLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDIuNC4wXFxuICogQGNhdGVnb3J5IE9iamVjdFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBvYmplY3QuXFxuICogQHNlZSBfLm1hcEtleXNcXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIHVzZXJzID0ge1xcbiAqICAgJ2ZyZWQnOiAgICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAgfSxcXG4gKiAgICdwZWJibGVzJzogeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEgfVxcbiAqIH07XFxuICpcXG4gKiBfLm1hcFZhbHVlcyh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2U7IH0pO1xcbiAqIC8vID0+IHsgJ2ZyZWQnOiA0MCwgJ3BlYmJsZXMnOiAxIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcXG4gKlxcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxcbiAqIF8ubWFwVmFsdWVzKHVzZXJzLCAnYWdlJyk7XFxuICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqL1xcbmZ1bmN0aW9uIG1hcFZhbHVlcyhvYmplY3QsIGl0ZXJhdGVlKSB7XFxuICB2YXIgcmVzdWx0ID0ge307XFxuICBpdGVyYXRlZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Jhc2VJdGVyYXRlZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaXRlcmF0ZWUsIDMpO1xcblxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUZvck93bl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShyZXN1bHQsIGtleSwgaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqZWN0KSk7XFxuICB9KTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcFZhbHVlcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1NldENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlTb21lX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY3KTtcXG5cXG5cXG5cXG5cXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcXG5cXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXFxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xcblxcbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXFxuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XFxuICBpZiAoc3RhY2tlZCAmJiBzdGFjay5nZXQob3RoZXIpKSB7XFxuICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xcbiAgfVxcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgcmVzdWx0ID0gdHJ1ZSxcXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1NldENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogdW5kZWZpbmVkO1xcblxcbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XFxuICBzdGFjay5zZXQob3RoZXIsIGFycmF5KTtcXG5cXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cXG4gIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7XFxuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xcblxcbiAgICBpZiAoY3VzdG9taXplcikge1xcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXFxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICBpZiAoY29tcGFyZWQpIHtcXG4gICAgICAgIGNvbnRpbnVlO1xcbiAgICAgIH1cXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxcbiAgICBpZiAoc2Vlbikge1xcbiAgICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlTb21lX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XFxuICAgICAgICAgICAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jYWNoZUhhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc2Vlbiwgb3RoSW5kZXgpICYmXFxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSkge1xcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICBicmVhaztcXG4gICAgICB9XFxuICAgIH0gZWxzZSBpZiAoIShcXG4gICAgICAgICAgYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8XFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXFxuICAgICAgICApKSB7XFxuICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgYnJlYWs7XFxuICAgIH1cXG4gIH1cXG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XFxuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZXF1YWxBcnJheXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDY2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpZiBzdWl0YWJsZSBmb3Igc3RyaWN0XFxuICogIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlICYmICFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc09iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1N0cmljdENvbXBhcmFibGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDY3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYG1hdGNoZXNQcm9wZXJ0eWAgZm9yIHNvdXJjZSB2YWx1ZXMgc3VpdGFibGVcXG4gKiBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XFxuICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9XFxuICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gc3JjVmFsdWUgJiZcXG4gICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX190b0tleV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcXG4gIHBhdGggPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jYXN0UGF0aF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCwgb2JqZWN0KTtcXG5cXG4gIHZhciBpbmRleCA9IDAsXFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XFxuXFxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcXG4gICAgb2JqZWN0ID0gb2JqZWN0W09iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwYXRoW2luZGV4KytdKV07XFxuICB9XFxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDY5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdHJpbmdUb1BhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU0KTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cXG4gKi9cXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc3RyaW5nVG9QYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX190b1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2FzdFBhdGgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDcwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihwcm9jZXNzKSB7LyoqXFxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXFxuICpcXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXFxuICovXFxuXFxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJlxcbiAgICBTeW1ib2wuZm9yICYmXFxuICAgIFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSkgfHxcXG4gICAgMHhlYWM3O1xcblxcbiAgdmFyIGlzVmFsaWRFbGVtZW50ID0gZnVuY3Rpb24ob2JqZWN0KSB7XFxuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxcbiAgICAgIG9iamVjdCAhPT0gbnVsbCAmJlxcbiAgICAgIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xcbiAgfTtcXG5cXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxcbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xcbiAgbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5NCkoaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xcbn0gZWxzZSB7XFxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxcbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxcbiAgbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5NykoKTtcXG59XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDcxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJiXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdWJzY3JpcHRpb25TaGFwZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RvcmVTaGFwZTsgfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX18pO1xcblxcblxcbnZhciBzdWJzY3JpcHRpb25TaGFwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLnNoYXBlKHtcXG4gIHRyeVN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgdHJ5VW5zdWJzY3JpYmU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmZ1bmMuaXNSZXF1aXJlZCxcXG4gIG5vdGlmeU5lc3RlZFN1YnM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmZ1bmMuaXNSZXF1aXJlZCxcXG4gIGlzU3Vic2NyaWJlZDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkXFxufSk7XFxuXFxudmFyIHN0b3JlU2hhcGUgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5zaGFwZSh7XFxuICBzdWJzY3JpYmU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmZ1bmMuaXNSZXF1aXJlZCxcXG4gIGRpc3BhdGNoOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWQsXFxuICBnZXRTdGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkXFxufSk7XFxuXFxuLyoqKi8gfSksXFxuLyogNzIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihwcm9jZXNzKSB7LyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gY29ubmVjdEFkdmFuY2VkO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX1N1YnNjcmlwdGlvbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxzX1Byb3BUeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgaG90UmVsb2FkaW5nVmVyc2lvbiA9IDA7XFxudmFyIGR1bW15U3RhdGUgPSB7fTtcXG5mdW5jdGlvbiBub29wKCkge31cXG5mdW5jdGlvbiBtYWtlU2VsZWN0b3JTdGF0ZWZ1bChzb3VyY2VTZWxlY3Rvciwgc3RvcmUpIHtcXG4gIC8vIHdyYXAgdGhlIHNlbGVjdG9yIGluIGFuIG9iamVjdCB0aGF0IHRyYWNrcyBpdHMgcmVzdWx0cyBiZXR3ZWVuIHJ1bnMuXFxuICB2YXIgc2VsZWN0b3IgPSB7XFxuICAgIHJ1bjogZnVuY3Rpb24gcnVuQ29tcG9uZW50U2VsZWN0b3IocHJvcHMpIHtcXG4gICAgICB0cnkge1xcbiAgICAgICAgdmFyIG5leHRQcm9wcyA9IHNvdXJjZVNlbGVjdG9yKHN0b3JlLmdldFN0YXRlKCksIHByb3BzKTtcXG4gICAgICAgIGlmIChuZXh0UHJvcHMgIT09IHNlbGVjdG9yLnByb3BzIHx8IHNlbGVjdG9yLmVycm9yKSB7XFxuICAgICAgICAgIHNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IHRydWU7XFxuICAgICAgICAgIHNlbGVjdG9yLnByb3BzID0gbmV4dFByb3BzO1xcbiAgICAgICAgICBzZWxlY3Rvci5lcnJvciA9IG51bGw7XFxuICAgICAgICB9XFxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcXG4gICAgICAgIHNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IHRydWU7XFxuICAgICAgICBzZWxlY3Rvci5lcnJvciA9IGVycm9yO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfTtcXG5cXG4gIHJldHVybiBzZWxlY3RvcjtcXG59XFxuXFxuZnVuY3Rpb24gY29ubmVjdEFkdmFuY2VkKFxcbi8qXFxuICBzZWxlY3RvckZhY3RvcnkgaXMgYSBmdW5jIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHJldHVybmluZyB0aGUgc2VsZWN0b3IgZnVuY3Rpb24gdXNlZCB0b1xcbiAgY29tcHV0ZSBuZXcgcHJvcHMgZnJvbSBzdGF0ZSwgcHJvcHMsIGFuZCBkaXNwYXRjaC4gRm9yIGV4YW1wbGU6XFxuICAgICBleHBvcnQgZGVmYXVsdCBjb25uZWN0QWR2YW5jZWQoKGRpc3BhdGNoLCBvcHRpb25zKSA9PiAoc3RhdGUsIHByb3BzKSA9PiAoe1xcbiAgICAgIHRoaW5nOiBzdGF0ZS50aGluZ3NbcHJvcHMudGhpbmdJZF0sXFxuICAgICAgc2F2ZVRoaW5nOiBmaWVsZHMgPT4gZGlzcGF0Y2goYWN0aW9uQ3JlYXRvcnMuc2F2ZVRoaW5nKHByb3BzLnRoaW5nSWQsIGZpZWxkcykpLFxcbiAgICB9KSkoWW91ckNvbXBvbmVudClcXG4gICBBY2Nlc3MgdG8gZGlzcGF0Y2ggaXMgcHJvdmlkZWQgdG8gdGhlIGZhY3Rvcnkgc28gc2VsZWN0b3JGYWN0b3JpZXMgY2FuIGJpbmQgYWN0aW9uQ3JlYXRvcnNcXG4gIG91dHNpZGUgb2YgdGhlaXIgc2VsZWN0b3IgYXMgYW4gb3B0aW1pemF0aW9uLiBPcHRpb25zIHBhc3NlZCB0byBjb25uZWN0QWR2YW5jZWQgYXJlIHBhc3NlZCB0b1xcbiAgdGhlIHNlbGVjdG9yRmFjdG9yeSwgYWxvbmcgd2l0aCBkaXNwbGF5TmFtZSBhbmQgV3JhcHBlZENvbXBvbmVudCwgYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cXG4gICBOb3RlIHRoYXQgc2VsZWN0b3JGYWN0b3J5IGlzIHJlc3BvbnNpYmxlIGZvciBhbGwgY2FjaGluZy9tZW1vaXphdGlvbiBvZiBpbmJvdW5kIGFuZCBvdXRib3VuZFxcbiAgcHJvcHMuIERvIG5vdCB1c2UgY29ubmVjdEFkdmFuY2VkIGRpcmVjdGx5IHdpdGhvdXQgbWVtb2l6aW5nIHJlc3VsdHMgYmV0d2VlbiBjYWxscyB0byB5b3VyXFxuICBzZWxlY3Rvciwgb3RoZXJ3aXNlIHRoZSBDb25uZWN0IGNvbXBvbmVudCB3aWxsIHJlLXJlbmRlciBvbiBldmVyeSBzdGF0ZSBvciBwcm9wcyBjaGFuZ2UuXFxuKi9cXG5zZWxlY3RvckZhY3RvcnkpIHtcXG4gIHZhciBfY29udGV4dFR5cGVzLCBfY2hpbGRDb250ZXh0VHlwZXM7XFxuXFxuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXFxuICAgICAgX3JlZiRnZXREaXNwbGF5TmFtZSA9IF9yZWYuZ2V0RGlzcGxheU5hbWUsXFxuICAgICAgZ2V0RGlzcGxheU5hbWUgPSBfcmVmJGdldERpc3BsYXlOYW1lID09PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAobmFtZSkge1xcbiAgICByZXR1cm4gJ0Nvbm5lY3RBZHZhbmNlZCgnICsgbmFtZSArICcpJztcXG4gIH0gOiBfcmVmJGdldERpc3BsYXlOYW1lLFxcbiAgICAgIF9yZWYkbWV0aG9kTmFtZSA9IF9yZWYubWV0aG9kTmFtZSxcXG4gICAgICBtZXRob2ROYW1lID0gX3JlZiRtZXRob2ROYW1lID09PSB1bmRlZmluZWQgPyAnY29ubmVjdEFkdmFuY2VkJyA6IF9yZWYkbWV0aG9kTmFtZSxcXG4gICAgICBfcmVmJHJlbmRlckNvdW50UHJvcCA9IF9yZWYucmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIHJlbmRlckNvdW50UHJvcCA9IF9yZWYkcmVuZGVyQ291bnRQcm9wID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBfcmVmJHJlbmRlckNvdW50UHJvcCxcXG4gICAgICBfcmVmJHNob3VsZEhhbmRsZVN0YXQgPSBfcmVmLnNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyxcXG4gICAgICBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMgPSBfcmVmJHNob3VsZEhhbmRsZVN0YXQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBfcmVmJHNob3VsZEhhbmRsZVN0YXQsXFxuICAgICAgX3JlZiRzdG9yZUtleSA9IF9yZWYuc3RvcmVLZXksXFxuICAgICAgc3RvcmVLZXkgPSBfcmVmJHN0b3JlS2V5ID09PSB1bmRlZmluZWQgPyAnc3RvcmUnIDogX3JlZiRzdG9yZUtleSxcXG4gICAgICBfcmVmJHdpdGhSZWYgPSBfcmVmLndpdGhSZWYsXFxuICAgICAgd2l0aFJlZiA9IF9yZWYkd2l0aFJlZiA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBfcmVmJHdpdGhSZWYsXFxuICAgICAgY29ubmVjdE9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWydnZXREaXNwbGF5TmFtZScsICdtZXRob2ROYW1lJywgJ3JlbmRlckNvdW50UHJvcCcsICdzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMnLCAnc3RvcmVLZXknLCAnd2l0aFJlZiddKTtcXG5cXG4gIHZhciBzdWJzY3JpcHRpb25LZXkgPSBzdG9yZUtleSArICdTdWJzY3JpcHRpb24nO1xcbiAgdmFyIHZlcnNpb24gPSBob3RSZWxvYWRpbmdWZXJzaW9uKys7XFxuXFxuICB2YXIgY29udGV4dFR5cGVzID0gKF9jb250ZXh0VHlwZXMgPSB7fSwgX2NvbnRleHRUeXBlc1tzdG9yZUtleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJhXFxcIiAvKiBzdG9yZVNoYXBlICovXSwgX2NvbnRleHRUeXBlc1tzdWJzY3JpcHRpb25LZXldID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYlxcXCIgLyogc3Vic2NyaXB0aW9uU2hhcGUgKi9dLCBfY29udGV4dFR5cGVzKTtcXG4gIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IChfY2hpbGRDb250ZXh0VHlwZXMgPSB7fSwgX2NoaWxkQ29udGV4dFR5cGVzW3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9jaGlsZENvbnRleHRUeXBlcyk7XFxuXFxuICByZXR1cm4gZnVuY3Rpb24gd3JhcFdpdGhDb25uZWN0KFdyYXBwZWRDb21wb25lbnQpIHtcXG4gICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh0eXBlb2YgV3JhcHBlZENvbXBvbmVudCA9PSAnZnVuY3Rpb24nLCAnWW91IG11c3QgcGFzcyBhIGNvbXBvbmVudCB0byB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgJyArICgnY29ubmVjdC4gSW5zdGVhZCByZWNlaXZlZCAnICsgSlNPTi5zdHJpbmdpZnkoV3JhcHBlZENvbXBvbmVudCkpKTtcXG5cXG4gICAgdmFyIHdyYXBwZWRDb21wb25lbnROYW1lID0gV3JhcHBlZENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBXcmFwcGVkQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XFxuXFxuICAgIHZhciBkaXNwbGF5TmFtZSA9IGdldERpc3BsYXlOYW1lKHdyYXBwZWRDb21wb25lbnROYW1lKTtcXG5cXG4gICAgdmFyIHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgY29ubmVjdE9wdGlvbnMsIHtcXG4gICAgICBnZXREaXNwbGF5TmFtZTogZ2V0RGlzcGxheU5hbWUsXFxuICAgICAgbWV0aG9kTmFtZTogbWV0aG9kTmFtZSxcXG4gICAgICByZW5kZXJDb3VudFByb3A6IHJlbmRlckNvdW50UHJvcCxcXG4gICAgICBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXM6IHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyxcXG4gICAgICBzdG9yZUtleTogc3RvcmVLZXksXFxuICAgICAgd2l0aFJlZjogd2l0aFJlZixcXG4gICAgICBkaXNwbGF5TmFtZTogZGlzcGxheU5hbWUsXFxuICAgICAgd3JhcHBlZENvbXBvbmVudE5hbWU6IHdyYXBwZWRDb21wb25lbnROYW1lLFxcbiAgICAgIFdyYXBwZWRDb21wb25lbnQ6IFdyYXBwZWRDb21wb25lbnRcXG4gICAgfSk7XFxuXFxuICAgIHZhciBDb25uZWN0ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgICBfaW5oZXJpdHMoQ29ubmVjdCwgX0NvbXBvbmVudCk7XFxuXFxuICAgICAgZnVuY3Rpb24gQ29ubmVjdChwcm9wcywgY29udGV4dCkge1xcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbm5lY3QpO1xcblxcbiAgICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0NvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSk7XFxuXFxuICAgICAgICBfdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcXG4gICAgICAgIF90aGlzLnN0YXRlID0ge307XFxuICAgICAgICBfdGhpcy5yZW5kZXJDb3VudCA9IDA7XFxuICAgICAgICBfdGhpcy5zdG9yZSA9IHByb3BzW3N0b3JlS2V5XSB8fCBjb250ZXh0W3N0b3JlS2V5XTtcXG4gICAgICAgIF90aGlzLnByb3BzTW9kZSA9IEJvb2xlYW4ocHJvcHNbc3RvcmVLZXldKTtcXG4gICAgICAgIF90aGlzLnNldFdyYXBwZWRJbnN0YW5jZSA9IF90aGlzLnNldFdyYXBwZWRJbnN0YW5jZS5iaW5kKF90aGlzKTtcXG5cXG4gICAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0KCkoX3RoaXMuc3RvcmUsICdDb3VsZCBub3QgZmluZCBcXFwiJyArIHN0b3JlS2V5ICsgJ1xcXCIgaW4gZWl0aGVyIHRoZSBjb250ZXh0IG9yIHByb3BzIG9mICcgKyAoJ1xcXCInICsgZGlzcGxheU5hbWUgKyAnXFxcIi4gRWl0aGVyIHdyYXAgdGhlIHJvb3QgY29tcG9uZW50IGluIGEgPFByb3ZpZGVyPiwgJykgKyAoJ29yIGV4cGxpY2l0bHkgcGFzcyBcXFwiJyArIHN0b3JlS2V5ICsgJ1xcXCIgYXMgYSBwcm9wIHRvIFxcXCInICsgZGlzcGxheU5hbWUgKyAnXFxcIi4nKSk7XFxuXFxuICAgICAgICBfdGhpcy5pbml0U2VsZWN0b3IoKTtcXG4gICAgICAgIF90aGlzLmluaXRTdWJzY3JpcHRpb24oKTtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgICB9XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xcbiAgICAgICAgdmFyIF9yZWYyO1xcblxcbiAgICAgICAgLy8gSWYgdGhpcyBjb21wb25lbnQgcmVjZWl2ZWQgc3RvcmUgZnJvbSBwcm9wcywgaXRzIHN1YnNjcmlwdGlvbiBzaG91bGQgYmUgdHJhbnNwYXJlbnRcXG4gICAgICAgIC8vIHRvIGFueSBkZXNjZW5kYW50cyByZWNlaXZpbmcgc3RvcmUrc3Vic2NyaXB0aW9uIGZyb20gY29udGV4dDsgaXQgcGFzc2VzIGFsb25nXFxuICAgICAgICAvLyBzdWJzY3JpcHRpb24gcGFzc2VkIHRvIGl0LiBPdGhlcndpc2UsIGl0IHNoYWRvd3MgdGhlIHBhcmVudCBzdWJzY3JpcHRpb24sIHdoaWNoIGFsbG93c1xcbiAgICAgICAgLy8gQ29ubmVjdCB0byBjb250cm9sIG9yZGVyaW5nIG9mIG5vdGlmaWNhdGlvbnMgdG8gZmxvdyB0b3AtZG93bi5cXG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLnByb3BzTW9kZSA/IG51bGwgOiB0aGlzLnN1YnNjcmlwdGlvbjtcXG4gICAgICAgIHJldHVybiBfcmVmMiA9IHt9LCBfcmVmMltzdWJzY3JpcHRpb25LZXldID0gc3Vic2NyaXB0aW9uIHx8IHRoaXMuY29udGV4dFtzdWJzY3JpcHRpb25LZXldLCBfcmVmMjtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XFxuICAgICAgICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuO1xcblxcbiAgICAgICAgLy8gY29tcG9uZW50V2lsbE1vdW50IGZpcmVzIGR1cmluZyBzZXJ2ZXIgc2lkZSByZW5kZXJpbmcsIGJ1dCBjb21wb25lbnREaWRNb3VudCBhbmRcXG4gICAgICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50IGRvIG5vdC4gQmVjYXVzZSBvZiB0aGlzLCB0cnlTdWJzY3JpYmUgaGFwcGVucyBkdXJpbmcgLi4uZGlkTW91bnQuXFxuICAgICAgICAvLyBPdGhlcndpc2UsIHVuc3Vic2NyaXB0aW9uIHdvdWxkIG5ldmVyIHRha2UgcGxhY2UgZHVyaW5nIFNTUiwgY2F1c2luZyBhIG1lbW9yeSBsZWFrLlxcbiAgICAgICAgLy8gVG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGEgY2hpbGQgY29tcG9uZW50IG1heSBoYXZlIHRyaWdnZXJlZCBhIHN0YXRlIGNoYW5nZSBieVxcbiAgICAgICAgLy8gZGlzcGF0Y2hpbmcgYW4gYWN0aW9uIGluIGl0cyBjb21wb25lbnRXaWxsTW91bnQsIHdlIGhhdmUgdG8gcmUtcnVuIHRoZSBzZWxlY3QgYW5kIG1heWJlXFxuICAgICAgICAvLyByZS1yZW5kZXIuXFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi50cnlTdWJzY3JpYmUoKTtcXG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlKSB0aGlzLmZvcmNlVXBkYXRlKCk7XFxuICAgICAgfTtcXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKG5leHRQcm9wcyk7XFxuICAgICAgfTtcXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGU7XFxuICAgICAgfTtcXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB0aGlzLnN1YnNjcmlwdGlvbi50cnlVbnN1YnNjcmliZSgpO1xcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSBudWxsO1xcbiAgICAgICAgdGhpcy5ub3RpZnlOZXN0ZWRTdWJzID0gbm9vcDtcXG4gICAgICAgIHRoaXMuc3RvcmUgPSBudWxsO1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4gPSBub29wO1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmYWxzZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmdldFdyYXBwZWRJbnN0YW5jZSA9IGZ1bmN0aW9uIGdldFdyYXBwZWRJbnN0YW5jZSgpIHtcXG4gICAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0KCkod2l0aFJlZiwgJ1RvIGFjY2VzcyB0aGUgd3JhcHBlZCBpbnN0YW5jZSwgeW91IG5lZWQgdG8gc3BlY2lmeSAnICsgKCd7IHdpdGhSZWY6IHRydWUgfSBpbiB0aGUgb3B0aW9ucyBhcmd1bWVudCBvZiB0aGUgJyArIG1ldGhvZE5hbWUgKyAnKCkgY2FsbC4nKSk7XFxuICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkSW5zdGFuY2U7XFxuICAgICAgfTtcXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5zZXRXcmFwcGVkSW5zdGFuY2UgPSBmdW5jdGlvbiBzZXRXcmFwcGVkSW5zdGFuY2UocmVmKSB7XFxuICAgICAgICB0aGlzLndyYXBwZWRJbnN0YW5jZSA9IHJlZjtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmluaXRTZWxlY3RvciA9IGZ1bmN0aW9uIGluaXRTZWxlY3RvcigpIHtcXG4gICAgICAgIHZhciBzb3VyY2VTZWxlY3RvciA9IHNlbGVjdG9yRmFjdG9yeSh0aGlzLnN0b3JlLmRpc3BhdGNoLCBzZWxlY3RvckZhY3RvcnlPcHRpb25zKTtcXG4gICAgICAgIHRoaXMuc2VsZWN0b3IgPSBtYWtlU2VsZWN0b3JTdGF0ZWZ1bChzb3VyY2VTZWxlY3RvciwgdGhpcy5zdG9yZSk7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnJ1bih0aGlzLnByb3BzKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmluaXRTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiBpbml0U3Vic2NyaXB0aW9uKCkge1xcbiAgICAgICAgaWYgKCFzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMpIHJldHVybjtcXG5cXG4gICAgICAgIC8vIHBhcmVudFN1YidzIHNvdXJjZSBzaG91bGQgbWF0Y2ggd2hlcmUgc3RvcmUgY2FtZSBmcm9tOiBwcm9wcyB2cy4gY29udGV4dC4gQSBjb21wb25lbnRcXG4gICAgICAgIC8vIGNvbm5lY3RlZCB0byB0aGUgc3RvcmUgdmlhIHByb3BzIHNob3VsZG4ndCB1c2Ugc3Vic2NyaXB0aW9uIGZyb20gY29udGV4dCwgb3IgdmljZSB2ZXJzYS5cXG4gICAgICAgIHZhciBwYXJlbnRTdWIgPSAodGhpcy5wcm9wc01vZGUgPyB0aGlzLnByb3BzIDogdGhpcy5jb250ZXh0KVtzdWJzY3JpcHRpb25LZXldO1xcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsc19TdWJzY3JpcHRpb25fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10odGhpcy5zdG9yZSwgcGFyZW50U3ViLCB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzKSk7XFxuXFxuICAgICAgICAvLyBgbm90aWZ5TmVzdGVkU3Vic2AgaXMgZHVwbGljYXRlZCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIGNvbXBvbmVudCBpcyAgdW5tb3VudGVkIGluXFxuICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIHRoZSBub3RpZmljYXRpb24gbG9vcCwgd2hlcmUgYHRoaXMuc3Vic2NyaXB0aW9uYCB3aWxsIHRoZW4gYmUgbnVsbC4gQW5cXG4gICAgICAgIC8vIGV4dHJhIG51bGwgY2hlY2sgZXZlcnkgY2hhbmdlIGNhbiBiZSBhdm9pZGVkIGJ5IGNvcHlpbmcgdGhlIG1ldGhvZCBvbnRvIGB0aGlzYCBhbmQgdGhlblxcbiAgICAgICAgLy8gcmVwbGFjaW5nIGl0IHdpdGggYSBuby1vcCBvbiB1bm1vdW50LiBUaGlzIGNhbiBwcm9iYWJseSBiZSBhdm9pZGVkIGlmIFN1YnNjcmlwdGlvbidzXFxuICAgICAgICAvLyBsaXN0ZW5lcnMgbG9naWMgaXMgY2hhbmdlZCB0byBub3QgY2FsbCBsaXN0ZW5lcnMgdGhhdCBoYXZlIGJlZW4gdW5zdWJzY3JpYmVkIGluIHRoZVxcbiAgICAgICAgLy8gbWlkZGxlIG9mIHRoZSBub3RpZmljYXRpb24gbG9vcC5cXG4gICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicyA9IHRoaXMuc3Vic2NyaXB0aW9uLm5vdGlmeU5lc3RlZFN1YnMuYmluZCh0aGlzLnN1YnNjcmlwdGlvbik7XFxuICAgICAgfTtcXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5vblN0YXRlQ2hhbmdlID0gZnVuY3Rpb24gb25TdGF0ZUNoYW5nZSgpIHtcXG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xcblxcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSkge1xcbiAgICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMoKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHRoaXMuY29tcG9uZW50RGlkVXBkYXRlID0gdGhpcy5ub3RpZnlOZXN0ZWRTdWJzT25Db21wb25lbnREaWRVcGRhdGU7XFxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoZHVtbXlTdGF0ZSk7XFxuICAgICAgICB9XFxuICAgICAgfTtcXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5ub3RpZnlOZXN0ZWRTdWJzT25Db21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBub3RpZnlOZXN0ZWRTdWJzT25Db21wb25lbnREaWRVcGRhdGUoKSB7XFxuICAgICAgICAvLyBgY29tcG9uZW50RGlkVXBkYXRlYCBpcyBjb25kaXRpb25hbGx5IGltcGxlbWVudGVkIHdoZW4gYG9uU3RhdGVDaGFuZ2VgIGRldGVybWluZXMgaXRcXG4gICAgICAgIC8vIG5lZWRzIHRvIG5vdGlmeSBuZXN0ZWQgc3Vicy4gT25jZSBjYWxsZWQsIGl0IHVuaW1wbGVtZW50cyBpdHNlbGYgdW50aWwgZnVydGhlciBzdGF0ZVxcbiAgICAgICAgLy8gY2hhbmdlcyBvY2N1ci4gRG9pbmcgaXQgdGhpcyB3YXkgdnMgaGF2aW5nIGEgcGVybWFuZW50IGBjb21wb25lbnREaWRVcGRhdGVgIHRoYXQgZG9lc1xcbiAgICAgICAgLy8gYSBib29sZWFuIGNoZWNrIGV2ZXJ5IHRpbWUgYXZvaWRzIGFuIGV4dHJhIG1ldGhvZCBjYWxsIG1vc3Qgb2YgdGhlIHRpbWUsIHJlc3VsdGluZ1xcbiAgICAgICAgLy8gaW4gc29tZSBwZXJmIGJvb3N0LlxcbiAgICAgICAgdGhpcy5jb21wb25lbnREaWRVcGRhdGUgPSB1bmRlZmluZWQ7XFxuICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMoKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmlzU3Vic2NyaWJlZCA9IGZ1bmN0aW9uIGlzU3Vic2NyaWJlZCgpIHtcXG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuc3Vic2NyaXB0aW9uKSAmJiB0aGlzLnN1YnNjcmlwdGlvbi5pc1N1YnNjcmliZWQoKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmFkZEV4dHJhUHJvcHMgPSBmdW5jdGlvbiBhZGRFeHRyYVByb3BzKHByb3BzKSB7XFxuICAgICAgICBpZiAoIXdpdGhSZWYgJiYgIXJlbmRlckNvdW50UHJvcCAmJiAhKHRoaXMucHJvcHNNb2RlICYmIHRoaXMuc3Vic2NyaXB0aW9uKSkgcmV0dXJuIHByb3BzO1xcbiAgICAgICAgLy8gbWFrZSBhIHNoYWxsb3cgY29weSBzbyB0aGF0IGZpZWxkcyBhZGRlZCBkb24ndCBsZWFrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rvci5cXG4gICAgICAgIC8vIHRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yICdyZWYnIHNpbmNlIHRoYXQncyBhIHJlZmVyZW5jZSBiYWNrIHRvIHRoZSBjb21wb25lbnRcXG4gICAgICAgIC8vIGluc3RhbmNlLiBhIHNpbmdsZXRvbiBtZW1vaXplZCBzZWxlY3RvciB3b3VsZCB0aGVuIGJlIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlXFxuICAgICAgICAvLyBpbnN0YW5jZSwgcHJldmVudGluZyB0aGUgaW5zdGFuY2UgZnJvbSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZCwgYW5kIHRoYXQgd291bGQgYmUgYmFkXFxuICAgICAgICB2YXIgd2l0aEV4dHJhcyA9IF9leHRlbmRzKHt9LCBwcm9wcyk7XFxuICAgICAgICBpZiAod2l0aFJlZikgd2l0aEV4dHJhcy5yZWYgPSB0aGlzLnNldFdyYXBwZWRJbnN0YW5jZTtcXG4gICAgICAgIGlmIChyZW5kZXJDb3VudFByb3ApIHdpdGhFeHRyYXNbcmVuZGVyQ291bnRQcm9wXSA9IHRoaXMucmVuZGVyQ291bnQrKztcXG4gICAgICAgIGlmICh0aGlzLnByb3BzTW9kZSAmJiB0aGlzLnN1YnNjcmlwdGlvbikgd2l0aEV4dHJhc1tzdWJzY3JpcHRpb25LZXldID0gdGhpcy5zdWJzY3JpcHRpb247XFxuICAgICAgICByZXR1cm4gd2l0aEV4dHJhcztcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgIHZhciBzZWxlY3RvciA9IHRoaXMuc2VsZWN0b3I7XFxuICAgICAgICBzZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmYWxzZTtcXG5cXG4gICAgICAgIGlmIChzZWxlY3Rvci5lcnJvcikge1xcbiAgICAgICAgICB0aHJvdyBzZWxlY3Rvci5lcnJvcjtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoV3JhcHBlZENvbXBvbmVudCwgdGhpcy5hZGRFeHRyYVByb3BzKHNlbGVjdG9yLnByb3BzKSk7XFxuICAgICAgICB9XFxuICAgICAgfTtcXG5cXG4gICAgICByZXR1cm4gQ29ubmVjdDtcXG4gICAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgICBDb25uZWN0LldyYXBwZWRDb21wb25lbnQgPSBXcmFwcGVkQ29tcG9uZW50O1xcbiAgICBDb25uZWN0LmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XFxuICAgIENvbm5lY3QuY2hpbGRDb250ZXh0VHlwZXMgPSBjaGlsZENvbnRleHRUeXBlcztcXG4gICAgQ29ubmVjdC5jb250ZXh0VHlwZXMgPSBjb250ZXh0VHlwZXM7XFxuICAgIENvbm5lY3QucHJvcFR5cGVzID0gY29udGV4dFR5cGVzO1xcblxcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVXBkYXRlKCkge1xcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICAvLyBXZSBhcmUgaG90IHJlbG9hZGluZyFcXG4gICAgICAgIGlmICh0aGlzLnZlcnNpb24gIT09IHZlcnNpb24pIHtcXG4gICAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcXG4gICAgICAgICAgdGhpcy5pbml0U2VsZWN0b3IoKTtcXG5cXG4gICAgICAgICAgLy8gSWYgYW55IGNvbm5lY3RlZCBkZXNjZW5kYW50cyBkb24ndCBob3QgcmVsb2FkIChhbmQgcmVzdWJzY3JpYmUgaW4gdGhlIHByb2Nlc3MpLCB0aGVpclxcbiAgICAgICAgICAvLyBsaXN0ZW5lcnMgd2lsbCBiZSBsb3N0IHdoZW4gd2UgdW5zdWJzY3JpYmUuIFVuZm9ydHVuYXRlbHksIGJ5IGNvcHlpbmcgb3ZlciBhbGxcXG4gICAgICAgICAgLy8gbGlzdGVuZXJzLCB0aGlzIGRvZXMgbWVhbiB0aGF0IHRoZSBvbGQgdmVyc2lvbnMgb2YgY29ubmVjdGVkIGRlc2NlbmRhbnRzIHdpbGwgc3RpbGwgYmVcXG4gICAgICAgICAgLy8gbm90aWZpZWQgb2Ygc3RhdGUgY2hhbmdlczsgaG93ZXZlciwgdGhlaXIgb25TdGF0ZUNoYW5nZSBmdW5jdGlvbiBpcyBhIG5vLW9wIHNvIHRoaXNcXG4gICAgICAgICAgLy8gaXNuJ3QgYSBodWdlIGRlYWwuXFxuICAgICAgICAgIHZhciBvbGRMaXN0ZW5lcnMgPSBbXTtcXG5cXG4gICAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XFxuICAgICAgICAgICAgb2xkTGlzdGVuZXJzID0gdGhpcy5zdWJzY3JpcHRpb24ubGlzdGVuZXJzLmdldCgpO1xcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgdGhpcy5pbml0U3Vic2NyaXB0aW9uKCk7XFxuICAgICAgICAgIGlmIChzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMpIHtcXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi50cnlTdWJzY3JpYmUoKTtcXG4gICAgICAgICAgICBvbGRMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuc3Vic2NyaXB0aW9uLmxpc3RlbmVycy5zdWJzY3JpYmUobGlzdGVuZXIpO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfTtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX19fZGVmYXVsdCgpKENvbm5lY3QsIFdyYXBwZWRDb21wb25lbnQpO1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDczICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBY3Rpb25UeXBlczsgfSk7XFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGRlZmF1bHQgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3N5bWJvbF9vYnNlcnZhYmxlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwMyk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhlc2UgYXJlIHByaXZhdGUgYWN0aW9uIHR5cGVzIHJlc2VydmVkIGJ5IFJlZHV4LlxcbiAqIEZvciBhbnkgdW5rbm93biBhY3Rpb25zLCB5b3UgbXVzdCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUuXFxuICogSWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuXFxuICogRG8gbm90IHJlZmVyZW5jZSB0aGVzZSBhY3Rpb24gdHlwZXMgZGlyZWN0bHkgaW4geW91ciBjb2RlLlxcbiAqL1xcbnZhciBBY3Rpb25UeXBlcyA9IHtcXG4gIElOSVQ6ICdAQHJlZHV4L0lOSVQnXFxuXFxuICAvKipcXG4gICAqIENyZWF0ZXMgYSBSZWR1eCBzdG9yZSB0aGF0IGhvbGRzIHRoZSBzdGF0ZSB0cmVlLlxcbiAgICogVGhlIG9ubHkgd2F5IHRvIGNoYW5nZSB0aGUgZGF0YSBpbiB0aGUgc3RvcmUgaXMgdG8gY2FsbCBgZGlzcGF0Y2goKWAgb24gaXQuXFxuICAgKlxcbiAgICogVGhlcmUgc2hvdWxkIG9ubHkgYmUgYSBzaW5nbGUgc3RvcmUgaW4geW91ciBhcHAuIFRvIHNwZWNpZnkgaG93IGRpZmZlcmVudFxcbiAgICogcGFydHMgb2YgdGhlIHN0YXRlIHRyZWUgcmVzcG9uZCB0byBhY3Rpb25zLCB5b3UgbWF5IGNvbWJpbmUgc2V2ZXJhbCByZWR1Y2Vyc1xcbiAgICogaW50byBhIHNpbmdsZSByZWR1Y2VyIGZ1bmN0aW9uIGJ5IHVzaW5nIGBjb21iaW5lUmVkdWNlcnNgLlxcbiAgICpcXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlZHVjZXIgQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG5leHQgc3RhdGUgdHJlZSwgZ2l2ZW5cXG4gICAqIHRoZSBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBhY3Rpb24gdG8gaGFuZGxlLlxcbiAgICpcXG4gICAqIEBwYXJhbSB7YW55fSBbcHJlbG9hZGVkU3RhdGVdIFRoZSBpbml0aWFsIHN0YXRlLiBZb3UgbWF5IG9wdGlvbmFsbHkgc3BlY2lmeSBpdFxcbiAgICogdG8gaHlkcmF0ZSB0aGUgc3RhdGUgZnJvbSB0aGUgc2VydmVyIGluIHVuaXZlcnNhbCBhcHBzLCBvciB0byByZXN0b3JlIGFcXG4gICAqIHByZXZpb3VzbHkgc2VyaWFsaXplZCB1c2VyIHNlc3Npb24uXFxuICAgKiBJZiB5b3UgdXNlIGBjb21iaW5lUmVkdWNlcnNgIHRvIHByb2R1Y2UgdGhlIHJvb3QgcmVkdWNlciBmdW5jdGlvbiwgdGhpcyBtdXN0IGJlXFxuICAgKiBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzaGFwZSBhcyBgY29tYmluZVJlZHVjZXJzYCBrZXlzLlxcbiAgICpcXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtlbmhhbmNlcl0gVGhlIHN0b3JlIGVuaGFuY2VyLiBZb3UgbWF5IG9wdGlvbmFsbHkgc3BlY2lmeSBpdFxcbiAgICogdG8gZW5oYW5jZSB0aGUgc3RvcmUgd2l0aCB0aGlyZC1wYXJ0eSBjYXBhYmlsaXRpZXMgc3VjaCBhcyBtaWRkbGV3YXJlLFxcbiAgICogdGltZSB0cmF2ZWwsIHBlcnNpc3RlbmNlLCBldGMuIFRoZSBvbmx5IHN0b3JlIGVuaGFuY2VyIHRoYXQgc2hpcHMgd2l0aCBSZWR1eFxcbiAgICogaXMgYGFwcGx5TWlkZGxld2FyZSgpYC5cXG4gICAqXFxuICAgKiBAcmV0dXJucyB7U3RvcmV9IEEgUmVkdXggc3RvcmUgdGhhdCBsZXRzIHlvdSByZWFkIHRoZSBzdGF0ZSwgZGlzcGF0Y2ggYWN0aW9uc1xcbiAgICogYW5kIHN1YnNjcmliZSB0byBjaGFuZ2VzLlxcbiAgICovXFxufTtmdW5jdGlvbiBjcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpIHtcXG4gIHZhciBfcmVmMjtcXG5cXG4gIGlmICh0eXBlb2YgcHJlbG9hZGVkU3RhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGVuaGFuY2VyID09PSAndW5kZWZpbmVkJykge1xcbiAgICBlbmhhbmNlciA9IHByZWxvYWRlZFN0YXRlO1xcbiAgICBwcmVsb2FkZWRTdGF0ZSA9IHVuZGVmaW5lZDtcXG4gIH1cXG5cXG4gIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09ICd1bmRlZmluZWQnKSB7XFxuICAgIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRoZSBlbmhhbmNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBlbmhhbmNlcihjcmVhdGVTdG9yZSkocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUpO1xcbiAgfVxcblxcbiAgaWYgKHR5cGVvZiByZWR1Y2VyICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdGhlIHJlZHVjZXIgdG8gYmUgYSBmdW5jdGlvbi4nKTtcXG4gIH1cXG5cXG4gIHZhciBjdXJyZW50UmVkdWNlciA9IHJlZHVjZXI7XFxuICB2YXIgY3VycmVudFN0YXRlID0gcHJlbG9hZGVkU3RhdGU7XFxuICB2YXIgY3VycmVudExpc3RlbmVycyA9IFtdO1xcbiAgdmFyIG5leHRMaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzO1xcbiAgdmFyIGlzRGlzcGF0Y2hpbmcgPSBmYWxzZTtcXG5cXG4gIGZ1bmN0aW9uIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKSB7XFxuICAgIGlmIChuZXh0TGlzdGVuZXJzID09PSBjdXJyZW50TGlzdGVuZXJzKSB7XFxuICAgICAgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnMuc2xpY2UoKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLyoqXFxuICAgKiBSZWFkcyB0aGUgc3RhdGUgdHJlZSBtYW5hZ2VkIGJ5IHRoZSBzdG9yZS5cXG4gICAqXFxuICAgKiBAcmV0dXJucyB7YW55fSBUaGUgY3VycmVudCBzdGF0ZSB0cmVlIG9mIHlvdXIgYXBwbGljYXRpb24uXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGdldFN0YXRlKCkge1xcbiAgICByZXR1cm4gY3VycmVudFN0YXRlO1xcbiAgfVxcblxcbiAgLyoqXFxuICAgKiBBZGRzIGEgY2hhbmdlIGxpc3RlbmVyLiBJdCB3aWxsIGJlIGNhbGxlZCBhbnkgdGltZSBhbiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCxcXG4gICAqIGFuZCBzb21lIHBhcnQgb2YgdGhlIHN0YXRlIHRyZWUgbWF5IHBvdGVudGlhbGx5IGhhdmUgY2hhbmdlZC4gWW91IG1heSB0aGVuXFxuICAgKiBjYWxsIGBnZXRTdGF0ZSgpYCB0byByZWFkIHRoZSBjdXJyZW50IHN0YXRlIHRyZWUgaW5zaWRlIHRoZSBjYWxsYmFjay5cXG4gICAqXFxuICAgKiBZb3UgbWF5IGNhbGwgYGRpc3BhdGNoKClgIGZyb20gYSBjaGFuZ2UgbGlzdGVuZXIsIHdpdGggdGhlIGZvbGxvd2luZ1xcbiAgICogY2F2ZWF0czpcXG4gICAqXFxuICAgKiAxLiBUaGUgc3Vic2NyaXB0aW9ucyBhcmUgc25hcHNob3R0ZWQganVzdCBiZWZvcmUgZXZlcnkgYGRpc3BhdGNoKClgIGNhbGwuXFxuICAgKiBJZiB5b3Ugc3Vic2NyaWJlIG9yIHVuc3Vic2NyaWJlIHdoaWxlIHRoZSBsaXN0ZW5lcnMgYXJlIGJlaW5nIGludm9rZWQsIHRoaXNcXG4gICAqIHdpbGwgbm90IGhhdmUgYW55IGVmZmVjdCBvbiB0aGUgYGRpc3BhdGNoKClgIHRoYXQgaXMgY3VycmVudGx5IGluIHByb2dyZXNzLlxcbiAgICogSG93ZXZlciwgdGhlIG5leHQgYGRpc3BhdGNoKClgIGNhbGwsIHdoZXRoZXIgbmVzdGVkIG9yIG5vdCwgd2lsbCB1c2UgYSBtb3JlXFxuICAgKiByZWNlbnQgc25hcHNob3Qgb2YgdGhlIHN1YnNjcmlwdGlvbiBsaXN0LlxcbiAgICpcXG4gICAqIDIuIFRoZSBsaXN0ZW5lciBzaG91bGQgbm90IGV4cGVjdCB0byBzZWUgYWxsIHN0YXRlIGNoYW5nZXMsIGFzIHRoZSBzdGF0ZVxcbiAgICogbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIGEgbmVzdGVkIGBkaXNwYXRjaCgpYCBiZWZvcmVcXG4gICAqIHRoZSBsaXN0ZW5lciBpcyBjYWxsZWQuIEl0IGlzLCBob3dldmVyLCBndWFyYW50ZWVkIHRoYXQgYWxsIHN1YnNjcmliZXJzXFxuICAgKiByZWdpc3RlcmVkIGJlZm9yZSB0aGUgYGRpc3BhdGNoKClgIHN0YXJ0ZWQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbGF0ZXN0XFxuICAgKiBzdGF0ZSBieSB0aGUgdGltZSBpdCBleGl0cy5cXG4gICAqXFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBBIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgb24gZXZlcnkgZGlzcGF0Y2guXFxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gcmVtb3ZlIHRoaXMgY2hhbmdlIGxpc3RlbmVyLlxcbiAgICovXFxuICBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcXG4gICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbi4nKTtcXG4gICAgfVxcblxcbiAgICB2YXIgaXNTdWJzY3JpYmVkID0gdHJ1ZTtcXG5cXG4gICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xcbiAgICBuZXh0TGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XFxuICAgICAgaWYgKCFpc1N1YnNjcmliZWQpIHtcXG4gICAgICAgIHJldHVybjtcXG4gICAgICB9XFxuXFxuICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XFxuXFxuICAgICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xcbiAgICAgIHZhciBpbmRleCA9IG5leHRMaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XFxuICAgICAgbmV4dExpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xcbiAgICB9O1xcbiAgfVxcblxcbiAgLyoqXFxuICAgKiBEaXNwYXRjaGVzIGFuIGFjdGlvbi4gSXQgaXMgdGhlIG9ubHkgd2F5IHRvIHRyaWdnZXIgYSBzdGF0ZSBjaGFuZ2UuXFxuICAgKlxcbiAgICogVGhlIGByZWR1Y2VyYCBmdW5jdGlvbiwgdXNlZCB0byBjcmVhdGUgdGhlIHN0b3JlLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZVxcbiAgICogY3VycmVudCBzdGF0ZSB0cmVlIGFuZCB0aGUgZ2l2ZW4gYGFjdGlvbmAuIEl0cyByZXR1cm4gdmFsdWUgd2lsbFxcbiAgICogYmUgY29uc2lkZXJlZCB0aGUgKipuZXh0Kiogc3RhdGUgb2YgdGhlIHRyZWUsIGFuZCB0aGUgY2hhbmdlIGxpc3RlbmVyc1xcbiAgICogd2lsbCBiZSBub3RpZmllZC5cXG4gICAqXFxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIHBsYWluIG9iamVjdCBhY3Rpb25zLiBJZiB5b3Ugd2FudCB0b1xcbiAgICogZGlzcGF0Y2ggYSBQcm9taXNlLCBhbiBPYnNlcnZhYmxlLCBhIHRodW5rLCBvciBzb21ldGhpbmcgZWxzZSwgeW91IG5lZWQgdG9cXG4gICAqIHdyYXAgeW91ciBzdG9yZSBjcmVhdGluZyBmdW5jdGlvbiBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIG1pZGRsZXdhcmUuIEZvclxcbiAgICogZXhhbXBsZSwgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYHJlZHV4LXRodW5rYCBwYWNrYWdlLiBFdmVuIHRoZVxcbiAgICogbWlkZGxld2FyZSB3aWxsIGV2ZW50dWFsbHkgZGlzcGF0Y2ggcGxhaW4gb2JqZWN0IGFjdGlvbnMgdXNpbmcgdGhpcyBtZXRob2QuXFxuICAgKlxcbiAgICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBBIHBsYWluIG9iamVjdCByZXByZXNlbnRpbmcg4oCcd2hhdCBjaGFuZ2Vk4oCdLiBJdCBpc1xcbiAgICogYSBnb29kIGlkZWEgdG8ga2VlcCBhY3Rpb25zIHNlcmlhbGl6YWJsZSBzbyB5b3UgY2FuIHJlY29yZCBhbmQgcmVwbGF5IHVzZXJcXG4gICAqIHNlc3Npb25zLCBvciB1c2UgdGhlIHRpbWUgdHJhdmVsbGluZyBgcmVkdXgtZGV2dG9vbHNgLiBBbiBhY3Rpb24gbXVzdCBoYXZlXFxuICAgKiBhIGB0eXBlYCBwcm9wZXJ0eSB3aGljaCBtYXkgbm90IGJlIGB1bmRlZmluZWRgLiBJdCBpcyBhIGdvb2QgaWRlYSB0byB1c2VcXG4gICAqIHN0cmluZyBjb25zdGFudHMgZm9yIGFjdGlvbiB0eXBlcy5cXG4gICAqXFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBGb3IgY29udmVuaWVuY2UsIHRoZSBzYW1lIGFjdGlvbiBvYmplY3QgeW91IGRpc3BhdGNoZWQuXFxuICAgKlxcbiAgICogTm90ZSB0aGF0LCBpZiB5b3UgdXNlIGEgY3VzdG9tIG1pZGRsZXdhcmUsIGl0IG1heSB3cmFwIGBkaXNwYXRjaCgpYCB0b1xcbiAgICogcmV0dXJuIHNvbWV0aGluZyBlbHNlIChmb3IgZXhhbXBsZSwgYSBQcm9taXNlIHlvdSBjYW4gYXdhaXQpLlxcbiAgICovXFxuICBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcXG4gICAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShhY3Rpb24pKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBY3Rpb25zIG11c3QgYmUgcGxhaW4gb2JqZWN0cy4gJyArICdVc2UgY3VzdG9tIG1pZGRsZXdhcmUgZm9yIGFzeW5jIGFjdGlvbnMuJyk7XFxuICAgIH1cXG5cXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24udHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbnMgbWF5IG5vdCBoYXZlIGFuIHVuZGVmaW5lZCBcXFwidHlwZVxcXCIgcHJvcGVydHkuICcgKyAnSGF2ZSB5b3UgbWlzc3BlbGxlZCBhIGNvbnN0YW50PycpO1xcbiAgICB9XFxuXFxuICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VycyBtYXkgbm90IGRpc3BhdGNoIGFjdGlvbnMuJyk7XFxuICAgIH1cXG5cXG4gICAgdHJ5IHtcXG4gICAgICBpc0Rpc3BhdGNoaW5nID0gdHJ1ZTtcXG4gICAgICBjdXJyZW50U3RhdGUgPSBjdXJyZW50UmVkdWNlcihjdXJyZW50U3RhdGUsIGFjdGlvbik7XFxuICAgIH0gZmluYWxseSB7XFxuICAgICAgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xcbiAgICB9XFxuXFxuICAgIHZhciBsaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzID0gbmV4dExpc3RlbmVycztcXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcXG4gICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XFxuICAgICAgbGlzdGVuZXIoKTtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gYWN0aW9uO1xcbiAgfVxcblxcbiAgLyoqXFxuICAgKiBSZXBsYWNlcyB0aGUgcmVkdWNlciBjdXJyZW50bHkgdXNlZCBieSB0aGUgc3RvcmUgdG8gY2FsY3VsYXRlIHRoZSBzdGF0ZS5cXG4gICAqXFxuICAgKiBZb3UgbWlnaHQgbmVlZCB0aGlzIGlmIHlvdXIgYXBwIGltcGxlbWVudHMgY29kZSBzcGxpdHRpbmcgYW5kIHlvdSB3YW50IHRvXFxuICAgKiBsb2FkIHNvbWUgb2YgdGhlIHJlZHVjZXJzIGR5bmFtaWNhbGx5LiBZb3UgbWlnaHQgYWxzbyBuZWVkIHRoaXMgaWYgeW91XFxuICAgKiBpbXBsZW1lbnQgYSBob3QgcmVsb2FkaW5nIG1lY2hhbmlzbSBmb3IgUmVkdXguXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbmV4dFJlZHVjZXIgVGhlIHJlZHVjZXIgZm9yIHRoZSBzdG9yZSB0byB1c2UgaW5zdGVhZC5cXG4gICAqIEByZXR1cm5zIHt2b2lkfVxcbiAgICovXFxuICBmdW5jdGlvbiByZXBsYWNlUmVkdWNlcihuZXh0UmVkdWNlcikge1xcbiAgICBpZiAodHlwZW9mIG5leHRSZWR1Y2VyICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0aGUgbmV4dFJlZHVjZXIgdG8gYmUgYSBmdW5jdGlvbi4nKTtcXG4gICAgfVxcblxcbiAgICBjdXJyZW50UmVkdWNlciA9IG5leHRSZWR1Y2VyO1xcbiAgICBkaXNwYXRjaCh7IHR5cGU6IEFjdGlvblR5cGVzLklOSVQgfSk7XFxuICB9XFxuXFxuICAvKipcXG4gICAqIEludGVyb3BlcmFiaWxpdHkgcG9pbnQgZm9yIG9ic2VydmFibGUvcmVhY3RpdmUgbGlicmFyaWVzLlxcbiAgICogQHJldHVybnMge29ic2VydmFibGV9IEEgbWluaW1hbCBvYnNlcnZhYmxlIG9mIHN0YXRlIGNoYW5nZXMuXFxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBvYnNlcnZhYmxlIHByb3Bvc2FsOlxcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxcbiAgICovXFxuICBmdW5jdGlvbiBvYnNlcnZhYmxlKCkge1xcbiAgICB2YXIgX3JlZjtcXG5cXG4gICAgdmFyIG91dGVyU3Vic2NyaWJlID0gc3Vic2NyaWJlO1xcbiAgICByZXR1cm4gX3JlZiA9IHtcXG4gICAgICAvKipcXG4gICAgICAgKiBUaGUgbWluaW1hbCBvYnNlcnZhYmxlIHN1YnNjcmlwdGlvbiBtZXRob2QuXFxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9ic2VydmVyIEFueSBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBhcyBhbiBvYnNlcnZlci5cXG4gICAgICAgKiBUaGUgb2JzZXJ2ZXIgb2JqZWN0IHNob3VsZCBoYXZlIGEgYG5leHRgIG1ldGhvZC5cXG4gICAgICAgKiBAcmV0dXJucyB7c3Vic2NyaXB0aW9ufSBBbiBvYmplY3Qgd2l0aCBhbiBgdW5zdWJzY3JpYmVgIG1ldGhvZCB0aGF0IGNhblxcbiAgICAgICAqIGJlIHVzZWQgdG8gdW5zdWJzY3JpYmUgdGhlIG9ic2VydmFibGUgZnJvbSB0aGUgc3RvcmUsIGFuZCBwcmV2ZW50IGZ1cnRoZXJcXG4gICAgICAgKiBlbWlzc2lvbiBvZiB2YWx1ZXMgZnJvbSB0aGUgb2JzZXJ2YWJsZS5cXG4gICAgICAgKi9cXG4gICAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xcbiAgICAgICAgaWYgKHR5cGVvZiBvYnNlcnZlciAhPT0gJ29iamVjdCcpIHtcXG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgdGhlIG9ic2VydmVyIHRvIGJlIGFuIG9iamVjdC4nKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGZ1bmN0aW9uIG9ic2VydmVTdGF0ZSgpIHtcXG4gICAgICAgICAgaWYgKG9ic2VydmVyLm5leHQpIHtcXG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGdldFN0YXRlKCkpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICBvYnNlcnZlU3RhdGUoKTtcXG4gICAgICAgIHZhciB1bnN1YnNjcmliZSA9IG91dGVyU3Vic2NyaWJlKG9ic2VydmVTdGF0ZSk7XFxuICAgICAgICByZXR1cm4geyB1bnN1YnNjcmliZTogdW5zdWJzY3JpYmUgfTtcXG4gICAgICB9XFxuICAgIH0sIF9yZWZbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3N5bWJvbF9vYnNlcnZhYmxlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dXSA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICByZXR1cm4gdGhpcztcXG4gICAgfSwgX3JlZjtcXG4gIH1cXG5cXG4gIC8vIFdoZW4gYSBzdG9yZSBpcyBjcmVhdGVkLCBhbiBcXFwiSU5JVFxcXCIgYWN0aW9uIGlzIGRpc3BhdGNoZWQgc28gdGhhdCBldmVyeVxcbiAgLy8gcmVkdWNlciByZXR1cm5zIHRoZWlyIGluaXRpYWwgc3RhdGUuIFRoaXMgZWZmZWN0aXZlbHkgcG9wdWxhdGVzXFxuICAvLyB0aGUgaW5pdGlhbCBzdGF0ZSB0cmVlLlxcbiAgZGlzcGF0Y2goeyB0eXBlOiBBY3Rpb25UeXBlcy5JTklUIH0pO1xcblxcbiAgcmV0dXJuIF9yZWYyID0ge1xcbiAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXFxuICAgIHN1YnNjcmliZTogc3Vic2NyaWJlLFxcbiAgICBnZXRTdGF0ZTogZ2V0U3RhdGUsXFxuICAgIHJlcGxhY2VSZWR1Y2VyOiByZXBsYWNlUmVkdWNlclxcbiAgfSwgX3JlZjJbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3N5bWJvbF9vYnNlcnZhYmxlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dXSA9IG9ic2VydmFibGUsIF9yZWYyO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gd2FybmluZztcXG4vKipcXG4gKiBQcmludHMgYSB3YXJuaW5nIGluIHRoZSBjb25zb2xlIGlmIGl0IGV4aXN0cy5cXG4gKlxcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSB3YXJuaW5nIG1lc3NhZ2UuXFxuICogQHJldHVybnMge3ZvaWR9XFxuICovXFxuZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlKSB7XFxuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXFxuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XFxuICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XFxuICB9XFxuICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cXG4gIHRyeSB7XFxuICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgaWYgeW91IGVuYWJsZVxcbiAgICAvLyBcXFwiYnJlYWsgb24gYWxsIGV4Y2VwdGlvbnNcXFwiIGluIHlvdXIgY29uc29sZSxcXG4gICAgLy8gaXQgd291bGQgcGF1c2UgdGhlIGV4ZWN1dGlvbiBhdCB0aGlzIGxpbmUuXFxuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHkgKi9cXG4gIH0gY2F0Y2ggKGUpIHt9XFxuICAvKiBlc2xpbnQtZW5hYmxlIG5vLWVtcHR5ICovXFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDc1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSBjb21wb3NlO1xcbi8qKlxcbiAqIENvbXBvc2VzIHNpbmdsZS1hcmd1bWVudCBmdW5jdGlvbnMgZnJvbSByaWdodCB0byBsZWZ0LiBUaGUgcmlnaHRtb3N0XFxuICogZnVuY3Rpb24gY2FuIHRha2UgbXVsdGlwbGUgYXJndW1lbnRzIGFzIGl0IHByb3ZpZGVzIHRoZSBzaWduYXR1cmUgZm9yXFxuICogdGhlIHJlc3VsdGluZyBjb21wb3NpdGUgZnVuY3Rpb24uXFxuICpcXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBmdW5jcyBUaGUgZnVuY3Rpb25zIHRvIGNvbXBvc2UuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIG9idGFpbmVkIGJ5IGNvbXBvc2luZyB0aGUgYXJndW1lbnQgZnVuY3Rpb25zXFxuICogZnJvbSByaWdodCB0byBsZWZ0LiBGb3IgZXhhbXBsZSwgY29tcG9zZShmLCBnLCBoKSBpcyBpZGVudGljYWwgdG8gZG9pbmdcXG4gKiAoLi4uYXJncykgPT4gZihnKGgoLi4uYXJncykpKS5cXG4gKi9cXG5cXG5mdW5jdGlvbiBjb21wb3NlKCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZ1bmNzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIGZ1bmNzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xcbiAgICAgIHJldHVybiBhcmc7XFxuICAgIH07XFxuICB9XFxuXFxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAxKSB7XFxuICAgIHJldHVybiBmdW5jc1swXTtcXG4gIH1cXG5cXG4gIHJldHVybiBmdW5jcy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgICByZXR1cm4gYShiLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKSk7XFxuICAgIH07XFxuICB9KTtcXG59XFxuXFxuLyoqKi8gfSksXFxuLyogNzYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihwcm9jZXNzKSB7LyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gd3JhcE1hcFRvUHJvcHNDb25zdGFudDtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZ2V0RGVwZW5kc09uT3duUHJvcHMgKi9cXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJiXFxcIl0gPSB3cmFwTWFwVG9Qcm9wc0Z1bmM7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fdXRpbHNfdmVyaWZ5UGxhaW5PYmplY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzcpO1xcblxcblxcbmZ1bmN0aW9uIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQoZ2V0Q29uc3RhbnQpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbml0Q29uc3RhbnRTZWxlY3RvcihkaXNwYXRjaCwgb3B0aW9ucykge1xcbiAgICB2YXIgY29uc3RhbnQgPSBnZXRDb25zdGFudChkaXNwYXRjaCwgb3B0aW9ucyk7XFxuXFxuICAgIGZ1bmN0aW9uIGNvbnN0YW50U2VsZWN0b3IoKSB7XFxuICAgICAgcmV0dXJuIGNvbnN0YW50O1xcbiAgICB9XFxuICAgIGNvbnN0YW50U2VsZWN0b3IuZGVwZW5kc09uT3duUHJvcHMgPSBmYWxzZTtcXG4gICAgcmV0dXJuIGNvbnN0YW50U2VsZWN0b3I7XFxuICB9O1xcbn1cXG5cXG4vLyBkZXBlbmRzT25Pd25Qcm9wcyBpcyB1c2VkIGJ5IGNyZWF0ZU1hcFRvUHJvcHNQcm94eSB0byBkZXRlcm1pbmUgd2hldGhlciB0byBwYXNzIHByb3BzIGFzIGFyZ3NcXG4vLyB0byB0aGUgbWFwVG9Qcm9wcyBmdW5jdGlvbiBiZWluZyB3cmFwcGVkLiBJdCBpcyBhbHNvIHVzZWQgYnkgbWFrZVB1cmVQcm9wc1NlbGVjdG9yIHRvIGRldGVybWluZVxcbi8vIHdoZXRoZXIgbWFwVG9Qcm9wcyBuZWVkcyB0byBiZSBpbnZva2VkIHdoZW4gcHJvcHMgaGF2ZSBjaGFuZ2VkLlxcbi8vIFxcbi8vIEEgbGVuZ3RoIG9mIG9uZSBzaWduYWxzIHRoYXQgbWFwVG9Qcm9wcyBkb2VzIG5vdCBkZXBlbmQgb24gcHJvcHMgZnJvbSB0aGUgcGFyZW50IGNvbXBvbmVudC5cXG4vLyBBIGxlbmd0aCBvZiB6ZXJvIGlzIGFzc3VtZWQgdG8gbWVhbiBtYXBUb1Byb3BzIGlzIGdldHRpbmcgYXJncyB2aWEgYXJndW1lbnRzIG9yIC4uLmFyZ3MgYW5kXFxuLy8gdGhlcmVmb3JlIG5vdCByZXBvcnRpbmcgaXRzIGxlbmd0aCBhY2N1cmF0ZWx5Li5cXG5mdW5jdGlvbiBnZXREZXBlbmRzT25Pd25Qcm9wcyhtYXBUb1Byb3BzKSB7XFxuICByZXR1cm4gbWFwVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcyAhPT0gbnVsbCAmJiBtYXBUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzICE9PSB1bmRlZmluZWQgPyBCb29sZWFuKG1hcFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMpIDogbWFwVG9Qcm9wcy5sZW5ndGggIT09IDE7XFxufVxcblxcbi8vIFVzZWQgYnkgd2hlbk1hcFN0YXRlVG9Qcm9wc0lzRnVuY3Rpb24gYW5kIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9uLFxcbi8vIHRoaXMgZnVuY3Rpb24gd3JhcHMgbWFwVG9Qcm9wcyBpbiBhIHByb3h5IGZ1bmN0aW9uIHdoaWNoIGRvZXMgc2V2ZXJhbCB0aGluZ3M6XFxuLy8gXFxuLy8gICogRGV0ZWN0cyB3aGV0aGVyIHRoZSBtYXBUb1Byb3BzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBkZXBlbmRzIG9uIHByb3BzLCB3aGljaFxcbi8vICAgIGlzIHVzZWQgYnkgc2VsZWN0b3JGYWN0b3J5IHRvIGRlY2lkZSBpZiBpdCBzaG91bGQgcmVpbnZva2Ugb24gcHJvcHMgY2hhbmdlcy5cXG4vLyAgICBcXG4vLyAgKiBPbiBmaXJzdCBjYWxsLCBoYW5kbGVzIG1hcFRvUHJvcHMgaWYgcmV0dXJucyBhbm90aGVyIGZ1bmN0aW9uLCBhbmQgdHJlYXRzIHRoYXRcXG4vLyAgICBuZXcgZnVuY3Rpb24gYXMgdGhlIHRydWUgbWFwVG9Qcm9wcyBmb3Igc3Vic2VxdWVudCBjYWxscy5cXG4vLyAgICBcXG4vLyAgKiBPbiBmaXJzdCBjYWxsLCB2ZXJpZmllcyB0aGUgZmlyc3QgcmVzdWx0IGlzIGEgcGxhaW4gb2JqZWN0LCBpbiBvcmRlciB0byB3YXJuXFxuLy8gICAgdGhlIGRldmVsb3BlciB0aGF0IHRoZWlyIG1hcFRvUHJvcHMgZnVuY3Rpb24gaXMgbm90IHJldHVybmluZyBhIHZhbGlkIHJlc3VsdC5cXG4vLyAgICBcXG5mdW5jdGlvbiB3cmFwTWFwVG9Qcm9wc0Z1bmMobWFwVG9Qcm9wcywgbWV0aG9kTmFtZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRQcm94eVNlbGVjdG9yKGRpc3BhdGNoLCBfcmVmKSB7XFxuICAgIHZhciBkaXNwbGF5TmFtZSA9IF9yZWYuZGlzcGxheU5hbWU7XFxuXFxuICAgIHZhciBwcm94eSA9IGZ1bmN0aW9uIG1hcFRvUHJvcHNQcm94eShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKSB7XFxuICAgICAgcmV0dXJuIHByb3h5LmRlcGVuZHNPbk93blByb3BzID8gcHJveHkubWFwVG9Qcm9wcyhzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKSA6IHByb3h5Lm1hcFRvUHJvcHMoc3RhdGVPckRpc3BhdGNoKTtcXG4gICAgfTtcXG5cXG4gICAgLy8gYWxsb3cgZGV0ZWN0RmFjdG9yeUFuZFZlcmlmeSB0byBnZXQgb3duUHJvcHNcXG4gICAgcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPSB0cnVlO1xcblxcbiAgICBwcm94eS5tYXBUb1Byb3BzID0gZnVuY3Rpb24gZGV0ZWN0RmFjdG9yeUFuZFZlcmlmeShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKSB7XFxuICAgICAgcHJveHkubWFwVG9Qcm9wcyA9IG1hcFRvUHJvcHM7XFxuICAgICAgcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPSBnZXREZXBlbmRzT25Pd25Qcm9wcyhtYXBUb1Byb3BzKTtcXG4gICAgICB2YXIgcHJvcHMgPSBwcm94eShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKTtcXG5cXG4gICAgICBpZiAodHlwZW9mIHByb3BzID09PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICBwcm94eS5tYXBUb1Byb3BzID0gcHJvcHM7XFxuICAgICAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IGdldERlcGVuZHNPbk93blByb3BzKHByb3BzKTtcXG4gICAgICAgIHByb3BzID0gcHJveHkoc3RhdGVPckRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuICAgICAgfVxcblxcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc192ZXJpZnlQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocHJvcHMsIGRpc3BsYXlOYW1lLCBtZXRob2ROYW1lKTtcXG5cXG4gICAgICByZXR1cm4gcHJvcHM7XFxuICAgIH07XFxuXFxuICAgIHJldHVybiBwcm94eTtcXG4gIH07XFxufVxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiA3NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gdmVyaWZ5UGxhaW5PYmplY3Q7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fd2FybmluZ19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XFxuXFxuXFxuXFxuZnVuY3Rpb24gdmVyaWZ5UGxhaW5PYmplY3QodmFsdWUsIGRpc3BsYXlOYW1lLCBtZXRob2ROYW1lKSB7XFxuICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShtZXRob2ROYW1lICsgJygpIGluICcgKyBkaXNwbGF5TmFtZSArICcgbXVzdCByZXR1cm4gYSBwbGFpbiBvYmplY3QuIEluc3RlYWQgcmVjZWl2ZWQgJyArIHZhbHVlICsgJy4nKTtcXG4gIH1cXG59XFxuXFxuLyoqKi8gfSksXFxuLyogNzggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlJbnNlcnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5SW5zZXJ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheU1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5TW92ZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlQb3BcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UG9wOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVB1c2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UHVzaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlSZW1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UmVtb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZUFsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmVBbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U2hpZnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U3BsaWNlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVNwbGljZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTd2FwXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVN3YXA7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5VW5zaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlVbnNoaWZ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhdXRvZmlsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXV0b2ZpbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJsdXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJsdXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNoYW5nZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hhbmdlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJjbGVhclN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY2xlYXJTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNsZWFyU3VibWl0RXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbGVhclN1Ym1pdEVycm9yczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2xlYXJBc3luY0Vycm9yXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbGVhckFzeW5jRXJyb3I7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImRlc3Ryb3lcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGRlc3Ryb3k7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImZvY3VzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmb2N1czsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaW5pdGlhbGl6ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5pdGlhbGl6ZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwicmVnaXN0ZXJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVnaXN0ZXJGaWVsZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwicmVzZXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlc2V0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdGFydEFzeW5jVmFsaWRhdGlvblxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhcnRBc3luY1ZhbGlkYXRpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0YXJ0U3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGFydFN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RvcEFzeW5jVmFsaWRhdGlvblxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RvcEFzeW5jVmFsaWRhdGlvbjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RvcFN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RvcFN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdEZhaWxlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0RmFpbGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzZXRTdWJtaXRTdWNjZWVkZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNldFN1Ym1pdFN1Y2NlZWRlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidG91Y2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnJlZ2lzdGVyRmllbGRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVucmVnaXN0ZXJGaWVsZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidW50b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW50b3VjaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidXBkYXRlU3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdXBkYXRlU3luY0Vycm9yczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidXBkYXRlU3luY1dhcm5pbmdzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1cGRhdGVTeW5jV2FybmluZ3M7IH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbnZhciBhcnJheUluc2VydCA9IGZ1bmN0aW9uIGFycmF5SW5zZXJ0KGZvcm0sIGZpZWxkLCBpbmRleCwgdmFsdWUpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfSU5TRVJUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCBpbmRleDogaW5kZXggfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBhcnJheU1vdmUgPSBmdW5jdGlvbiBhcnJheU1vdmUoZm9ybSwgZmllbGQsIGZyb20sIHRvKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX01PVkVcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQsIGZyb206IGZyb20sIHRvOiB0byB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlQb3AgPSBmdW5jdGlvbiBhcnJheVBvcChmb3JtLCBmaWVsZCkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QT1BcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGFycmF5UHVzaCA9IGZ1bmN0aW9uIGFycmF5UHVzaChmb3JtLCBmaWVsZCwgdmFsdWUpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUFVTSFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGFycmF5UmVtb3ZlID0gZnVuY3Rpb24gYXJyYXlSZW1vdmUoZm9ybSwgZmllbGQsIGluZGV4KSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXg6IGluZGV4IH0gfTtcXG59O1xcblxcbnZhciBhcnJheVJlbW92ZUFsbCA9IGZ1bmN0aW9uIGFycmF5UmVtb3ZlQWxsKGZvcm0sIGZpZWxkKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRV9BTExcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGFycmF5U2hpZnQgPSBmdW5jdGlvbiBhcnJheVNoaWZ0KGZvcm0sIGZpZWxkKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NISUZUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVNwbGljZSA9IGZ1bmN0aW9uIGFycmF5U3BsaWNlKGZvcm0sIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB2YWx1ZSkge1xcbiAgdmFyIGFjdGlvbiA9IHtcXG4gICAgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9TUExJQ0VcXFwiXSxcXG4gICAgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQsIGluZGV4OiBpbmRleCwgcmVtb3ZlTnVtOiByZW1vdmVOdW0gfVxcbiAgfTtcXG4gIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XFxuICAgIGFjdGlvbi5wYXlsb2FkID0gdmFsdWU7XFxuICB9XFxuICByZXR1cm4gYWN0aW9uO1xcbn07XFxuXFxudmFyIGFycmF5U3dhcCA9IGZ1bmN0aW9uIGFycmF5U3dhcChmb3JtLCBmaWVsZCwgaW5kZXhBLCBpbmRleEIpIHtcXG4gIGlmIChpbmRleEEgPT09IGluZGV4Qikge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N3YXAgaW5kaWNlcyBjYW5ub3QgYmUgZXF1YWwnKTtcXG4gIH1cXG4gIGlmIChpbmRleEEgPCAwIHx8IGluZGV4QiA8IDApIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTd2FwIGluZGljZXMgY2Fubm90IGJlIG5lZ2F0aXZlJyk7XFxuICB9XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NXQVBcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQsIGluZGV4QTogaW5kZXhBLCBpbmRleEI6IGluZGV4QiB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlVbnNoaWZ0ID0gZnVuY3Rpb24gYXJyYXlVbnNoaWZ0KGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9VTlNISUZUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgYXV0b2ZpbGwgPSBmdW5jdGlvbiBhdXRvZmlsbChmb3JtLCBmaWVsZCwgdmFsdWUpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVVUT0ZJTExcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBibHVyID0gZnVuY3Rpb24gYmx1cihmb3JtLCBmaWVsZCwgdmFsdWUsIHRvdWNoKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkJMVVJcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQsIHRvdWNoOiB0b3VjaCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGNoYW5nZSA9IGZ1bmN0aW9uIGNoYW5nZShmb3JtLCBmaWVsZCwgdmFsdWUsIHRvdWNoLCBwZXJzaXN0ZW50U3VibWl0RXJyb3JzKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNIQU5HRVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgdG91Y2g6IHRvdWNoLCBwZXJzaXN0ZW50U3VibWl0RXJyb3JzOiBwZXJzaXN0ZW50U3VibWl0RXJyb3JzIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgY2xlYXJTdWJtaXQgPSBmdW5jdGlvbiBjbGVhclN1Ym1pdChmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSB9O1xcbn07XFxuXFxudmFyIGNsZWFyU3VibWl0RXJyb3JzID0gZnVuY3Rpb24gY2xlYXJTdWJtaXRFcnJvcnMoZm9ybSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJDTEVBUl9TVUJNSVRfRVJST1JTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgY2xlYXJBc3luY0Vycm9yID0gZnVuY3Rpb24gY2xlYXJBc3luY0Vycm9yKGZvcm0sIGZpZWxkKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX0FTWU5DX0VSUk9SXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0gfTtcXG59O1xcblxcbnZhciBkZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBmb3JtID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIGZvcm1bX2tleV0gPSBhcmd1bWVudHNbX2tleV07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkRFU1RST1lcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0gfTtcXG59O1xcblxcbnZhciBmb2N1cyA9IGZ1bmN0aW9uIGZvY3VzKGZvcm0sIGZpZWxkKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkZPQ1VTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0gfTtcXG59O1xcblxcbnZhciBpbml0aWFsaXplID0gZnVuY3Rpb24gaW5pdGlhbGl6ZShmb3JtLCB2YWx1ZXMsIGtlZXBEaXJ0eSkge1xcbiAgdmFyIG90aGVyTWV0YSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XFxuXFxuICBpZiAoa2VlcERpcnR5IGluc3RhbmNlb2YgT2JqZWN0KSB7XFxuICAgIG90aGVyTWV0YSA9IGtlZXBEaXJ0eTtcXG4gICAga2VlcERpcnR5ID0gZmFsc2U7XFxuICB9XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIklOSVRJQUxJWkVcXFwiXSwgbWV0YTogX2V4dGVuZHMoeyBmb3JtOiBmb3JtLCBrZWVwRGlydHk6IGtlZXBEaXJ0eSB9LCBvdGhlck1ldGEpLCBwYXlsb2FkOiB2YWx1ZXMgfTtcXG59O1xcblxcbnZhciByZWdpc3RlckZpZWxkID0gZnVuY3Rpb24gcmVnaXN0ZXJGaWVsZChmb3JtLCBuYW1lLCB0eXBlKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlJFR0lTVEVSX0ZJRUxEXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IG5hbWU6IG5hbWUsIHR5cGU6IHR5cGUgfSB9O1xcbn07XFxuXFxudmFyIHJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoZm9ybSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJSRVNFVFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSB9O1xcbn07XFxuXFxudmFyIHN0YXJ0QXN5bmNWYWxpZGF0aW9uID0gZnVuY3Rpb24gc3RhcnRBc3luY1ZhbGlkYXRpb24oZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RBUlRfQVNZTkNfVkFMSURBVElPTlxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgc3RhcnRTdWJtaXQgPSBmdW5jdGlvbiBzdGFydFN1Ym1pdChmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX1NVQk1JVFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSB9O1xcbn07XFxuXFxudmFyIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBmdW5jdGlvbiBzdG9wQXN5bmNWYWxpZGF0aW9uKGZvcm0sIGVycm9ycykge1xcbiAgdmFyIGFjdGlvbiA9IHtcXG4gICAgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVE9QX0FTWU5DX1ZBTElEQVRJT05cXFwiXSxcXG4gICAgbWV0YTogeyBmb3JtOiBmb3JtIH0sXFxuICAgIHBheWxvYWQ6IGVycm9yc1xcbiAgfTtcXG4gIGlmIChlcnJvcnMgJiYgT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgYWN0aW9uLmVycm9yID0gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgc3RvcFN1Ym1pdCA9IGZ1bmN0aW9uIHN0b3BTdWJtaXQoZm9ybSwgZXJyb3JzKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfU1VCTUlUXFxcIl0sXFxuICAgIG1ldGE6IHsgZm9ybTogZm9ybSB9LFxcbiAgICBwYXlsb2FkOiBlcnJvcnNcXG4gIH07XFxuICBpZiAoZXJyb3JzICYmIE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoKSB7XFxuICAgIGFjdGlvbi5lcnJvciA9IHRydWU7XFxuICB9XFxuICByZXR1cm4gYWN0aW9uO1xcbn07XFxuXFxudmFyIHN1Ym1pdCA9IGZ1bmN0aW9uIHN1Ym1pdChmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNVQk1JVFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSB9O1xcbn07XFxuXFxudmFyIHNldFN1Ym1pdEZhaWxlZCA9IGZ1bmN0aW9uIHNldFN1Ym1pdEZhaWxlZChmb3JtKSB7XFxuICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZpZWxkcyA9IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcXG4gICAgZmllbGRzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xcbiAgfVxcblxcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTRVRfU1VCTUlUX0ZBSUxFRFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkczogZmllbGRzIH0sIGVycm9yOiB0cnVlIH07XFxufTtcXG5cXG52YXIgc2V0U3VibWl0U3VjY2VlZGVkID0gZnVuY3Rpb24gc2V0U3VibWl0U3VjY2VlZGVkKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjMgPiAxID8gX2xlbjMgLSAxIDogMCksIF9rZXkzID0gMTsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xcbiAgICBmaWVsZHNbX2tleTMgLSAxXSA9IGFyZ3VtZW50c1tfa2V5M107XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNFVF9TVUJNSVRfU1VDQ0VFREVEXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSwgZXJyb3I6IGZhbHNlIH07XFxufTtcXG5cXG52YXIgdG91Y2ggPSBmdW5jdGlvbiB0b3VjaChmb3JtKSB7XFxuICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGZpZWxkcyA9IEFycmF5KF9sZW40ID4gMSA/IF9sZW40IC0gMSA6IDApLCBfa2V5NCA9IDE7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcXG4gICAgZmllbGRzW19rZXk0IC0gMV0gPSBhcmd1bWVudHNbX2tleTRdO1xcbiAgfVxcblxcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJUT1VDSFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkczogZmllbGRzIH0gfTtcXG59O1xcblxcbnZhciB1bnJlZ2lzdGVyRmllbGQgPSBmdW5jdGlvbiB1bnJlZ2lzdGVyRmllbGQoZm9ybSwgbmFtZSkge1xcbiAgdmFyIGRlc3Ryb3lPblVubW91bnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVOUkVHSVNURVJfRklFTERcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0sIHBheWxvYWQ6IHsgbmFtZTogbmFtZSwgZGVzdHJveU9uVW5tb3VudDogZGVzdHJveU9uVW5tb3VudCB9IH07XFxufTtcXG5cXG52YXIgdW50b3VjaCA9IGZ1bmN0aW9uIHVudG91Y2goZm9ybSkge1xcbiAgZm9yICh2YXIgX2xlbjUgPSBhcmd1bWVudHMubGVuZ3RoLCBmaWVsZHMgPSBBcnJheShfbGVuNSA+IDEgPyBfbGVuNSAtIDEgOiAwKSwgX2tleTUgPSAxOyBfa2V5NSA8IF9sZW41OyBfa2V5NSsrKSB7XFxuICAgIGZpZWxkc1tfa2V5NSAtIDFdID0gYXJndW1lbnRzW19rZXk1XTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVU5UT1VDSFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkczogZmllbGRzIH0gfTtcXG59O1xcblxcbnZhciB1cGRhdGVTeW5jRXJyb3JzID0gZnVuY3Rpb24gdXBkYXRlU3luY0Vycm9ycyhmb3JtKSB7XFxuICB2YXIgc3luY0Vycm9ycyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XFxuICB2YXIgZXJyb3IgPSBhcmd1bWVudHNbMl07XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX0VSUk9SU1xcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSwgcGF5bG9hZDogeyBzeW5jRXJyb3JzOiBzeW5jRXJyb3JzLCBlcnJvcjogZXJyb3IgfSB9O1xcbn07XFxuXFxudmFyIHVwZGF0ZVN5bmNXYXJuaW5ncyA9IGZ1bmN0aW9uIHVwZGF0ZVN5bmNXYXJuaW5ncyhmb3JtKSB7XFxuICB2YXIgc3luY1dhcm5pbmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcXG4gIHZhciB3YXJuaW5nID0gYXJndW1lbnRzWzJdO1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVUERBVEVfU1lOQ19XQVJOSU5HU1xcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSwgcGF5bG9hZDogeyBzeW5jV2FybmluZ3M6IHN5bmNXYXJuaW5ncywgd2FybmluZzogd2FybmluZyB9IH07XFxufTtcXG5cXG4vKioqLyB9KSxcXG4vKiA3OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9lczZfZXJyb3JfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE0KTtcXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcbnZhciBTdWJtaXNzaW9uRXJyb3IgPSBmdW5jdGlvbiAoX0V4dGVuZGFibGVFcnJvcikge1xcbiAgX2luaGVyaXRzKFN1Ym1pc3Npb25FcnJvciwgX0V4dGVuZGFibGVFcnJvcik7XFxuXFxuICBmdW5jdGlvbiBTdWJtaXNzaW9uRXJyb3IoZXJyb3JzKSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdWJtaXNzaW9uRXJyb3IpO1xcblxcbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoU3VibWlzc2lvbkVycm9yLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoU3VibWlzc2lvbkVycm9yKSkuY2FsbCh0aGlzLCAnU3VibWl0IFZhbGlkYXRpb24gRmFpbGVkJykpO1xcblxcbiAgICBfdGhpcy5lcnJvcnMgPSBlcnJvcnM7XFxuICAgIHJldHVybiBfdGhpcztcXG4gIH1cXG5cXG4gIHJldHVybiBTdWJtaXNzaW9uRXJyb3I7XFxufShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZXM2X2Vycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChTdWJtaXNzaW9uRXJyb3IpO1xcblxcbi8qKiovIH0pLFxcbi8qIDgwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0V2ZW50X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgxKTtcXG5cXG5cXG52YXIgc2lsZW5jZUV2ZW50ID0gZnVuY3Rpb24gc2lsZW5jZUV2ZW50KGV2ZW50KSB7XFxuICB2YXIgaXMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0V2ZW50X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCk7XFxuICBpZiAoaXMpIHtcXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gIH1cXG4gIHJldHVybiBpcztcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNpbGVuY2VFdmVudCk7XFxuXFxuLyoqKi8gfSksXFxuLyogODEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBpc0V2ZW50ID0gZnVuY3Rpb24gaXNFdmVudChjYW5kaWRhdGUpIHtcXG4gIHJldHVybiAhIShjYW5kaWRhdGUgJiYgY2FuZGlkYXRlLnN0b3BQcm9wYWdhdGlvbiAmJiBjYW5kaWRhdGUucHJldmVudERlZmF1bHQpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNFdmVudCk7XFxuXFxuLyoqKi8gfSksXFxuLyogODIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQxKTtcXG5cXG5cXG4vKipcXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzRXF1YWxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXFxuICogaXMgaW52b2tlZCB0byBjb21wYXJlIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsIGNvbXBhcmlzb25zXFxuICogYXJlIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aCB1cCB0b1xcbiAqIHNpeCBhcmd1bWVudHM6IChvYmpWYWx1ZSwgb3RoVmFsdWUgWywgaW5kZXh8a2V5LCBvYmplY3QsIG90aGVyLCBzdGFja10pLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogZnVuY3Rpb24gaXNHcmVldGluZyh2YWx1ZSkge1xcbiAqICAgcmV0dXJuIC9eaCg/Oml8ZWxsbykkLy50ZXN0KHZhbHVlKTtcXG4gKiB9XFxuICpcXG4gKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSkge1xcbiAqICAgaWYgKGlzR3JlZXRpbmcob2JqVmFsdWUpICYmIGlzR3JlZXRpbmcob3RoVmFsdWUpKSB7XFxuICogICAgIHJldHVybiB0cnVlO1xcbiAqICAgfVxcbiAqIH1cXG4gKlxcbiAqIHZhciBhcnJheSA9IFsnaGVsbG8nLCAnZ29vZGJ5ZSddO1xcbiAqIHZhciBvdGhlciA9IFsnaGknLCAnZ29vZGJ5ZSddO1xcbiAqXFxuICogXy5pc0VxdWFsV2l0aChhcnJheSwgb3RoZXIsIGN1c3RvbWl6ZXIpO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBpc0VxdWFsV2l0aCh2YWx1ZSwgb3RoZXIsIGN1c3RvbWl6ZXIpIHtcXG4gIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcXG4gIHZhciByZXN1bHQgPSBjdXN0b21pemVyID8gY3VzdG9taXplcih2YWx1ZSwgb3RoZXIpIDogdW5kZWZpbmVkO1xcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBvdGhlciwgdW5kZWZpbmVkLCBjdXN0b21pemVyKSA6ICEhcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0VxdWFsV2l0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogODMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcbnZhciBwcm9jZXNzUHJvcHMgPSBmdW5jdGlvbiBwcm9jZXNzUHJvcHModHlwZSwgcHJvcHMsIF92YWx1ZSkge1xcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XFxuXFxuICBpZiAodHlwZSA9PT0gJ2NoZWNrYm94Jykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgY2hlY2tlZDogISF2YWx1ZVxcbiAgICB9KTtcXG4gIH1cXG4gIGlmICh0eXBlID09PSAncmFkaW8nKSB7XFxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcXG4gICAgICBjaGVja2VkOiB2YWx1ZSA9PT0gX3ZhbHVlLFxcbiAgICAgIHZhbHVlOiBfdmFsdWVcXG4gICAgfSk7XFxuICB9XFxuICBpZiAodHlwZSA9PT0gJ3NlbGVjdC1tdWx0aXBsZScpIHtcXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBwcm9wcywge1xcbiAgICAgIHZhbHVlOiB2YWx1ZSB8fCBbXVxcbiAgICB9KTtcXG4gIH1cXG4gIGlmICh0eXBlID09PSAnZmlsZScpIHtcXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBwcm9wcywge1xcbiAgICAgIHZhbHVlOiB2YWx1ZSB8fCB1bmRlZmluZWRcXG4gICAgfSk7XFxuICB9XFxuICByZXR1cm4gcHJvcHM7XFxufTtcXG5cXG52YXIgY3JlYXRlRmllbGRQcm9wcyA9IGZ1bmN0aW9uIGNyZWF0ZUZpZWxkUHJvcHMoX3JlZjIsIG5hbWUsIF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYyLmdldEluLFxcbiAgICAgIHRvSlMgPSBfcmVmMi50b0pTO1xcblxcbiAgdmFyIGFzeW5jRXJyb3IgPSBfcmVmLmFzeW5jRXJyb3IsXFxuICAgICAgYXN5bmNWYWxpZGF0aW5nID0gX3JlZi5hc3luY1ZhbGlkYXRpbmcsXFxuICAgICAgb25CbHVyID0gX3JlZi5vbkJsdXIsXFxuICAgICAgb25DaGFuZ2UgPSBfcmVmLm9uQ2hhbmdlLFxcbiAgICAgIG9uRHJvcCA9IF9yZWYub25Ecm9wLFxcbiAgICAgIG9uRHJhZ1N0YXJ0ID0gX3JlZi5vbkRyYWdTdGFydCxcXG4gICAgICBkaXJ0eSA9IF9yZWYuZGlydHksXFxuICAgICAgZGlzcGF0Y2ggPSBfcmVmLmRpc3BhdGNoLFxcbiAgICAgIG9uRm9jdXMgPSBfcmVmLm9uRm9jdXMsXFxuICAgICAgZm9ybSA9IF9yZWYuZm9ybSxcXG4gICAgICBmb3JtYXQgPSBfcmVmLmZvcm1hdCxcXG4gICAgICBwYXJzZSA9IF9yZWYucGFyc2UsXFxuICAgICAgcHJpc3RpbmUgPSBfcmVmLnByaXN0aW5lLFxcbiAgICAgIHByb3BzID0gX3JlZi5wcm9wcyxcXG4gICAgICBzdGF0ZSA9IF9yZWYuc3RhdGUsXFxuICAgICAgc3VibWl0RXJyb3IgPSBfcmVmLnN1Ym1pdEVycm9yLFxcbiAgICAgIHN1Ym1pdEZhaWxlZCA9IF9yZWYuc3VibWl0RmFpbGVkLFxcbiAgICAgIHN1Ym1pdHRpbmcgPSBfcmVmLnN1Ym1pdHRpbmcsXFxuICAgICAgc3luY0Vycm9yID0gX3JlZi5zeW5jRXJyb3IsXFxuICAgICAgc3luY1dhcm5pbmcgPSBfcmVmLnN5bmNXYXJuaW5nLFxcbiAgICAgIHZhbGlkYXRlID0gX3JlZi52YWxpZGF0ZSxcXG4gICAgICB2YWx1ZSA9IF9yZWYudmFsdWUsXFxuICAgICAgX3ZhbHVlID0gX3JlZi5fdmFsdWUsXFxuICAgICAgd2FybiA9IF9yZWYud2FybixcXG4gICAgICBjdXN0b20gPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWydhc3luY0Vycm9yJywgJ2FzeW5jVmFsaWRhdGluZycsICdvbkJsdXInLCAnb25DaGFuZ2UnLCAnb25Ecm9wJywgJ29uRHJhZ1N0YXJ0JywgJ2RpcnR5JywgJ2Rpc3BhdGNoJywgJ29uRm9jdXMnLCAnZm9ybScsICdmb3JtYXQnLCAncGFyc2UnLCAncHJpc3RpbmUnLCAncHJvcHMnLCAnc3RhdGUnLCAnc3VibWl0RXJyb3InLCAnc3VibWl0RmFpbGVkJywgJ3N1Ym1pdHRpbmcnLCAnc3luY0Vycm9yJywgJ3N5bmNXYXJuaW5nJywgJ3ZhbGlkYXRlJywgJ3ZhbHVlJywgJ192YWx1ZScsICd3YXJuJ10pO1xcblxcbiAgdmFyIGVycm9yID0gc3luY0Vycm9yIHx8IGFzeW5jRXJyb3IgfHwgc3VibWl0RXJyb3I7XFxuICB2YXIgd2FybmluZyA9IHN5bmNXYXJuaW5nO1xcblxcbiAgdmFyIGZvcm1hdEZpZWxkVmFsdWUgPSBmdW5jdGlvbiBmb3JtYXRGaWVsZFZhbHVlKHZhbHVlLCBmb3JtYXQpIHtcXG4gICAgaWYgKGZvcm1hdCA9PT0gbnVsbCkge1xcbiAgICAgIHJldHVybiB2YWx1ZTtcXG4gICAgfVxcbiAgICB2YXIgZGVmYXVsdEZvcm1hdHRlZFZhbHVlID0gdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWU7XFxuICAgIHJldHVybiBmb3JtYXQgPyBmb3JtYXQodmFsdWUsIG5hbWUpIDogZGVmYXVsdEZvcm1hdHRlZFZhbHVlO1xcbiAgfTtcXG5cXG4gIHZhciBmb3JtYXR0ZWRGaWVsZFZhbHVlID0gZm9ybWF0RmllbGRWYWx1ZSh2YWx1ZSwgZm9ybWF0KTtcXG5cXG4gIHJldHVybiB7XFxuICAgIGlucHV0OiBwcm9jZXNzUHJvcHMoY3VzdG9tLnR5cGUsIHtcXG4gICAgICBuYW1lOiBuYW1lLFxcbiAgICAgIG9uQmx1cjogb25CbHVyLFxcbiAgICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcXG4gICAgICBvbkRyYWdTdGFydDogb25EcmFnU3RhcnQsXFxuICAgICAgb25Ecm9wOiBvbkRyb3AsXFxuICAgICAgb25Gb2N1czogb25Gb2N1cyxcXG4gICAgICB2YWx1ZTogZm9ybWF0dGVkRmllbGRWYWx1ZVxcbiAgICB9LCBfdmFsdWUpLFxcbiAgICBtZXRhOiBfZXh0ZW5kcyh7fSwgdG9KUyhzdGF0ZSksIHtcXG4gICAgICBhY3RpdmU6ICEhKHN0YXRlICYmIGdldEluKHN0YXRlLCAnYWN0aXZlJykpLFxcbiAgICAgIGFzeW5jVmFsaWRhdGluZzogYXN5bmNWYWxpZGF0aW5nLFxcbiAgICAgIGF1dG9maWxsZWQ6ICEhKHN0YXRlICYmIGdldEluKHN0YXRlLCAnYXV0b2ZpbGxlZCcpKSxcXG4gICAgICBkaXJ0eTogZGlydHksXFxuICAgICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxcbiAgICAgIGVycm9yOiBlcnJvcixcXG4gICAgICBmb3JtOiBmb3JtLFxcbiAgICAgIHdhcm5pbmc6IHdhcm5pbmcsXFxuICAgICAgaW52YWxpZDogISFlcnJvcixcXG4gICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgc3VibWl0dGluZzogISFzdWJtaXR0aW5nLFxcbiAgICAgIHN1Ym1pdEZhaWxlZDogISFzdWJtaXRGYWlsZWQsXFxuICAgICAgdG91Y2hlZDogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICd0b3VjaGVkJykpLFxcbiAgICAgIHZhbGlkOiAhZXJyb3IsXFxuICAgICAgdmlzaXRlZDogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICd2aXNpdGVkJykpXFxuICAgIH0pLFxcbiAgICBjdXN0b206IF9leHRlbmRzKHt9LCBjdXN0b20sIHByb3BzKVxcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUZpZWxkUHJvcHMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDg0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRWYWx1ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzUmVhY3ROYXRpdmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMwKTtcXG5cXG5cXG5cXG52YXIgb25DaGFuZ2VWYWx1ZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlVmFsdWUoZXZlbnQsIF9yZWYpIHtcXG4gIHZhciBuYW1lID0gX3JlZi5uYW1lLFxcbiAgICAgIHBhcnNlID0gX3JlZi5wYXJzZSxcXG4gICAgICBub3JtYWxpemUgPSBfcmVmLm5vcm1hbGl6ZTtcXG5cXG4gIC8vIHJlYWQgdmFsdWUgZnJvbSBpbnB1dFxcbiAgdmFyIHZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0VmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzUmVhY3ROYXRpdmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbiAgLy8gcGFyc2UgdmFsdWUgaWYgd2UgaGF2ZSBhIHBhcnNlclxcbiAgaWYgKHBhcnNlKSB7XFxuICAgIHZhbHVlID0gcGFyc2UodmFsdWUsIG5hbWUpO1xcbiAgfVxcblxcbiAgLy8gbm9ybWFsaXplIHZhbHVlXFxuICBpZiAobm9ybWFsaXplKSB7XFxuICAgIHZhbHVlID0gbm9ybWFsaXplKG5hbWUsIHZhbHVlKTtcXG4gIH1cXG5cXG4gIHJldHVybiB2YWx1ZTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG9uQ2hhbmdlVmFsdWUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDg1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSXNQcmlzdGluZSA9IGZ1bmN0aW9uIGNyZWF0ZUlzUHJpc3RpbmUoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGVtcHR5ID0gX3JlZi5lbXB0eSxcXG4gICAgICBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgdmFyIGluaXRpYWwgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLmluaXRpYWwnKSB8fCBlbXB0eTtcXG4gICAgICB2YXIgdmFsdWVzID0gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy52YWx1ZXMnKSB8fCBpbml0aWFsO1xcbiAgICAgIHJldHVybiBkZWVwRXF1YWwoaW5pdGlhbCwgdmFsdWVzKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVJc1ByaXN0aW5lKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiAgSW4gdGhlXFxuLy8gYnJvd3NlciB0aGlzIGlzIGEgbGl0dGxlIGNvbXBsaWNhdGVkIGR1ZSB0byB1bmtub3duIHF1YWxpdHkgb2YgTWF0aC5yYW5kb20oKVxcbi8vIGFuZCBpbmNvbnNpc3RlbnQgc3VwcG9ydCBmb3IgdGhlIGBjcnlwdG9gIEFQSS4gIFdlIGRvIHRoZSBiZXN0IHdlIGNhbiB2aWFcXG4vLyBmZWF0dXJlLWRldGVjdGlvblxcblxcbi8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcXFwidGhpc1xcXCIgaXMgYSBDcnlwdG8gaW1wbGVtZW50YXRpb24uXFxudmFyIGdldFJhbmRvbVZhbHVlcyA9ICh0eXBlb2YoY3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSkgfHxcXG4gICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZihtc0NyeXB0bykgIT0gJ3VuZGVmaW5lZCcgJiYgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQobXNDcnlwdG8pKTtcXG5pZiAoZ2V0UmFuZG9tVmFsdWVzKSB7XFxuICAvLyBXSEFUV0cgY3J5cHRvIFJORyAtIGh0dHA6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9DcnlwdG9cXG4gIHZhciBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB3aGF0d2dSTkcoKSB7XFxuICAgIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XFxuICAgIHJldHVybiBybmRzODtcXG4gIH07XFxufSBlbHNlIHtcXG4gIC8vIE1hdGgucmFuZG9tKCktYmFzZWQgKFJORylcXG4gIC8vXFxuICAvLyBJZiBhbGwgZWxzZSBmYWlscywgdXNlIE1hdGgucmFuZG9tKCkuICBJdCdzIGZhc3QsIGJ1dCBpcyBvZiB1bnNwZWNpZmllZFxcbiAgLy8gcXVhbGl0eS5cXG4gIHZhciBybmRzID0gbmV3IEFycmF5KDE2KTtcXG5cXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWF0aFJORygpIHtcXG4gICAgZm9yICh2YXIgaSA9IDAsIHI7IGkgPCAxNjsgaSsrKSB7XFxuICAgICAgaWYgKChpICYgMHgwMykgPT09IDApIHIgPSBNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwMDA7XFxuICAgICAgcm5kc1tpXSA9IHIgPj4+ICgoaSAmIDB4MDMpIDw8IDMpICYgMHhmZjtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gcm5kcztcXG4gIH07XFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDg3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbi8qKlxcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxcbiAqL1xcbnZhciBieXRlVG9IZXggPSBbXTtcXG5mb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgKytpKSB7XFxuICBieXRlVG9IZXhbaV0gPSAoaSArIDB4MTAwKS50b1N0cmluZygxNikuc3Vic3RyKDEpO1xcbn1cXG5cXG5mdW5jdGlvbiBieXRlc1RvVXVpZChidWYsIG9mZnNldCkge1xcbiAgdmFyIGkgPSBvZmZzZXQgfHwgMDtcXG4gIHZhciBidGggPSBieXRlVG9IZXg7XFxuICByZXR1cm4gYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArICctJyArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gKyAnLScgK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArICctJyArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXTtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBieXRlc1RvVXVpZDtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciBjbGFzc05hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XFxudmFyIEhlbHAgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xcbiAgICBfX2V4dGVuZHMoSGVscCwgX3N1cGVyKTtcXG4gICAgZnVuY3Rpb24gSGVscCgpIHtcXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xcbiAgICAgICAgX3RoaXMuX2hlbHBQb3B1cCA9IEhUTUxTcGFuRWxlbWVudCA9IG51bGw7XFxuICAgICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG4gICAgSGVscC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcXG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwic3BhblxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmYXMgZmEtZncgZmEtcXVlc3Rpb24tY2lyY2xlIGRlZmF1bHQtY29sb3InLCB0aGlzLnByb3BzLmNvbnRhaW5lckNsYXNzKSwgXFxcImRhdGEtY29udGVudFxcXCI6IHRoaXMucHJvcHMudGV4dCwgcmVmOiBmdW5jdGlvbiAoZG9tKSB7IHJldHVybiBfdGhpcy5faGVscFBvcHVwID0gZG9tOyB9LCBzdHlsZTogdGhpcy5wcm9wcy5zdHlsZSB9KSk7XFxuICAgIH07XFxuICAgIEhlbHAucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgJCh0aGlzLl9oZWxwUG9wdXApLnBvcG92ZXIoe1xcbiAgICAgICAgICAgIGNvbnRhaW5lcjogJ2JvZHknLFxcbiAgICAgICAgICAgIHRyaWdnZXI6ICdob3ZlcicsXFxuICAgICAgICAgICAgaHRtbDogdHJ1ZVxcbiAgICAgICAgfSk7XFxuICAgIH07XFxuICAgIEhlbHAucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgJCh0aGlzLl9oZWxwUG9wdXApLnBvcG92ZXIoJ2Rlc3Ryb3knKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIEhlbHA7XFxufShSZWFjdC5Db21wb25lbnQpKTtcXG5leHBvcnRzLmRlZmF1bHQgPSBIZWxwO1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDg5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbnZhciBjaGFyZW5jID0ge1xcbiAgLy8gVVRGLTggZW5jb2RpbmdcXG4gIHV0Zjg6IHtcXG4gICAgLy8gQ29udmVydCBhIHN0cmluZyB0byBhIGJ5dGUgYXJyYXlcXG4gICAgc3RyaW5nVG9CeXRlczogZnVuY3Rpb24oc3RyKSB7XFxuICAgICAgcmV0dXJuIGNoYXJlbmMuYmluLnN0cmluZ1RvQnl0ZXModW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikpKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBzdHJpbmdcXG4gICAgYnl0ZXNUb1N0cmluZzogZnVuY3Rpb24oYnl0ZXMpIHtcXG4gICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShjaGFyZW5jLmJpbi5ieXRlc1RvU3RyaW5nKGJ5dGVzKSkpO1xcbiAgICB9XFxuICB9LFxcblxcbiAgLy8gQmluYXJ5IGVuY29kaW5nXFxuICBiaW46IHtcXG4gICAgLy8gQ29udmVydCBhIHN0cmluZyB0byBhIGJ5dGUgYXJyYXlcXG4gICAgc3RyaW5nVG9CeXRlczogZnVuY3Rpb24oc3RyKSB7XFxuICAgICAgZm9yICh2YXIgYnl0ZXMgPSBbXSwgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspXFxuICAgICAgICBieXRlcy5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRik7XFxuICAgICAgcmV0dXJuIGJ5dGVzO1xcbiAgICB9LFxcblxcbiAgICAvLyBDb252ZXJ0IGEgYnl0ZSBhcnJheSB0byBhIHN0cmluZ1xcbiAgICBieXRlc1RvU3RyaW5nOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIHN0ciA9IFtdLCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKVxcbiAgICAgICAgc3RyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSkpO1xcbiAgICAgIHJldHVybiBzdHIuam9pbignJyk7XFxuICAgIH1cXG4gIH1cXG59O1xcblxcbm1vZHVsZS5leHBvcnRzID0gY2hhcmVuYztcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuXFxudmFyIF9fZXh0ZW5kcyA9IHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMgfHwgZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBkLl9fcHJvdG9fXyA9IGI7XFxuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XFxuICAgICAgICBmdW5jdGlvbiBfXygpIHtcXG4gICAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcXG4gICAgfTtcXG59KCk7XFxudmFyIF9fYXNzaWduID0gdGhpcyAmJiB0aGlzLl9fYXNzaWduIHx8IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHQpIHtcXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XFxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcXG4gICAgfVxcbiAgICByZXR1cm4gdDtcXG59O1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgcmVkdXhfZm9ybV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7XFxudmFyIHBsYXRmb3JtNiA9IF9fd2VicGFja19yZXF1aXJlX18oMjU0KTtcXG52YXIgd2ViU3RvcmFnZSA9IHBsYXRmb3JtNi53ZWJTdG9yYWdlO1xcbnZhciBmb3JtcyA9IHBsYXRmb3JtNi5mb3JtcztcXG52YXIgdGV4dF9pbnB1dF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTUpO1xcbnZhciBzZWxlY3RfaW5wdXRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjU5KTtcXG52YXIgdG9nZ2xlX3BhbmVsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2MCk7XFxudmFyIGhlbHBlcnNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYzKTtcXG52YXIgVXRpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3Mik7XFxudmFyIHdvcmRpbmdzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3Myk7XFxudmFyIFdPUkRJTkdTID0gaGVscGVyc18xLmdldFdvcmRpbmdzKHdvcmRpbmdzXzEuZGVmYXVsdCwgd2ViU3RvcmFnZS5sb2NhbGUpO1xcbnZhciBDdXN0b21Gb3JtID0gZnVuY3Rpb24gKF9zdXBlcikge1xcbiAgICBfX2V4dGVuZHMoQ3VzdG9tRm9ybSwgX3N1cGVyKTtcXG4gICAgZnVuY3Rpb24gQ3VzdG9tRm9ybShwcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5yZW5kZXJSRlFEZXRhaWxzID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgIHZhciByZnEgPSBfdGhpcy5wcm9wcy5kYXRhLnJmcTtcXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJ0aWxlIGNvbC14cy0xMiBib3R0b20tbWFyZ2luLWxnXFxcIiB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0YWJsZVxcXCIsIHsgc3R5bGU6IHsgd2lkdGg6ICcxMDAlJywgbWluSGVpZ2h0OiA0MCB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoZWFkXFxcIiwgbnVsbCwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidHJcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0aFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby1sYWJlbFxcXCIgfSwgV09SRElOR1MuaWQpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0aFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby1sYWJlbFxcXCIgfSwgV09SRElOR1MuaXNzdWVfZGF0ZSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pc3N1ZV90aW1lKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tbGFiZWxcXFwiIH0sIFdPUkRJTkdTLm5vdGUpKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRib2R5XFxcIiwgbnVsbCwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidHJcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0ZFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby12YWx1ZVxcXCIsIHN0eWxlOiB7IHZlcnRpY2FsQWxpZ246ICdib3R0b20nIH0gfSwgcmZxLmlkKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGRcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tdmFsdWVcXFwiLCBzdHlsZTogeyB2ZXJ0aWNhbEFsaWduOiAnYm90dG9tJyB9IH0sIHJmcS5pc3N1ZURhdGUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0ZFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby12YWx1ZVxcXCIsIHN0eWxlOiB7IHZlcnRpY2FsQWxpZ246ICdib3R0b20nIH0gfSwgcmZxLmlzc3VlVGltZSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEubm90ZSkpKSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnJlbmRlckl0ZW1zID0gZnVuY3Rpb24gKF9hKSB7XFxuICAgICAgICAgICAgdmFyIGZpZWxkcyA9IF9hLmZpZWxkcztcXG4gICAgICAgICAgICB2YXIgdG90YWwgPSBVdGlscy5kaXNwbGF5VG90YWxBbW91bnQoZmllbGRzLmdldEFsbCgpKTtcXG4gICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IHRvdGFsOiB0b3RhbCB9KTtcXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgbnVsbCwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJib3R0b20tbWFyZ2luXFxcIiwgc3R5bGU6IHsgdGV4dEFsaWduOiAncmlnaHQnIH0gfSwgV09SRElOR1MudG90YWxfYW1vdW50LCBcXFwiOiBcXFwiLCB0b3RhbCksIF90aGlzLnJlbmRlckl0ZW0oeyBmaWVsZHM6IGZpZWxkcyB9KSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMucmVuZGVySXRlbSA9IGZ1bmN0aW9uIChfYSkge1xcbiAgICAgICAgICAgIHZhciBmaWVsZHMgPSBfYS5maWVsZHM7XFxuICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIG51bGwsIGZpZWxkcy5tYXAoZnVuY3Rpb24gKG1lbWJlciwgaW5kZXgsIGZpZWxkcykge1xcbiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IF90aGlzLnByb3BzLmRhdGEubGluZXNbaW5kZXhdO1xcbiAgICAgICAgICAgICAgICB2YXIgZmllbGQgPSBmaWVsZHMuZ2V0KGluZGV4KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsga2V5OiBpbmRleCwgY2xhc3NOYW1lOiBcXFwiYm90dG9tLW1hcmdpblxcXCIsIHN0eWxlOiB7IHBhZGRpbmc6IDE1LCBib3JkZXJDb2xvcjogXFxcIiNlZWVcXFwiLCBib3JkZXJXaWR0aDogMSwgYm9yZGVyU3R5bGU6IFxcXCJzb2xpZFxcXCIgfSB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvdyBib3R0b20tbWFyZ2luXFxcIiB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImNvbC14cy02XFxcIiB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJiXFxcIiwgbnVsbCwgV09SRElOR1MubGluZSwgXFxcIiAjXFxcIiwgbGluZS5pZCkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImNvbC14cy02XFxcIiB9LCBXT1JESU5HUy5hbW91bnQsIFxcXCI6IFxcXCIsIFV0aWxzLmRpc3BsYXlJdGVtQW1vdW50KGZpZWxkKSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvdyB0ZXh0LW1lZGl1bSBib3R0b20tbWFyZ2luXFxcIiB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImNvbC14cy02XFxcIiB9LCBXT1JESU5HUy5kZXNjcmlwdGlvbiwgXFxcIjogXFxcIiwgbGluZS5ub3RlKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJjb2wteHMtNlxcXCIgfSwgV09SRElOR1MucXVhbnRpdHksIFxcXCI6IFxcXCIsIGxpbmUucXVhbnRpdHkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJyb3dcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoc2VsZWN0X2lucHV0XzEuZGVmYXVsdCwgeyBuYW1lOiBtZW1iZXIgKyBcXFwiLml0ZW1cXFwiLCBsYWJlbDogV09SRElOR1Muc2VsZWN0X2l0ZW0sIGNvbnRhaW5lckNsYXNzOiBcXFwiY29sLXhzLTEyXFxcIiwgb3B0aW9uczogVXRpbHMuZm9ybWF0SXRlbXNPcHRpb25zKGxpbmUuaXRlbXMpIH0pKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJyb3dcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQodGV4dF9pbnB1dF8xLmRlZmF1bHQsIHsgbmFtZTogbWVtYmVyICsgXFxcIi5kaXNjb3VudFxcXCIsIGxhYmVsOiBXT1JESU5HUy5kaXNjb3VudCwgY29udGFpbmVyQ2xhc3M6IFxcXCJjb2wteHMtMTJcXFwiLCB0eXBlOiBcXFwibnVtYmVyXFxcIiB9KSkpO1xcbiAgICAgICAgICAgIH0pKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5zdWJtaXRGb3JtID0gZnVuY3Rpb24gKHZhbHVlcykge1xcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IF9fYXNzaWduKHt9LCB2YWx1ZXMsIHsgdG90YWw6IF90aGlzLnN0YXRlLnRvdGFsIH0pO1xcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcXG4gICAgICAgICAgICBfdGhpcy5wcm9wcy5zdWJtaXRGb3JtKHtcXG4gICAgICAgICAgICAgICAgcmZxOiBKU09OLnN0cmluZ2lmeSh2YWx1ZXMucmZxKSxcXG4gICAgICAgICAgICAgICAgbGluZXM6IEpTT04uc3RyaW5naWZ5KHZhbHVlcy5saW5lcylcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5zdGF0ZSA9IHsgdG90YWw6ICcnIH07XFxuICAgICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG4gICAgQ3VzdG9tRm9ybS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHRvZ2dsZV9wYW5lbF8xLmRlZmF1bHQsIHsgcGFuZWxUaXRsZTogXFxcIlByb3ZpZGUgUXVvdGVcXFwiLCBoaWRlVGl0bGU6IGZhbHNlLCBkZWZhdWx0T3BlbmVkOiB0cnVlLCB0b2dnbGFibGU6IGZhbHNlLCBjYW5jZWxCdG46IHsgbGFiZWw6IFdPUkRJTkdTLmNhbmNlbCwgYWN0aW9uOiBwcm9wcy5jbG9zZUZvcm0gfSwgc3VibWl0QnRuOiB7IGxhYmVsOiBXT1JESU5HUy5zdWJtaXQsIGFjdGlvbjogcHJvcHMuaGFuZGxlU3VibWl0KHRoaXMuc3VibWl0Rm9ybSkgfSB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJoNFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidXBwZXIgYm90dG9tLW1hcmdpblxcXCIgfSwgV09SRElOR1MucmZxX2luZm8pLCB0aGlzLnJlbmRlclJGUURldGFpbHMoKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiaDRcXFwiLCB7IGNsYXNzTmFtZTogXFxcInVwcGVyIGJvdHRvbS1tYXJnaW5cXFwiIH0sIFdPUkRJTkdTLmxpc3RfaXRlbXMpLCBSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZEFycmF5LCB7IG5hbWU6IFxcXCJsaW5lc1xcXCIsIGNvbXBvbmVudDogdGhpcy5yZW5kZXJJdGVtcyB9KSk7XFxuICAgIH07XFxuICAgIHJldHVybiBDdXN0b21Gb3JtO1xcbn0oUmVhY3QuQ29tcG9uZW50KTtcXG5leHBvcnRzLmRlZmF1bHQgPSBmb3Jtcy5yZWR1eEZvcm0oeyBmb3JtOiAnY3VzdG9tX2Zvcm0nIH0pKEN1c3RvbUZvcm0pO1xcblxcbi8qKiovIH0pLFxcbi8qIDkxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yZWR1Y2VyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yZWR1eEZvcm1fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19GaWVsZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX0ZpZWxkc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX0ZpZWxkQXJyYXlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19mb3JtVmFsdWVTZWxlY3Rvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3ZhbHVlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX3NlbGVjdG9yc19nZXRGb3JtTmFtZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjM5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19zZWxlY3RvcnNfZ2V0Rm9ybVZhbHVlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX3NlbGVjdG9yc19nZXRGb3JtSW5pdGlhbFZhbHVlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNFcnJvcnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fc2VsZWN0b3JzX2dldEZvcm1Bc3luY0Vycm9yc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNXYXJuaW5nc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19zZWxlY3RvcnNfZ2V0Rm9ybVN1Ym1pdEVycm9yc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19zZWxlY3RvcnNfaXNEaXJ0eV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zZWxlY3RvcnNfaXNJbnZhbGlkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX3NlbGVjdG9yc19pc1ByaXN0aW5lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fc2VsZWN0b3JzX2lzVmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19zZWxlY3RvcnNfaXNTdWJtaXR0aW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX3NlbGVjdG9yc19oYXNTdWJtaXRTdWNjZWVkZWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fc2VsZWN0b3JzX2hhc1N1Ym1pdEZhaWxlZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19Gb3JtX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX0Zvcm1TZWN0aW9uX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1N1Ym1pc3Npb25FcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX3Byb3BUeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X19hY3Rpb25zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNl9fYWN0aW9uVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZUFsbCA9IGZ1bmN0aW9uIGNyZWF0ZUFsbChzdHJ1Y3R1cmUpIHtcXG4gIHJldHVybiBfZXh0ZW5kcyh7XFxuICAgIC8vIHNlcGFyYXRlIG91dCBmaWVsZCBhY3Rpb25zXFxuICAgIGFjdGlvblR5cGVzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X19hY3Rpb25UeXBlc19fXFxuICB9LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X19hY3Rpb25zX18sIHtcXG4gICAgRmllbGQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0ZpZWxkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGaWVsZHM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX0ZpZWxkc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgRmllbGRBcnJheTogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fRmllbGRBcnJheV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgRm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fRm9ybV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgRm9ybVNlY3Rpb246IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX0Zvcm1TZWN0aW9uX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICBmb3JtVmFsdWVTZWxlY3RvcjogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fZm9ybVZhbHVlU2VsZWN0b3JfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1OYW1lczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fc2VsZWN0b3JzX2dldEZvcm1OYW1lc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVZhbHVlczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fc2VsZWN0b3JzX2dldEZvcm1WYWx1ZXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1Jbml0aWFsVmFsdWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19zZWxlY3RvcnNfZ2V0Rm9ybUluaXRpYWxWYWx1ZXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1TeW5jRXJyb3JzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fc2VsZWN0b3JzX2dldEZvcm1TeW5jRXJyb3JzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBnZXRGb3JtQXN5bmNFcnJvcnM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19zZWxlY3RvcnNfZ2V0Rm9ybUFzeW5jRXJyb3JzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBnZXRGb3JtU3luY1dhcm5pbmdzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fc2VsZWN0b3JzX2dldEZvcm1TeW5jV2FybmluZ3NfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1TdWJtaXRFcnJvcnM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19zZWxlY3RvcnNfZ2V0Rm9ybVN1Ym1pdEVycm9yc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgaXNEaXJ0eTogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX3NlbGVjdG9yc19pc0RpcnR5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc0ludmFsaWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zZWxlY3RvcnNfaXNJbnZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc1ByaXN0aW5lOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fc2VsZWN0b3JzX2lzUHJpc3RpbmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzVmFsaWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgaXNTdWJtaXR0aW5nOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fc2VsZWN0b3JzX2lzU3VibWl0dGluZ19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgaGFzU3VibWl0U3VjY2VlZGVkOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fc2VsZWN0b3JzX2hhc1N1Ym1pdFN1Y2NlZWRlZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgaGFzU3VibWl0RmFpbGVkOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fc2VsZWN0b3JzX2hhc1N1Ym1pdEZhaWxlZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgcHJvcFR5cGVzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI0X19wcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgIHJlZHV4Rm9ybTogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcmVkdXhGb3JtX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICByZWR1Y2VyOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yZWR1Y2VyX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBTdWJtaXNzaW9uRXJyb3I6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1N1Ym1pc3Npb25FcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgdmFsdWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X192YWx1ZXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSlcXG4gIH0pO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQWxsKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA5MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlbGV0ZUluV2l0aENsZWFuVXBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTMpO1xcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcbnZhciBjcmVhdGVSZWR1Y2VyID0gZnVuY3Rpb24gY3JlYXRlUmVkdWNlcihzdHJ1Y3R1cmUpIHtcXG4gIHZhciBfYmVoYXZpb3JzO1xcblxcbiAgdmFyIGRlZXBFcXVhbCA9IHN0cnVjdHVyZS5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBzdHJ1Y3R1cmUuZW1wdHksXFxuICAgICAgZ2V0SW4gPSBzdHJ1Y3R1cmUuZ2V0SW4sXFxuICAgICAgc2V0SW4gPSBzdHJ1Y3R1cmUuc2V0SW4sXFxuICAgICAgZGVsZXRlSW4gPSBzdHJ1Y3R1cmUuZGVsZXRlSW4sXFxuICAgICAgZnJvbUpTID0gc3RydWN0dXJlLmZyb21KUyxcXG4gICAgICBrZXlzID0gc3RydWN0dXJlLmtleXMsXFxuICAgICAgc2l6ZSA9IHN0cnVjdHVyZS5zaXplLFxcbiAgICAgIHNwbGljZSA9IHN0cnVjdHVyZS5zcGxpY2U7XFxuXFxuICB2YXIgZGVsZXRlSW5XaXRoQ2xlYW5VcCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlbGV0ZUluV2l0aENsZWFuVXBfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSk7XFxuICB2YXIgZG9TcGxpY2UgPSBmdW5jdGlvbiBkb1NwbGljZShzdGF0ZSwga2V5LCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUsIGZvcmNlKSB7XFxuICAgIHZhciBleGlzdGluZyA9IGdldEluKHN0YXRlLCBrZXkgKyAnLicgKyBmaWVsZCk7XFxuICAgIHJldHVybiBleGlzdGluZyB8fCBmb3JjZSA/IHNldEluKHN0YXRlLCBrZXkgKyAnLicgKyBmaWVsZCwgc3BsaWNlKGV4aXN0aW5nLCBpbmRleCwgcmVtb3ZlTnVtLCB2YWx1ZSkpIDogc3RhdGU7XFxuICB9O1xcbiAgdmFyIHJvb3RLZXlzID0gWyd2YWx1ZXMnLCAnZmllbGRzJywgJ3N1Ym1pdEVycm9ycycsICdhc3luY0Vycm9ycyddO1xcbiAgdmFyIGFycmF5U3BsaWNlID0gZnVuY3Rpb24gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB2YWx1ZSkge1xcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHZhciBub25WYWx1ZXNWYWx1ZSA9IHZhbHVlICE9IG51bGwgPyBlbXB0eSA6IHVuZGVmaW5lZDtcXG4gICAgcmVzdWx0ID0gZG9TcGxpY2UocmVzdWx0LCAndmFsdWVzJywgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlLCB0cnVlKTtcXG4gICAgcmVzdWx0ID0gZG9TcGxpY2UocmVzdWx0LCAnZmllbGRzJywgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIG5vblZhbHVlc1ZhbHVlKTtcXG4gICAgcmVzdWx0ID0gZG9TcGxpY2UocmVzdWx0LCAnc3luY0Vycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdzdWJtaXRFcnJvcnMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgdW5kZWZpbmVkKTtcXG4gICAgcmVzdWx0ID0gZG9TcGxpY2UocmVzdWx0LCAnYXN5bmNFcnJvcnMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgdW5kZWZpbmVkKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxuXFxuICB2YXIgYmVoYXZpb3JzID0gKF9iZWhhdmlvcnMgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfSU5TRVJUXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZikge1xcbiAgICB2YXIgX3JlZiRtZXRhID0gX3JlZi5tZXRhLFxcbiAgICAgICAgZmllbGQgPSBfcmVmJG1ldGEuZmllbGQsXFxuICAgICAgICBpbmRleCA9IF9yZWYkbWV0YS5pbmRleCxcXG4gICAgICAgIHBheWxvYWQgPSBfcmVmLnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCAwLCBwYXlsb2FkKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9NT1ZFXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIpIHtcXG4gICAgdmFyIF9yZWYyJG1ldGEgPSBfcmVmMi5tZXRhLFxcbiAgICAgICAgZmllbGQgPSBfcmVmMiRtZXRhLmZpZWxkLFxcbiAgICAgICAgZnJvbSA9IF9yZWYyJG1ldGEuZnJvbSxcXG4gICAgICAgIHRvID0gX3JlZjIkbWV0YS50bztcXG5cXG4gICAgdmFyIGFycmF5ID0gZ2V0SW4oc3RhdGUsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gc2l6ZShhcnJheSkgOiAwO1xcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIGlmIChsZW5ndGgpIHtcXG4gICAgICByb290S2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgICAgIHZhciBwYXRoID0ga2V5ICsgJy4nICsgZmllbGQ7XFxuICAgICAgICBpZiAoZ2V0SW4ocmVzdWx0LCBwYXRoKSkge1xcbiAgICAgICAgICB2YXIgdmFsdWUgPSBnZXRJbihyZXN1bHQsIHBhdGggKyAnWycgKyBmcm9tICsgJ10nKTtcXG4gICAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBwYXRoLCBzcGxpY2UoZ2V0SW4ocmVzdWx0LCBwYXRoKSwgZnJvbSwgMSkpOyAvLyByZW1vdmVcXG4gICAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBwYXRoLCBzcGxpY2UoZ2V0SW4ocmVzdWx0LCBwYXRoKSwgdG8sIDAsIHZhbHVlKSk7IC8vIGluc2VydFxcbiAgICAgICAgfVxcbiAgICAgIH0pO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUE9QXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjMpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjMubWV0YS5maWVsZDtcXG5cXG4gICAgdmFyIGFycmF5ID0gZ2V0SW4oc3RhdGUsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gc2l6ZShhcnJheSkgOiAwO1xcbiAgICByZXR1cm4gbGVuZ3RoID8gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCBsZW5ndGggLSAxLCAxKSA6IHN0YXRlO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1BVU0hcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmNCkge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmNC5tZXRhLmZpZWxkLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWY0LnBheWxvYWQ7XFxuXFxuICAgIHZhciBhcnJheSA9IGdldEluKHN0YXRlLCAndmFsdWVzLicgKyBmaWVsZCk7XFxuICAgIHZhciBsZW5ndGggPSBhcnJheSA/IHNpemUoYXJyYXkpIDogMDtcXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgbGVuZ3RoLCAwLCBwYXlsb2FkKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9SRU1PVkVcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmNSkge1xcbiAgICB2YXIgX3JlZjUkbWV0YSA9IF9yZWY1Lm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWY1JG1ldGEuZmllbGQsXFxuICAgICAgICBpbmRleCA9IF9yZWY1JG1ldGEuaW5kZXg7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCAxKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9SRU1PVkVfQUxMXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjYpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjYubWV0YS5maWVsZDtcXG5cXG4gICAgdmFyIGFycmF5ID0gZ2V0SW4oc3RhdGUsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gc2l6ZShhcnJheSkgOiAwO1xcbiAgICByZXR1cm4gbGVuZ3RoID8gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCAwLCBsZW5ndGgpIDogc3RhdGU7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU0hJRlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmNykge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmNy5tZXRhLmZpZWxkO1xcblxcbiAgICByZXR1cm4gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCAwLCAxKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9TUExJQ0VcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmOCkge1xcbiAgICB2YXIgX3JlZjgkbWV0YSA9IF9yZWY4Lm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWY4JG1ldGEuZmllbGQsXFxuICAgICAgICBpbmRleCA9IF9yZWY4JG1ldGEuaW5kZXgsXFxuICAgICAgICByZW1vdmVOdW0gPSBfcmVmOCRtZXRhLnJlbW92ZU51bSxcXG4gICAgICAgIHBheWxvYWQgPSBfcmVmOC5wYXlsb2FkO1xcblxcbiAgICByZXR1cm4gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCBwYXlsb2FkKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9TV0FQXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjkpIHtcXG4gICAgdmFyIF9yZWY5JG1ldGEgPSBfcmVmOS5tZXRhLFxcbiAgICAgICAgZmllbGQgPSBfcmVmOSRtZXRhLmZpZWxkLFxcbiAgICAgICAgaW5kZXhBID0gX3JlZjkkbWV0YS5pbmRleEEsXFxuICAgICAgICBpbmRleEIgPSBfcmVmOSRtZXRhLmluZGV4QjtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICByb290S2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgICB2YXIgdmFsdWVBID0gZ2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QSArICddJyk7XFxuICAgICAgdmFyIHZhbHVlQiA9IGdldEluKHJlc3VsdCwga2V5ICsgJy4nICsgZmllbGQgKyAnWycgKyBpbmRleEIgKyAnXScpO1xcbiAgICAgIGlmICh2YWx1ZUEgIT09IHVuZGVmaW5lZCB8fCB2YWx1ZUIgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QSArICddJywgdmFsdWVCKTtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwga2V5ICsgJy4nICsgZmllbGQgKyAnWycgKyBpbmRleEIgKyAnXScsIHZhbHVlQSk7XFxuICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9VTlNISUZUXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjEwKSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWYxMC5tZXRhLmZpZWxkLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYxMC5wYXlsb2FkO1xcblxcbiAgICByZXR1cm4gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCAwLCAwLCBwYXlsb2FkKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBVVRPRklMTFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxMSkge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmMTEubWV0YS5maWVsZCxcXG4gICAgICAgIHBheWxvYWQgPSBfcmVmMTEucGF5bG9hZDtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ2FzeW5jRXJyb3JzLicgKyBmaWVsZCk7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnc3VibWl0RXJyb3JzLicgKyBmaWVsZCk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmF1dG9maWxsZWQnLCB0cnVlKTtcXG4gICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAndmFsdWVzLicgKyBmaWVsZCwgcGF5bG9hZCk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQkxVUlxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxMikge1xcbiAgICB2YXIgX3JlZjEyJG1ldGEgPSBfcmVmMTIubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjEyJG1ldGEuZmllbGQsXFxuICAgICAgICB0b3VjaCA9IF9yZWYxMiRtZXRhLnRvdWNoLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYxMi5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHZhciBpbml0aWFsID0gZ2V0SW4ocmVzdWx0LCAnaW5pdGlhbC4nICsgZmllbGQpO1xcbiAgICBpZiAoaW5pdGlhbCA9PT0gdW5kZWZpbmVkICYmIHBheWxvYWQgPT09ICcnKSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgfSBlbHNlIGlmIChwYXlsb2FkICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICd2YWx1ZXMuJyArIGZpZWxkLCBwYXlsb2FkKTtcXG4gICAgfVxcbiAgICBpZiAoZmllbGQgPT09IGdldEluKHJlc3VsdCwgJ2FjdGl2ZScpKSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnYWN0aXZlJyk7XFxuICAgIH1cXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcuYWN0aXZlJyk7XFxuICAgIGlmICh0b3VjaCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdhbnlUb3VjaGVkJywgdHJ1ZSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJDSEFOR0VcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTMpIHtcXG4gICAgdmFyIF9yZWYxMyRtZXRhID0gX3JlZjEzLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYxMyRtZXRhLmZpZWxkLFxcbiAgICAgICAgdG91Y2ggPSBfcmVmMTMkbWV0YS50b3VjaCxcXG4gICAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgPSBfcmVmMTMkbWV0YS5wZXJzaXN0ZW50U3VibWl0RXJyb3JzLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYxMy5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHZhciBpbml0aWFsID0gZ2V0SW4ocmVzdWx0LCAnaW5pdGlhbC4nICsgZmllbGQpO1xcbiAgICBpZiAoaW5pdGlhbCA9PT0gdW5kZWZpbmVkICYmIHBheWxvYWQgPT09ICcnKSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgfSBlbHNlIGlmIChwYXlsb2FkICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICd2YWx1ZXMuJyArIGZpZWxkLCBwYXlsb2FkKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ2FzeW5jRXJyb3JzLicgKyBmaWVsZCk7XFxuICAgIGlmICghcGVyc2lzdGVudFN1Ym1pdEVycm9ycykge1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnc3VibWl0RXJyb3JzLicgKyBmaWVsZCk7XFxuICAgIH1cXG4gICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy5hdXRvZmlsbGVkJyk7XFxuICAgIGlmICh0b3VjaCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdhbnlUb3VjaGVkJywgdHJ1ZSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJDTEVBUl9TVUJNSVRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHJldHVybiBkZWxldGVJbihzdGF0ZSwgJ3RyaWdnZXJTdWJtaXQnKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJDTEVBUl9TVUJNSVRfRVJST1JTXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICByZXR1cm4gZGVsZXRlSW5XaXRoQ2xlYW5VcChzdGF0ZSwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX0FTWU5DX0VSUk9SXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjE0KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWYxNC5tZXRhLmZpZWxkO1xcblxcbiAgICByZXR1cm4gZGVsZXRlSW4oc3RhdGUsICdhc3luY0Vycm9ycy4nICsgZmllbGQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkZPQ1VTXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjE1KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWYxNS5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHZhciBwcmV2aW91c2x5QWN0aXZlID0gZ2V0SW4oc3RhdGUsICdhY3RpdmUnKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZmllbGRzLicgKyBwcmV2aW91c2x5QWN0aXZlICsgJy5hY3RpdmUnKTtcXG4gICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudmlzaXRlZCcsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy5hY3RpdmUnLCB0cnVlKTtcXG4gICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnYWN0aXZlJywgZmllbGQpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIklOSVRJQUxJWkVcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTYpIHtcXG4gICAgdmFyIHBheWxvYWQgPSBfcmVmMTYucGF5bG9hZCxcXG4gICAgICAgIF9yZWYxNiRtZXRhID0gX3JlZjE2Lm1ldGEsXFxuICAgICAgICBrZWVwRGlydHkgPSBfcmVmMTYkbWV0YS5rZWVwRGlydHksXFxuICAgICAgICBrZWVwU3VibWl0U3VjY2VlZGVkID0gX3JlZjE2JG1ldGEua2VlcFN1Ym1pdFN1Y2NlZWRlZDtcXG5cXG4gICAgdmFyIG1hcERhdGEgPSBmcm9tSlMocGF5bG9hZCk7XFxuICAgIHZhciByZXN1bHQgPSBlbXB0eTsgLy8gY2xlYW4gYWxsIGZpZWxkIHN0YXRlXFxuXFxuICAgIC8vIHBlcnNpc3Qgb2xkIHdhcm5pbmdzLCB0aGV5IHdpbGwgZ2V0IHJlY2FsY3VsYXRlZCBpZiB0aGUgbmV3IGZvcm0gdmFsdWVzIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIHZhbHVlc1xcbiAgICB2YXIgd2FybmluZyA9IGdldEluKHN0YXRlLCAnd2FybmluZycpO1xcbiAgICBpZiAod2FybmluZykge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3dhcm5pbmcnLCB3YXJuaW5nKTtcXG4gICAgfVxcbiAgICB2YXIgc3luY1dhcm5pbmdzID0gZ2V0SW4oc3RhdGUsICdzeW5jV2FybmluZ3MnKTtcXG4gICAgaWYgKHN5bmNXYXJuaW5ncykge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N5bmNXYXJuaW5ncycsIHN5bmNXYXJuaW5ncyk7XFxuICAgIH1cXG5cXG4gICAgLy8gcGVyc2lzdCBvbGQgZXJyb3JzLCB0aGV5IHdpbGwgZ2V0IHJlY2FsY3VsYXRlZCBpZiB0aGUgbmV3IGZvcm0gdmFsdWVzIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIHZhbHVlc1xcbiAgICB2YXIgZXJyb3IgPSBnZXRJbihzdGF0ZSwgJ2Vycm9yJyk7XFxuICAgIGlmIChlcnJvcikge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2Vycm9yJywgZXJyb3IpO1xcbiAgICB9XFxuICAgIHZhciBzeW5jRXJyb3JzID0gZ2V0SW4oc3RhdGUsICdzeW5jRXJyb3JzJyk7XFxuICAgIGlmIChzeW5jRXJyb3JzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY0Vycm9ycycsIHN5bmNFcnJvcnMpO1xcbiAgICB9XFxuXFxuICAgIHZhciByZWdpc3RlcmVkRmllbGRzID0gZ2V0SW4oc3RhdGUsICdyZWdpc3RlcmVkRmllbGRzJyk7XFxuICAgIGlmIChyZWdpc3RlcmVkRmllbGRzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAncmVnaXN0ZXJlZEZpZWxkcycsIHJlZ2lzdGVyZWRGaWVsZHMpO1xcbiAgICB9XFxuICAgIHZhciBuZXdWYWx1ZXMgPSBtYXBEYXRhO1xcbiAgICBpZiAoa2VlcERpcnR5ICYmIHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICAvL1xcbiAgICAgIC8vIEtlZXAgdGhlIHZhbHVlIG9mIGRpcnR5IGZpZWxkcyB3aGlsZSB1cGRhdGluZyB0aGUgdmFsdWUgb2ZcXG4gICAgICAvLyBwcmlzdGluZSBmaWVsZHMuIFRoaXMgd2F5LCBhcHBzIGNhbiByZWluaXRpYWxpemUgZm9ybXMgd2hpbGVcXG4gICAgICAvLyBhdm9pZGluZyBzdG9tcGluZyBvbiB1c2VyIGVkaXRzLlxcbiAgICAgIC8vXFxuICAgICAgLy8gTm90ZSAxOiBUaGUgaW5pdGlhbGl6ZSBhY3Rpb24gcmVwbGFjZXMgYWxsIGluaXRpYWwgdmFsdWVzXFxuICAgICAgLy8gcmVnYXJkbGVzcyBvZiBrZWVwRGlydHkuXFxuICAgICAgLy9cXG4gICAgICAvLyBOb3RlIDI6IFdoZW4gYSBmaWVsZCBpcyBkaXJ0eSwga2VlcERpcnR5IGlzIGVuYWJsZWQsIGFuZCB0aGUgZmllbGRcXG4gICAgICAvLyB2YWx1ZSBpcyB0aGUgc2FtZSBhcyB0aGUgbmV3IGluaXRpYWwgdmFsdWUgZm9yIHRoZSBmaWVsZCwgdGhlXFxuICAgICAgLy8gaW5pdGlhbGl6ZSBhY3Rpb24gY2F1c2VzIHRoZSBmaWVsZCB0byBiZWNvbWUgcHJpc3RpbmUuIFRoYXQgZWZmZWN0XFxuICAgICAgLy8gaXMgd2hhdCB3ZSB3YW50LlxcbiAgICAgIC8vXFxuICAgICAgdmFyIHByZXZpb3VzVmFsdWVzID0gZ2V0SW4oc3RhdGUsICd2YWx1ZXMnKTtcXG4gICAgICB2YXIgcHJldmlvdXNJbml0aWFsVmFsdWVzID0gZ2V0SW4oc3RhdGUsICdpbml0aWFsJyk7XFxuICAgICAga2V5cyhyZWdpc3RlcmVkRmllbGRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICB2YXIgcHJldmlvdXNJbml0aWFsVmFsdWUgPSBnZXRJbihwcmV2aW91c0luaXRpYWxWYWx1ZXMsIG5hbWUpO1xcbiAgICAgICAgdmFyIHByZXZpb3VzVmFsdWUgPSBnZXRJbihwcmV2aW91c1ZhbHVlcywgbmFtZSk7XFxuICAgICAgICBpZiAoIWRlZXBFcXVhbChwcmV2aW91c1ZhbHVlLCBwcmV2aW91c0luaXRpYWxWYWx1ZSkpIHtcXG4gICAgICAgICAgLy8gVGhpcyBmaWVsZCB3YXMgZGlydHkuIFJlc3RvcmUgdGhlIGRpcnR5IHZhbHVlLlxcbiAgICAgICAgICBuZXdWYWx1ZXMgPSBzZXRJbihuZXdWYWx1ZXMsIG5hbWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcbiAgICAgIH0pO1xcbiAgICB9XFxuICAgIGlmIChrZWVwU3VibWl0U3VjY2VlZGVkICYmIGdldEluKHN0YXRlLCAnc3VibWl0U3VjY2VlZGVkJykpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRTdWNjZWVkZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICd2YWx1ZXMnLCBuZXdWYWx1ZXMpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdpbml0aWFsJywgbWFwRGF0YSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVHSVNURVJfRklFTERcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTcpIHtcXG4gICAgdmFyIF9yZWYxNyRwYXlsb2FkID0gX3JlZjE3LnBheWxvYWQsXFxuICAgICAgICBuYW1lID0gX3JlZjE3JHBheWxvYWQubmFtZSxcXG4gICAgICAgIHR5cGUgPSBfcmVmMTckcGF5bG9hZC50eXBlO1xcblxcbiAgICB2YXIga2V5ID0gJ3JlZ2lzdGVyZWRGaWVsZHNbXFxcXCcnICsgbmFtZSArICdcXFxcJ10nO1xcbiAgICB2YXIgZmllbGQgPSBnZXRJbihzdGF0ZSwga2V5KTtcXG4gICAgaWYgKGZpZWxkKSB7XFxuICAgICAgdmFyIGNvdW50ID0gZ2V0SW4oZmllbGQsICdjb3VudCcpICsgMTtcXG4gICAgICBmaWVsZCA9IHNldEluKGZpZWxkLCAnY291bnQnLCBjb3VudCk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgZmllbGQgPSBmcm9tSlMoeyBuYW1lOiBuYW1lLCB0eXBlOiB0eXBlLCBjb3VudDogMSB9KTtcXG4gICAgfVxcbiAgICByZXR1cm4gc2V0SW4oc3RhdGUsIGtleSwgZmllbGQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlJFU0VUXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICB2YXIgcmVzdWx0ID0gZW1wdHk7XFxuICAgIHZhciByZWdpc3RlcmVkRmllbGRzID0gZ2V0SW4oc3RhdGUsICdyZWdpc3RlcmVkRmllbGRzJyk7XFxuICAgIGlmIChyZWdpc3RlcmVkRmllbGRzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAncmVnaXN0ZXJlZEZpZWxkcycsIHJlZ2lzdGVyZWRGaWVsZHMpO1xcbiAgICB9XFxuICAgIHZhciB2YWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ2luaXRpYWwnKTtcXG4gICAgaWYgKHZhbHVlcykge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcycsIHZhbHVlcyk7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnaW5pdGlhbCcsIHZhbHVlcyk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVUJNSVRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwgJ3RyaWdnZXJTdWJtaXQnLCB0cnVlKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVEFSVF9BU1lOQ19WQUxJREFUSU9OXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjE4KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWYxOC5tZXRhLmZpZWxkO1xcblxcbiAgICByZXR1cm4gc2V0SW4oc3RhdGUsICdhc3luY1ZhbGlkYXRpbmcnLCBmaWVsZCB8fCB0cnVlKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVEFSVF9TVUJNSVRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwgJ3N1Ym1pdHRpbmcnLCB0cnVlKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVE9QX0FTWU5DX1ZBTElEQVRJT05cXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTkpIHtcXG4gICAgdmFyIHBheWxvYWQgPSBfcmVmMTkucGF5bG9hZDtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdhc3luY1ZhbGlkYXRpbmcnKTtcXG4gICAgaWYgKHBheWxvYWQgJiYgT2JqZWN0LmtleXMocGF5bG9hZCkubGVuZ3RoKSB7XFxuICAgICAgdmFyIF9lcnJvciA9IHBheWxvYWQuX2Vycm9yLFxcbiAgICAgICAgICBmaWVsZEVycm9ycyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwYXlsb2FkLCBbJ19lcnJvciddKTtcXG5cXG4gICAgICBpZiAoX2Vycm9yKSB7XFxuICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdlcnJvcicsIF9lcnJvcik7XFxuICAgICAgfVxcbiAgICAgIGlmIChPYmplY3Qua2V5cyhmaWVsZEVycm9ycykubGVuZ3RoKSB7XFxuICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdhc3luY0Vycm9ycycsIGZyb21KUyhmaWVsZEVycm9ycykpO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdhc3luY0Vycm9ycycpO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJyk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVE9QX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYyMCkge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYyMC5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0RmFpbGVkJyk7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcpO1xcbiAgICBpZiAocGF5bG9hZCAmJiBPYmplY3Qua2V5cyhwYXlsb2FkKS5sZW5ndGgpIHtcXG4gICAgICB2YXIgX2Vycm9yID0gcGF5bG9hZC5fZXJyb3IsXFxuICAgICAgICAgIGZpZWxkRXJyb3JzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHBheWxvYWQsIFsnX2Vycm9yJ10pO1xcblxcbiAgICAgIGlmIChfZXJyb3IpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2Vycm9yJywgX2Vycm9yKTtcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZXJyb3InKTtcXG4gICAgICB9XFxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpZWxkRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycsIGZyb21KUyhmaWVsZEVycm9ycykpO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzdWJtaXRFcnJvcnMnKTtcXG4gICAgICB9XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3VibWl0RmFpbGVkJywgdHJ1ZSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJywgdHJ1ZSk7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZXJyb3InKTtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzdWJtaXRFcnJvcnMnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNFVF9TVUJNSVRfRkFJTEVEXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIxKSB7XFxuICAgIHZhciBmaWVsZHMgPSBfcmVmMjEubWV0YS5maWVsZHM7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3VibWl0RmFpbGVkJywgdHJ1ZSk7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzdWJtaXR0aW5nJyk7XFxuICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xcbiAgICAgIHJldHVybiByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy50b3VjaGVkJywgdHJ1ZSk7XFxuICAgIH0pO1xcbiAgICBpZiAoZmllbGRzLmxlbmd0aCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNFVF9TVUJNSVRfU1VDQ0VFREVEXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEZhaWxlZCcpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRTdWNjZWVkZWQnLCB0cnVlKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJUT1VDSFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYyMikge1xcbiAgICB2YXIgZmllbGRzID0gX3JlZjIyLm1ldGEuZmllbGRzO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xcbiAgICAgIHJldHVybiByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy50b3VjaGVkJywgdHJ1ZSk7XFxuICAgIH0pO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdhbnlUb3VjaGVkJywgdHJ1ZSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVU5SRUdJU1RFUl9GSUVMRFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYyMykge1xcbiAgICB2YXIgX3JlZjIzJHBheWxvYWQgPSBfcmVmMjMucGF5bG9hZCxcXG4gICAgICAgIG5hbWUgPSBfcmVmMjMkcGF5bG9hZC5uYW1lLFxcbiAgICAgICAgZGVzdHJveU9uVW5tb3VudCA9IF9yZWYyMyRwYXlsb2FkLmRlc3Ryb3lPblVubW91bnQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGtleSA9ICdyZWdpc3RlcmVkRmllbGRzW1xcXFwnJyArIG5hbWUgKyAnXFxcXCddJztcXG4gICAgdmFyIGZpZWxkID0gZ2V0SW4ocmVzdWx0LCBrZXkpO1xcbiAgICBpZiAoIWZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdDtcXG4gICAgfVxcblxcbiAgICB2YXIgY291bnQgPSBnZXRJbihmaWVsZCwgJ2NvdW50JykgLSAxO1xcbiAgICBpZiAoY291bnQgPD0gMCAmJiBkZXN0cm95T25Vbm1vdW50KSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCBrZXkpO1xcbiAgICAgIGlmIChkZWVwRXF1YWwoZ2V0SW4ocmVzdWx0LCAncmVnaXN0ZXJlZEZpZWxkcycpLCBlbXB0eSkpIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgZmllbGQgPSBzZXRJbihmaWVsZCwgJ2NvdW50JywgY291bnQpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwga2V5LCBmaWVsZCk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlRPVUNIXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjI0KSB7XFxuICAgIHZhciBmaWVsZHMgPSBfcmVmMjQubWV0YS5maWVsZHM7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnKTtcXG4gICAgfSk7XFxuICAgIHZhciBhbnlUb3VjaGVkID0ga2V5cyhnZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJykpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHJldHVybiBnZXRJbihyZXN1bHQsICdmaWVsZHMuJyArIGtleSArICcudG91Y2hlZCcpO1xcbiAgICB9KTtcXG4gICAgcmVzdWx0ID0gYW55VG91Y2hlZCA/IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKSA6IGRlbGV0ZUluKHJlc3VsdCwgJ2FueVRvdWNoZWQnKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVUERBVEVfU1lOQ19FUlJPUlNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjUpIHtcXG4gICAgdmFyIF9yZWYyNSRwYXlsb2FkID0gX3JlZjI1LnBheWxvYWQsXFxuICAgICAgICBzeW5jRXJyb3JzID0gX3JlZjI1JHBheWxvYWQuc3luY0Vycm9ycyxcXG4gICAgICAgIGVycm9yID0gX3JlZjI1JHBheWxvYWQuZXJyb3I7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBlcnJvcik7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY0Vycm9yJywgdHJ1ZSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZXJyb3InKTtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzeW5jRXJyb3InKTtcXG4gICAgfVxcbiAgICBpZiAoT2JqZWN0LmtleXMoc3luY0Vycm9ycykubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY0Vycm9ycycsIHN5bmNFcnJvcnMpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N5bmNFcnJvcnMnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX1dBUk5JTkdTXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjI2KSB7XFxuICAgIHZhciBfcmVmMjYkcGF5bG9hZCA9IF9yZWYyNi5wYXlsb2FkLFxcbiAgICAgICAgc3luY1dhcm5pbmdzID0gX3JlZjI2JHBheWxvYWQuc3luY1dhcm5pbmdzLFxcbiAgICAgICAgd2FybmluZyA9IF9yZWYyNiRwYXlsb2FkLndhcm5pbmc7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgaWYgKHdhcm5pbmcpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICd3YXJuaW5nJywgd2FybmluZyk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnd2FybmluZycpO1xcbiAgICB9XFxuICAgIGlmIChPYmplY3Qua2V5cyhzeW5jV2FybmluZ3MpLmxlbmd0aCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N5bmNXYXJuaW5ncycsIHN5bmNXYXJuaW5ncyk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJyk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfYmVoYXZpb3JzKTtcXG5cXG4gIHZhciByZWR1Y2VyID0gZnVuY3Rpb24gcmVkdWNlcigpIHtcXG4gICAgdmFyIHN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBlbXB0eTtcXG4gICAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50c1sxXTtcXG5cXG4gICAgdmFyIGJlaGF2aW9yID0gYmVoYXZpb3JzW2FjdGlvbi50eXBlXTtcXG4gICAgcmV0dXJuIGJlaGF2aW9yID8gYmVoYXZpb3Ioc3RhdGUsIGFjdGlvbikgOiBzdGF0ZTtcXG4gIH07XFxuXFxuICB2YXIgYnlGb3JtID0gZnVuY3Rpb24gYnlGb3JtKHJlZHVjZXIpIHtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVtcHR5O1xcbiAgICAgIHZhciBhY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcblxcbiAgICAgIHZhciBmb3JtID0gYWN0aW9uICYmIGFjdGlvbi5tZXRhICYmIGFjdGlvbi5tZXRhLmZvcm07XFxuICAgICAgaWYgKCFmb3JtKSB7XFxuICAgICAgICByZXR1cm4gc3RhdGU7XFxuICAgICAgfVxcbiAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJERVNUUk9ZXFxcIl0pIHtcXG4gICAgICAgIHJldHVybiBhY3Rpb24ubWV0YS5mb3JtLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBmb3JtKSB7XFxuICAgICAgICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgZm9ybSk7XFxuICAgICAgICB9LCBzdGF0ZSk7XFxuICAgICAgfVxcbiAgICAgIHZhciBmb3JtU3RhdGUgPSBnZXRJbihzdGF0ZSwgZm9ybSk7XFxuICAgICAgdmFyIHJlc3VsdCA9IHJlZHVjZXIoZm9ybVN0YXRlLCBhY3Rpb24pO1xcbiAgICAgIHJldHVybiByZXN1bHQgPT09IGZvcm1TdGF0ZSA/IHN0YXRlIDogc2V0SW4oc3RhdGUsIGZvcm0sIHJlc3VsdCk7XFxuICAgIH07XFxuICB9O1xcblxcbiAgLyoqXFxuICAgKiBBZGRzIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSB0byB0aGUgcmVkdWNlclxcbiAgICovXFxuICBmdW5jdGlvbiBkZWNvcmF0ZSh0YXJnZXQpIHtcXG4gICAgdGFyZ2V0LnBsdWdpbiA9IGZ1bmN0aW9uIHBsdWdpbihyZWR1Y2Vycykge1xcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XFxuXFxuICAgICAgLy8gdXNlICdmdW5jdGlvbicga2V5d29yZCB0byBlbmFibGUgJ3RoaXMnXFxuICAgICAgcmV0dXJuIGRlY29yYXRlKGZ1bmN0aW9uICgpIHtcXG4gICAgICAgIHZhciBzdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZW1wdHk7XFxuICAgICAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhyZWR1Y2VycykucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwga2V5KSB7XFxuICAgICAgICAgIHZhciBwcmV2aW91c1N0YXRlID0gZ2V0SW4oYWNjdW11bGF0b3IsIGtleSk7XFxuICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSByZWR1Y2Vyc1trZXldKHByZXZpb3VzU3RhdGUsIGFjdGlvbiwgZ2V0SW4oc3RhdGUsIGtleSkpO1xcbiAgICAgICAgICByZXR1cm4gbmV4dFN0YXRlID09PSBwcmV2aW91c1N0YXRlID8gYWNjdW11bGF0b3IgOiBzZXRJbihhY2N1bXVsYXRvciwga2V5LCBuZXh0U3RhdGUpO1xcbiAgICAgICAgfSwgX3RoaXMoc3RhdGUsIGFjdGlvbikpO1xcbiAgICAgIH0pO1xcbiAgICB9O1xcblxcbiAgICByZXR1cm4gdGFyZ2V0O1xcbiAgfVxcblxcbiAgcmV0dXJuIGRlY29yYXRlKGJ5Rm9ybShyZWR1Y2VyKSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVSZWR1Y2VyKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA5MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG5cXG52YXIgY3JlYXRlRGVsZXRlSW5XaXRoQ2xlYW5VcCA9IGZ1bmN0aW9uIGNyZWF0ZURlbGV0ZUluV2l0aENsZWFuVXAoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGVtcHR5ID0gX3JlZi5lbXB0eSxcXG4gICAgICBnZXRJbiA9IF9yZWYuZ2V0SW4sXFxuICAgICAgZGVsZXRlSW4gPSBfcmVmLmRlbGV0ZUluLFxcbiAgICAgIHNldEluID0gX3JlZi5zZXRJbjtcXG5cXG5cXG4gIHZhciBkZWxldGVJbldpdGhDbGVhblVwID0gZnVuY3Rpb24gZGVsZXRlSW5XaXRoQ2xlYW5VcChzdGF0ZSwgcGF0aCkge1xcbiAgICBpZiAocGF0aFtwYXRoLmxlbmd0aCAtIDFdID09PSAnXScpIHtcXG4gICAgICAvLyBhcnJheSBwYXRoXFxuICAgICAgdmFyIHBhdGhUb2tlbnMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpO1xcbiAgICAgIHBhdGhUb2tlbnMucG9wKCk7XFxuICAgICAgdmFyIHBhcmVudCA9IGdldEluKHN0YXRlLCBwYXRoVG9rZW5zLmpvaW4oJy4nKSk7XFxuICAgICAgcmV0dXJuIHBhcmVudCA/IHNldEluKHN0YXRlLCBwYXRoLCB1bmRlZmluZWQpIDogc3RhdGU7XFxuICAgIH1cXG4gICAgdmFyIHJlc3VsdCA9IGRlbGV0ZUluKHN0YXRlLCBwYXRoKTtcXG4gICAgdmFyIGRvdEluZGV4ID0gcGF0aC5sYXN0SW5kZXhPZignLicpO1xcbiAgICBpZiAoZG90SW5kZXggPiAwKSB7XFxuICAgICAgdmFyIHBhcmVudFBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBkb3RJbmRleCk7XFxuICAgICAgaWYgKHBhcmVudFBhdGhbcGFyZW50UGF0aC5sZW5ndGggLSAxXSAhPT0gJ10nKSB7XFxuICAgICAgICB2YXIgX3BhcmVudCA9IGdldEluKHJlc3VsdCwgcGFyZW50UGF0aCk7XFxuICAgICAgICBpZiAoZGVlcEVxdWFsKF9wYXJlbnQsIGVtcHR5KSkge1xcbiAgICAgICAgICByZXR1cm4gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsIHBhcmVudFBhdGgpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG5cXG4gIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRGVsZXRlSW5XaXRoQ2xlYW5VcCk7XFxuXFxuLyoqKi8gfSksXFxuLyogOTQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogVXNlZCB0byByZXNvbHZlIHRoZVxcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxcbiAqIG9mIHZhbHVlcy5cXG4gKi9cXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxcbiAqL1xcbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcXG5cXG4gIHRyeSB7XFxuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcXG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcXG4gIH0gY2F0Y2ggKGUpIHt9XFxuXFxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XFxuICBpZiAodW5tYXNrZWQpIHtcXG4gICAgaWYgKGlzT3duKSB7XFxuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFJhd1RhZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKlxcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcXG4gKiBvZiB2YWx1ZXMuXFxuICovXFxudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cXG4gKi9cXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChvYmplY3RUb1N0cmluZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX21lbW9pemVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTcpO1xcblxcblxcbi8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcXG5cXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXFxuICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xcbiAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX21lbW9pemVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xcbiAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xcbiAgICAgIGNhY2hlLmNsZWFyKCk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGtleTtcXG4gIH0pO1xcblxcbiAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWVtb2l6ZUNhcHBlZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX01hcENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTtcXG5cXG5cXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXFxudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcXG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxcbiAqXFxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXFxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XFxuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xcbiAqXFxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWzEsIDJdXFxuICpcXG4gKiB2YWx1ZXMob3RoZXIpO1xcbiAqIC8vID0+IFszLCA0XVxcbiAqXFxuICogb2JqZWN0LmEgPSAyO1xcbiAqIHZhbHVlcyhvYmplY3QpO1xcbiAqIC8vID0+IFsxLCAyXVxcbiAqXFxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXFxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xcbiAqIHZhbHVlcyhvYmplY3QpO1xcbiAqIC8vID0+IFsnYScsICdiJ11cXG4gKlxcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXFxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcXG4gKi9cXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XFxuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xcbiAgfVxcbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XFxuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xcblxcbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcXG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XFxuICAgIH1cXG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XFxuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX01hcENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gIHJldHVybiBtZW1vaXplZDtcXG59XFxuXFxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXFxubWVtb2l6ZS5DYWNoZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWVtb2l6ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0hhc2hfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0xpc3RDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGNsZWFyXFxuICogQG1lbWJlck9mIE1hcENhY2hlXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcXG4gIHRoaXMuc2l6ZSA9IDA7XFxuICB0aGlzLl9fZGF0YV9fID0ge1xcbiAgICAnaGFzaCc6IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0hhc2hfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgICdtYXAnOiBuZXcgKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgJ3N0cmluZyc6IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0hhc2hfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11cXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlQ2xlYXIpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDk5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNoQ2xlYXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTAwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19oYXNoRGVsZXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faGFzaEdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2hhc2hIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19oYXNoU2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwOCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAY29uc3RydWN0b3JcXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcXG5cXG4gIHRoaXMuY2xlYXIoKTtcXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xcbiAgfVxcbn1cXG5cXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXFxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hhc2hDbGVhcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc2hEZWxldGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuSGFzaC5wcm90b3R5cGUuZ2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19oYXNoR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlLmhhcyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faGFzaEhhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5IYXNoLnByb3RvdHlwZS5zZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2hhc2hTZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoSGFzaCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGNsZWFyXFxuICogQG1lbWJlck9mIEhhc2hcXG4gKi9cXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG51bGwpIDoge307XFxuICB0aGlzLnNpemUgPSAwO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYXNoQ2xlYXIpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNNYXNrZWRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTAyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX190b1NvdXJjZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7XFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxcbiAqL1xcbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxcXFxcXiQuKis/KClbXFxcXF17fXxdL2c7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xcbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxcXF0kLztcXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXFxudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFxcXFxcJCYnKVxcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFxcXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXFxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXFxuKTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxcbiAqICBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XFxuICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNNYXNrZWRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgcGF0dGVybiA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRnVuY3Rpb25fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XFxuICByZXR1cm4gcGF0dGVybi50ZXN0KE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNOYXRpdmUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29yZUpzRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDMpO1xcblxcblxcbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXFxudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XFxuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3JlSnNEYXRhX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmtleXMgJiYgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3JlSnNEYXRhX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmtleXMuSUVfUFJPVE8gfHwgJycpO1xcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xcbn0oKSk7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNNYXNrZWQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXFxudmFyIGNvcmVKc0RhdGEgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11bJ19fY29yZS1qc19zaGFyZWRfXyddO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNvcmVKc0RhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFZhbHVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMDUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBkZWxldGVcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcXG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XFxuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYXNoRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMDYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XFxuXFxuXFxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xcbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgZ2V0XFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkge1xcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcXG4gIH1cXG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBIYXNoXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XFxuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XFxuICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYXNoSGFzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMDggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XFxuXFxuXFxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xcbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcXG5cXG4vKipcXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBIYXNoXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXFxuICovXFxuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XFxuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XFxuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xcbiAgZGF0YVtrZXldID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcXG4gIHJldHVybiB0aGlzO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYXNoU2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMDkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGNsZWFyXFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxcbiAqL1xcbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xcbiAgdGhpcy5zaXplID0gMDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobGlzdENhY2hlQ2xlYXIpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xcblxcbi8qKlxcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBkZWxldGVcXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcXG4gICAgICBpbmRleCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZGF0YSwga2V5KTtcXG5cXG4gIGlmIChpbmRleCA8IDApIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcXG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcXG4gICAgZGF0YS5wb3AoKTtcXG4gIH0gZWxzZSB7XFxuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcXG4gIH1cXG4gIC0tdGhpcy5zaXplO1xcbiAgcmV0dXJuIHRydWU7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGxpc3RDYWNoZURlbGV0ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTExICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NvY0luZGV4T2ZfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcXG4gICAgICBpbmRleCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZGF0YSwga2V5KTtcXG5cXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobGlzdENhY2hlR2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBoYXNcXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NvY0luZGV4T2ZfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobGlzdENhY2hlSGFzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBzZXRcXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcXG4gICAgICBpbmRleCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZGF0YSwga2V5KTtcXG5cXG4gIGlmIChpbmRleCA8IDApIHtcXG4gICAgKyt0aGlzLnNpemU7XFxuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xcbiAgfSBlbHNlIHtcXG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiB0aGlzO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgZGVsZXRlXFxuICogQG1lbWJlck9mIE1hcENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xcbiAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XFxuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtYXBDYWNoZURlbGV0ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTE1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XFxuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxcbiAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXFxuICAgIDogKHZhbHVlID09PSBudWxsKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNLZXlhYmxlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGdldFxcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBrZXkpLmdldChrZXkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtYXBDYWNoZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTE3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIE1hcENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIGtleSkuaGFzKGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlSGFzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xcblxcblxcbi8qKlxcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBzZXRcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KSxcXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xcblxcbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XFxuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcXG4gIHJldHVybiB0aGlzO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtYXBDYWNoZVNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTE5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2FycmF5TWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG5cXG5cXG5cXG5cXG5cXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcXG5cXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cXG52YXIgc3ltYm9sUHJvdG8gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcXG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2FycmF5TWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xcbiAgfVxcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcXG4gIH1cXG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XFxuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VUb1N0cmluZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19tZXJnZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfbG9kYXNoX2VzX21hcFZhbHVlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X3JlYWN0X3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2lzX3Byb21pc2VfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2lzX3Byb21pc2VfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fdXRpbF9nZXREaXNwbGF5TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX2hhbmRsZVN1Ym1pdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19ldmVudHNfc2lsZW5jZUV2ZW50X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fZXZlbnRzX3NpbGVuY2VFdmVudHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fYXN5bmNWYWxpZGF0aW9uX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX2RlZmF1bHRTaG91bGRBc3luY1ZhbGlkYXRlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX2RlZmF1bHRTaG91bGRWYWxpZGF0ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX2dlbmVyYXRlVmFsaWRhdG9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX3NlbGVjdG9yc19pc1ZhbGlkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KTtcXG5cXG5cXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXFxcImZ1bmN0aW9uXFxcIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcXFwic3ltYm9sXFxcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcXFwic3ltYm9sXFxcIiA6IHR5cGVvZiBvYmo7IH07XFxuXFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgaXNDbGFzc0NvbXBvbmVudCA9IGZ1bmN0aW9uIGlzQ2xhc3NDb21wb25lbnQoQ29tcG9uZW50KSB7XFxuICByZXR1cm4gQm9vbGVhbihDb21wb25lbnQgJiYgQ29tcG9uZW50LnByb3RvdHlwZSAmJiBfdHlwZW9mKENvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCkgPT09ICdvYmplY3QnKTtcXG59O1xcblxcbi8vIGV4dHJhY3QgZmllbGQtc3BlY2lmaWMgYWN0aW9uc1xcblxcbnZhciBhcnJheUluc2VydCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheUluc2VydFxcXCJdLFxcbiAgICBhcnJheU1vdmUgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlNb3ZlXFxcIl0sXFxuICAgIGFycmF5UG9wID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5UG9wXFxcIl0sXFxuICAgIGFycmF5UHVzaCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVB1c2hcXFwiXSxcXG4gICAgYXJyYXlSZW1vdmUgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlSZW1vdmVcXFwiXSxcXG4gICAgYXJyYXlSZW1vdmVBbGwgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlSZW1vdmVBbGxcXFwiXSxcXG4gICAgYXJyYXlTaGlmdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVNoaWZ0XFxcIl0sXFxuICAgIGFycmF5U3BsaWNlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U3BsaWNlXFxcIl0sXFxuICAgIGFycmF5U3dhcCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVN3YXBcXFwiXSxcXG4gICAgYXJyYXlVbnNoaWZ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5VW5zaGlmdFxcXCJdLFxcbiAgICBibHVyID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImJsdXJcXFwiXSxcXG4gICAgY2hhbmdlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImNoYW5nZVxcXCJdLFxcbiAgICBmb2N1cyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJmb2N1c1xcXCJdLFxcbiAgICBmb3JtQWN0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfXywgWydhcnJheUluc2VydCcsICdhcnJheU1vdmUnLCAnYXJyYXlQb3AnLCAnYXJyYXlQdXNoJywgJ2FycmF5UmVtb3ZlJywgJ2FycmF5UmVtb3ZlQWxsJywgJ2FycmF5U2hpZnQnLCAnYXJyYXlTcGxpY2UnLCAnYXJyYXlTd2FwJywgJ2FycmF5VW5zaGlmdCcsICdibHVyJywgJ2NoYW5nZScsICdmb2N1cyddKTtcXG5cXG52YXIgYXJyYXlBY3Rpb25zID0ge1xcbiAgYXJyYXlJbnNlcnQ6IGFycmF5SW5zZXJ0LFxcbiAgYXJyYXlNb3ZlOiBhcnJheU1vdmUsXFxuICBhcnJheVBvcDogYXJyYXlQb3AsXFxuICBhcnJheVB1c2g6IGFycmF5UHVzaCxcXG4gIGFycmF5UmVtb3ZlOiBhcnJheVJlbW92ZSxcXG4gIGFycmF5UmVtb3ZlQWxsOiBhcnJheVJlbW92ZUFsbCxcXG4gIGFycmF5U2hpZnQ6IGFycmF5U2hpZnQsXFxuICBhcnJheVNwbGljZTogYXJyYXlTcGxpY2UsXFxuICBhcnJheVN3YXA6IGFycmF5U3dhcCxcXG4gIGFycmF5VW5zaGlmdDogYXJyYXlVbnNoaWZ0XFxufTtcXG5cXG52YXIgcHJvcHNUb05vdFVwZGF0ZUZvciA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoT2JqZWN0LmtleXMoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX18pKSwgWydhcnJheScsICdhc3luY0Vycm9ycycsICdpbml0aWFsaXplZCcsICdpbml0aWFsVmFsdWVzJywgJ3N5bmNFcnJvcnMnLCAnc3luY1dhcm5pbmdzJywgJ3ZhbHVlcycsICdyZWdpc3RlcmVkRmllbGRzJ10pO1xcblxcbnZhciBjaGVja1N1Ym1pdCA9IGZ1bmN0aW9uIGNoZWNrU3VibWl0KHN1Ym1pdCkge1xcbiAgaWYgKCFzdWJtaXQgfHwgdHlwZW9mIHN1Ym1pdCAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IGVpdGhlciBwYXNzIGhhbmRsZVN1Ym1pdCgpIGFuIG9uU3VibWl0IGZ1bmN0aW9uIG9yIHBhc3Mgb25TdWJtaXQgYXMgYSBwcm9wJyk7XFxuICB9XFxuICByZXR1cm4gc3VibWl0O1xcbn07XFxuXFxuLyoqXFxuICogVGhlIGRlY29yYXRvciB0aGF0IGlzIHRoZSBtYWluIEFQSSB0byByZWR1eC1mb3JtXFxuICovXFxudmFyIGNyZWF0ZVJlZHV4Rm9ybSA9IGZ1bmN0aW9uIGNyZWF0ZVJlZHV4Rm9ybShzdHJ1Y3R1cmUpIHtcXG4gIHZhciBkZWVwRXF1YWwgPSBzdHJ1Y3R1cmUuZGVlcEVxdWFsLFxcbiAgICAgIGVtcHR5ID0gc3RydWN0dXJlLmVtcHR5LFxcbiAgICAgIGdldEluID0gc3RydWN0dXJlLmdldEluLFxcbiAgICAgIHNldEluID0gc3RydWN0dXJlLnNldEluLFxcbiAgICAgIGtleXMgPSBzdHJ1Y3R1cmUua2V5cyxcXG4gICAgICBmcm9tSlMgPSBzdHJ1Y3R1cmUuZnJvbUpTO1xcblxcbiAgdmFyIGlzVmFsaWQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fc2VsZWN0b3JzX2lzVmFsaWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSk7XFxuICByZXR1cm4gZnVuY3Rpb24gKGluaXRpYWxDb25maWcpIHtcXG4gICAgdmFyIGNvbmZpZyA9IF9leHRlbmRzKHtcXG4gICAgICB0b3VjaE9uQmx1cjogdHJ1ZSxcXG4gICAgICB0b3VjaE9uQ2hhbmdlOiBmYWxzZSxcXG4gICAgICBwZXJzaXN0ZW50U3VibWl0RXJyb3JzOiBmYWxzZSxcXG4gICAgICBkZXN0cm95T25Vbm1vdW50OiB0cnVlLFxcbiAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX2RlZmF1bHRTaG91bGRBc3luY1ZhbGlkYXRlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICAgIHNob3VsZFZhbGlkYXRlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19kZWZhdWx0U2hvdWxkVmFsaWRhdGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgICAgZW5hYmxlUmVpbml0aWFsaXplOiBmYWxzZSxcXG4gICAgICBrZWVwRGlydHlPblJlaW5pdGlhbGl6ZTogZmFsc2UsXFxuICAgICAgZ2V0Rm9ybVN0YXRlOiBmdW5jdGlvbiBnZXRGb3JtU3RhdGUoc3RhdGUpIHtcXG4gICAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgICB9LFxcbiAgICAgIHB1cmU6IHRydWUsXFxuICAgICAgZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50OiBmYWxzZVxcbiAgICB9LCBpbml0aWFsQ29uZmlnKTtcXG5cXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChXcmFwcGVkQ29tcG9uZW50KSB7XFxuICAgICAgdmFyIEZvcm0gPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICAgICAgX2luaGVyaXRzKEZvcm0sIF9Db21wb25lbnQpO1xcblxcbiAgICAgICAgZnVuY3Rpb24gRm9ybShwcm9wcykge1xcbiAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRm9ybSk7XFxuXFxuICAgICAgICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGb3JtLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRm9ybSkpLmNhbGwodGhpcywgcHJvcHMpKTtcXG5cXG4gICAgICAgICAgX3RoaXMuc3VibWl0ID0gX3RoaXMuc3VibWl0LmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5yZXNldCA9IF90aGlzLnJlc2V0LmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5hc3luY1ZhbGlkYXRlID0gX3RoaXMuYXN5bmNWYWxpZGF0ZS5iaW5kKF90aGlzKTtcXG4gICAgICAgICAgX3RoaXMuZ2V0VmFsdWVzID0gX3RoaXMuZ2V0VmFsdWVzLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5yZWdpc3RlciA9IF90aGlzLnJlZ2lzdGVyLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy51bnJlZ2lzdGVyID0gX3RoaXMudW5yZWdpc3Rlci5iaW5kKF90aGlzKTtcXG4gICAgICAgICAgX3RoaXMuc3VibWl0Q29tcGxldGVkID0gX3RoaXMuc3VibWl0Q29tcGxldGVkLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5zdWJtaXRGYWlsZWQgPSBfdGhpcy5zdWJtaXRGYWlsZWQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLmZpZWxkVmFsaWRhdG9ycyA9IHt9O1xcbiAgICAgICAgICBfdGhpcy5sYXN0RmllbGRWYWxpZGF0b3JLZXlzID0gW107XFxuICAgICAgICAgIF90aGlzLmZpZWxkV2FybmVycyA9IHt9O1xcbiAgICAgICAgICBfdGhpcy5sYXN0RmllbGRXYXJuZXJLZXlzID0gW107XFxuICAgICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIF9jcmVhdGVDbGFzcyhGb3JtLCBbe1xcbiAgICAgICAgICBrZXk6ICdnZXRDaGlsZENvbnRleHQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xcbiAgICAgICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICBfcmVkdXhGb3JtOiBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICAgICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRJbihfdGhpczIucHJvcHMuZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgX3RoaXMyLnByb3BzLmZvcm0pO1xcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRlOiB0aGlzLmFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIGdldFZhbHVlczogdGhpcy5nZXRWYWx1ZXMsXFxuICAgICAgICAgICAgICAgIHNlY3Rpb25QcmVmaXg6IHVuZGVmaW5lZCxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXI6IHRoaXMucmVnaXN0ZXIsXFxuICAgICAgICAgICAgICAgIHVucmVnaXN0ZXI6IHRoaXMudW5yZWdpc3RlcixcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJJbm5lck9uU3VibWl0OiBmdW5jdGlvbiByZWdpc3RlcklubmVyT25TdWJtaXQoaW5uZXJPblN1Ym1pdCkge1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaW5uZXJPblN1Ym1pdCA9IGlubmVyT25TdWJtaXQ7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdpbml0SWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdElmTmVlZGVkKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBlbmFibGVSZWluaXRpYWxpemUgPSB0aGlzLnByb3BzLmVuYWJsZVJlaW5pdGlhbGl6ZTtcXG5cXG4gICAgICAgICAgICBpZiAobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgICBpZiAoKGVuYWJsZVJlaW5pdGlhbGl6ZSB8fCAhbmV4dFByb3BzLmluaXRpYWxpemVkKSAmJiAhZGVlcEVxdWFsKHRoaXMucHJvcHMuaW5pdGlhbFZhbHVlcywgbmV4dFByb3BzLmluaXRpYWxWYWx1ZXMpKSB7XFxuICAgICAgICAgICAgICAgIHZhciBrZWVwRGlydHkgPSBuZXh0UHJvcHMuaW5pdGlhbGl6ZWQgJiYgdGhpcy5wcm9wcy5rZWVwRGlydHlPblJlaW5pdGlhbGl6ZTtcXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5pbml0aWFsaXplKG5leHRQcm9wcy5pbml0aWFsVmFsdWVzLCBrZWVwRGlydHkpO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5pbml0aWFsVmFsdWVzICYmICghdGhpcy5wcm9wcy5pbml0aWFsaXplZCB8fCBlbmFibGVSZWluaXRpYWxpemUpKSB7XFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLmluaXRpYWxpemUodGhpcy5wcm9wcy5pbml0aWFsVmFsdWVzLCB0aGlzLnByb3BzLmtlZXBEaXJ0eU9uUmVpbml0aWFsaXplKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAndXBkYXRlU3luY0Vycm9yc0lmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZVN5bmNFcnJvcnNJZk5lZWRlZChuZXh0U3luY0Vycm9ycywgbmV4dEVycm9yKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGVycm9yID0gX3Byb3BzLmVycm9yLFxcbiAgICAgICAgICAgICAgICBzeW5jRXJyb3JzID0gX3Byb3BzLnN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHVwZGF0ZVN5bmNFcnJvcnMgPSBfcHJvcHMudXBkYXRlU3luY0Vycm9ycztcXG5cXG4gICAgICAgICAgICB2YXIgbm9FcnJvcnMgPSAoIXN5bmNFcnJvcnMgfHwgIU9iamVjdC5rZXlzKHN5bmNFcnJvcnMpLmxlbmd0aCkgJiYgIWVycm9yO1xcbiAgICAgICAgICAgIHZhciBuZXh0Tm9FcnJvcnMgPSAoIW5leHRTeW5jRXJyb3JzIHx8ICFPYmplY3Qua2V5cyhuZXh0U3luY0Vycm9ycykubGVuZ3RoKSAmJiAhbmV4dEVycm9yO1xcbiAgICAgICAgICAgIGlmICghKG5vRXJyb3JzICYmIG5leHROb0Vycm9ycykgJiYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKHN5bmNFcnJvcnMsIG5leHRTeW5jRXJyb3JzKSB8fCAhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmRlZXBFcXVhbChlcnJvciwgbmV4dEVycm9yKSkpIHtcXG4gICAgICAgICAgICAgIHVwZGF0ZVN5bmNFcnJvcnMobmV4dFN5bmNFcnJvcnMsIG5leHRFcnJvcik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2NsZWFyU3VibWl0UHJvbWlzZUlmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyU3VibWl0UHJvbWlzZUlmTmVlZGVkKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBzdWJtaXR0aW5nID0gdGhpcy5wcm9wcy5zdWJtaXR0aW5nO1xcblxcbiAgICAgICAgICAgIGlmICh0aGlzLnN1Ym1pdFByb21pc2UgJiYgc3VibWl0dGluZyAmJiAhbmV4dFByb3BzLnN1Ym1pdHRpbmcpIHtcXG4gICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN1Ym1pdFByb21pc2U7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3N1Ym1pdElmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdElmTmVlZGVkKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMyID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgY2xlYXJTdWJtaXQgPSBfcHJvcHMyLmNsZWFyU3VibWl0LFxcbiAgICAgICAgICAgICAgICB0cmlnZ2VyU3VibWl0ID0gX3Byb3BzMi50cmlnZ2VyU3VibWl0O1xcblxcbiAgICAgICAgICAgIGlmICghdHJpZ2dlclN1Ym1pdCAmJiBuZXh0UHJvcHMudHJpZ2dlclN1Ym1pdCkge1xcbiAgICAgICAgICAgICAgY2xlYXJTdWJtaXQoKTtcXG4gICAgICAgICAgICAgIHRoaXMuc3VibWl0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ZhbGlkYXRlSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsaWRhdGVJZk5lZWRlZChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzMyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzMy5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgdmFsaWRhdGUgPSBfcHJvcHMzLnZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICB2YWx1ZXMgPSBfcHJvcHMzLnZhbHVlcztcXG5cXG4gICAgICAgICAgICB2YXIgZmllbGRMZXZlbFZhbGlkYXRlID0gdGhpcy5nZW5lcmF0ZVZhbGlkYXRvcigpO1xcbiAgICAgICAgICAgIGlmICh2YWxpZGF0ZSB8fCBmaWVsZExldmVsVmFsaWRhdGUpIHtcXG4gICAgICAgICAgICAgIHZhciBpbml0aWFsUmVuZGVyID0gbmV4dFByb3BzID09PSB1bmRlZmluZWQ7XFxuICAgICAgICAgICAgICB2YXIgZmllbGRWYWxpZGF0b3JLZXlzID0gT2JqZWN0LmtleXModGhpcy5nZXRWYWxpZGF0b3JzKCkpO1xcbiAgICAgICAgICAgICAgdmFyIHNob3VsZFZhbGlkYXRlUmVzdWx0ID0gc2hvdWxkVmFsaWRhdGUoe1xcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzOiBuZXh0UHJvcHMsXFxuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsUmVuZGVyOiBpbml0aWFsUmVuZGVyLFxcbiAgICAgICAgICAgICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzOiB0aGlzLmxhc3RGaWVsZFZhbGlkYXRvcktleXMsXFxuICAgICAgICAgICAgICAgIGZpZWxkVmFsaWRhdG9yS2V5czogZmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IHN0cnVjdHVyZVxcbiAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICBpZiAoc2hvdWxkVmFsaWRhdGVSZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHByb3BzVG9WYWxpZGF0ZSA9IGluaXRpYWxSZW5kZXIgPyB0aGlzLnByb3BzIDogbmV4dFByb3BzO1xcblxcbiAgICAgICAgICAgICAgICB2YXIgX21lcmdlMiA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21lcmdlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWxpZGF0ZSA/IHZhbGlkYXRlKHByb3BzVG9WYWxpZGF0ZS52YWx1ZXMsIHByb3BzVG9WYWxpZGF0ZSkgfHwge30gOiB7fSwgZmllbGRMZXZlbFZhbGlkYXRlID8gZmllbGRMZXZlbFZhbGlkYXRlKHByb3BzVG9WYWxpZGF0ZS52YWx1ZXMsIHByb3BzVG9WYWxpZGF0ZSkgfHwge30gOiB7fSksXFxuICAgICAgICAgICAgICAgICAgICBfZXJyb3IgPSBfbWVyZ2UyLl9lcnJvcixcXG4gICAgICAgICAgICAgICAgICAgIG5leHRTeW5jRXJyb3JzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9tZXJnZTIsIFsnX2Vycm9yJ10pO1xcblxcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RGaWVsZFZhbGlkYXRvcktleXMgPSBmaWVsZFZhbGlkYXRvcktleXM7XFxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3luY0Vycm9yc0lmTmVlZGVkKG5leHRTeW5jRXJyb3JzLCBfZXJyb3IpO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd1cGRhdGVTeW5jV2FybmluZ3NJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVTeW5jV2FybmluZ3NJZk5lZWRlZChuZXh0U3luY1dhcm5pbmdzLCBuZXh0V2FybmluZykge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHM0ID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgd2FybmluZyA9IF9wcm9wczQud2FybmluZyxcXG4gICAgICAgICAgICAgICAgc3luY1dhcm5pbmdzID0gX3Byb3BzNC5zeW5jV2FybmluZ3MsXFxuICAgICAgICAgICAgICAgIHVwZGF0ZVN5bmNXYXJuaW5ncyA9IF9wcm9wczQudXBkYXRlU3luY1dhcm5pbmdzO1xcblxcbiAgICAgICAgICAgIHZhciBub1dhcm5pbmdzID0gKCFzeW5jV2FybmluZ3MgfHwgIU9iamVjdC5rZXlzKHN5bmNXYXJuaW5ncykubGVuZ3RoKSAmJiAhd2FybmluZztcXG4gICAgICAgICAgICB2YXIgbmV4dE5vV2FybmluZ3MgPSAoIW5leHRTeW5jV2FybmluZ3MgfHwgIU9iamVjdC5rZXlzKG5leHRTeW5jV2FybmluZ3MpLmxlbmd0aCkgJiYgIW5leHRXYXJuaW5nO1xcbiAgICAgICAgICAgIGlmICghKG5vV2FybmluZ3MgJiYgbmV4dE5vV2FybmluZ3MpICYmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmRlZXBFcXVhbChzeW5jV2FybmluZ3MsIG5leHRTeW5jV2FybmluZ3MpIHx8ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKHdhcm5pbmcsIG5leHRXYXJuaW5nKSkpIHtcXG4gICAgICAgICAgICAgIHVwZGF0ZVN5bmNXYXJuaW5ncyhuZXh0U3luY1dhcm5pbmdzLCBuZXh0V2FybmluZyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3dhcm5JZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB3YXJuSWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczUgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBzaG91bGRWYWxpZGF0ZSA9IF9wcm9wczUuc2hvdWxkVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHdhcm4gPSBfcHJvcHM1Lndhcm4sXFxuICAgICAgICAgICAgICAgIHZhbHVlcyA9IF9wcm9wczUudmFsdWVzO1xcblxcbiAgICAgICAgICAgIHZhciBmaWVsZExldmVsV2FybiA9IHRoaXMuZ2VuZXJhdGVXYXJuZXIoKTtcXG4gICAgICAgICAgICBpZiAod2FybiB8fCBmaWVsZExldmVsV2Fybikge1xcbiAgICAgICAgICAgICAgdmFyIGluaXRpYWxSZW5kZXIgPSBuZXh0UHJvcHMgPT09IHVuZGVmaW5lZDtcXG4gICAgICAgICAgICAgIHZhciBmaWVsZFdhcm5lcktleXMgPSBPYmplY3Qua2V5cyh0aGlzLmdldFdhcm5lcnMoKSk7XFxuICAgICAgICAgICAgICB2YXIgc2hvdWxkV2FyblJlc3VsdCA9IHNob3VsZFZhbGlkYXRlKHtcXG4gICAgICAgICAgICAgICAgdmFsdWVzOiB2YWx1ZXMsXFxuICAgICAgICAgICAgICAgIG5leHRQcm9wczogbmV4dFByb3BzLFxcbiAgICAgICAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbFJlbmRlcjogaW5pdGlhbFJlbmRlcixcXG4gICAgICAgICAgICAgICAgbGFzdEZpZWxkVmFsaWRhdG9yS2V5czogdGhpcy5sYXN0RmllbGRXYXJuZXJLZXlzLFxcbiAgICAgICAgICAgICAgICBmaWVsZFZhbGlkYXRvcktleXM6IGZpZWxkV2FybmVyS2V5cyxcXG4gICAgICAgICAgICAgICAgc3RydWN0dXJlOiBzdHJ1Y3R1cmVcXG4gICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgaWYgKHNob3VsZFdhcm5SZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHByb3BzVG9XYXJuID0gaW5pdGlhbFJlbmRlciA/IHRoaXMucHJvcHMgOiBuZXh0UHJvcHM7XFxuXFxuICAgICAgICAgICAgICAgIHZhciBfbWVyZ2UzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWVyZ2VfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHdhcm4gPyB3YXJuKHByb3BzVG9XYXJuLnZhbHVlcywgcHJvcHNUb1dhcm4pIDoge30sIGZpZWxkTGV2ZWxXYXJuID8gZmllbGRMZXZlbFdhcm4ocHJvcHNUb1dhcm4udmFsdWVzLCBwcm9wc1RvV2FybikgOiB7fSksXFxuICAgICAgICAgICAgICAgICAgICBfd2FybmluZyA9IF9tZXJnZTMuX3dhcm5pbmcsXFxuICAgICAgICAgICAgICAgICAgICBuZXh0U3luY1dhcm5pbmdzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9tZXJnZTMsIFsnX3dhcm5pbmcnXSk7XFxuXFxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEZpZWxkV2FybmVyS2V5cyA9IGZpZWxkV2FybmVyS2V5cztcXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTeW5jV2FybmluZ3NJZk5lZWRlZChuZXh0U3luY1dhcm5pbmdzLCBfd2FybmluZyk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxNb3VudCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XFxuICAgICAgICAgICAgdGhpcy5pbml0SWZOZWVkZWQoKTtcXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlSWZOZWVkZWQoKTtcXG4gICAgICAgICAgICB0aGlzLndhcm5JZk5lZWRlZCgpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICB0aGlzLmluaXRJZk5lZWRlZChuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJZk5lZWRlZChuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgIHRoaXMud2FybklmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy5jbGVhclN1Ym1pdFByb21pc2VJZk5lZWRlZChuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgIHRoaXMuc3VibWl0SWZOZWVkZWQobmV4dFByb3BzKTtcXG4gICAgICAgICAgICBpZiAobmV4dFByb3BzLm9uQ2hhbmdlKSB7XFxuICAgICAgICAgICAgICBpZiAoIWRlZXBFcXVhbChuZXh0UHJvcHMudmFsdWVzLCB0aGlzLnByb3BzLnZhbHVlcykpIHtcXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzLm9uQ2hhbmdlKG5leHRQcm9wcy52YWx1ZXMsIG5leHRQcm9wcy5kaXNwYXRjaCwgbmV4dFByb3BzKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXMzID0gdGhpcztcXG5cXG4gICAgICAgICAgICBpZiAoIXRoaXMucHJvcHMucHVyZSkgcmV0dXJuIHRydWU7XFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG5leHRQcm9wcykuc29tZShmdW5jdGlvbiAocHJvcCkge1xcbiAgICAgICAgICAgICAgLy8gdXNlZnVsIHRvIGRlYnVnIHJlcmVuZGVyc1xcbiAgICAgICAgICAgICAgLy8gaWYgKCFwbGFpbi5kZWVwRXF1YWwodGhpcy5wcm9wc1sgcHJvcCBdLCBuZXh0UHJvcHNbIHByb3AgXSkpIHtcXG4gICAgICAgICAgICAgIC8vICAgY29uc29sZS5pbmZvKHByb3AsICdjaGFuZ2VkJywgdGhpcy5wcm9wc1sgcHJvcCBdLCAnPT0+JywgbmV4dFByb3BzWyBwcm9wIF0pXFxuICAgICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczMucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczYgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBkZXN0cm95T25Vbm1vdW50ID0gX3Byb3BzNi5kZXN0cm95T25Vbm1vdW50LFxcbiAgICAgICAgICAgICAgICBkZXN0cm95ID0gX3Byb3BzNi5kZXN0cm95O1xcblxcbiAgICAgICAgICAgIGlmIChkZXN0cm95T25Vbm1vdW50KSB7XFxuICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XFxuICAgICAgICAgICAgICBkZXN0cm95KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldFZhbHVlcycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZXMoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudmFsdWVzO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2lzVmFsaWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNWYWxpZCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWxpZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdpc1ByaXN0aW5lJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzUHJpc3RpbmUoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMucHJpc3RpbmU7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAncmVnaXN0ZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVnaXN0ZXIobmFtZSwgdHlwZSwgZ2V0VmFsaWRhdG9yLCBnZXRXYXJuZXIpIHtcXG4gICAgICAgICAgICB0aGlzLnByb3BzLnJlZ2lzdGVyRmllbGQobmFtZSwgdHlwZSk7XFxuICAgICAgICAgICAgaWYgKGdldFZhbGlkYXRvcikge1xcbiAgICAgICAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRvcnNbbmFtZV0gPSBnZXRWYWxpZGF0b3I7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChnZXRXYXJuZXIpIHtcXG4gICAgICAgICAgICAgIHRoaXMuZmllbGRXYXJuZXJzW25hbWVdID0gZ2V0V2FybmVyO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd1bnJlZ2lzdGVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVucmVnaXN0ZXIobmFtZSkge1xcbiAgICAgICAgICAgIGlmICghdGhpcy5kZXN0cm95ZWQpIHtcXG4gICAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLmRlc3Ryb3lPblVubW91bnQgfHwgdGhpcy5wcm9wcy5mb3JjZVVucmVnaXN0ZXJPblVubW91bnQpIHtcXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy51bnJlZ2lzdGVyRmllbGQobmFtZSk7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZpZWxkVmFsaWRhdG9yc1tuYW1lXTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZmllbGRXYXJuZXJzW25hbWVdO1xcbiAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy51bnJlZ2lzdGVyRmllbGQobmFtZSwgZmFsc2UpO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdnZXRGaWVsZExpc3QnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RmllbGRMaXN0KG9wdGlvbnMpIHtcXG4gICAgICAgICAgICB2YXIgcmVnaXN0ZXJlZEZpZWxkcyA9IHRoaXMucHJvcHMucmVnaXN0ZXJlZEZpZWxkcztcXG4gICAgICAgICAgICB2YXIgbGlzdCA9IFtdO1xcbiAgICAgICAgICAgIGlmICghcmVnaXN0ZXJlZEZpZWxkcykge1xcbiAgICAgICAgICAgICAgcmV0dXJuIGxpc3Q7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBrZXlTZXEgPSBrZXlzKHJlZ2lzdGVyZWRGaWVsZHMpO1xcbiAgICAgICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXhjbHVkZUZpZWxkQXJyYXkpIHtcXG4gICAgICAgICAgICAgIGtleVNlcSA9IGtleVNlcS5maWx0ZXIoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldEluKHJlZ2lzdGVyZWRGaWVsZHMsICdbXFxcXCcnICsgbmFtZSArICdcXFxcJ10udHlwZScpICE9PSAnRmllbGRBcnJheSc7XFxuICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGZyb21KUyhrZXlTZXEucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xcbiAgICAgICAgICAgICAgYWNjLnB1c2goa2V5KTtcXG4gICAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgICAgfSwgbGlzdCkpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldFZhbGlkYXRvcnMnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsaWRhdG9ycygpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM0ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgdmFsaWRhdG9ycyA9IHt9O1xcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGRWYWxpZGF0b3JzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgICAgICB2YXIgdmFsaWRhdG9yID0gX3RoaXM0LmZpZWxkVmFsaWRhdG9yc1tuYW1lXSgpO1xcbiAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvcikge1xcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JzW25hbWVdID0gdmFsaWRhdG9yO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0b3JzO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dlbmVyYXRlVmFsaWRhdG9yJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdlbmVyYXRlVmFsaWRhdG9yKCkge1xcbiAgICAgICAgICAgIHZhciB2YWxpZGF0b3JzID0gdGhpcy5nZXRWYWxpZGF0b3JzKCk7XFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbGlkYXRvcnMpLmxlbmd0aCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19nZW5lcmF0ZVZhbGlkYXRvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsaWRhdG9ycywgc3RydWN0dXJlKSA6IHVuZGVmaW5lZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdnZXRXYXJuZXJzJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFdhcm5lcnMoKSB7XFxuICAgICAgICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XFxuXFxuICAgICAgICAgICAgdmFyIHdhcm5lcnMgPSB7fTtcXG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZpZWxkV2FybmVycykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgICAgdmFyIHdhcm5lciA9IF90aGlzNS5maWVsZFdhcm5lcnNbbmFtZV0oKTtcXG4gICAgICAgICAgICAgIGlmICh3YXJuZXIpIHtcXG4gICAgICAgICAgICAgICAgd2FybmVyc1tuYW1lXSA9IHdhcm5lcjtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm4gd2FybmVycztcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdnZW5lcmF0ZVdhcm5lcicsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZW5lcmF0ZVdhcm5lcigpIHtcXG4gICAgICAgICAgICB2YXIgd2FybmVycyA9IHRoaXMuZ2V0V2FybmVycygpO1xcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh3YXJuZXJzKS5sZW5ndGggPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fZ2VuZXJhdGVWYWxpZGF0b3JfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHdhcm5lcnMsIHN0cnVjdHVyZSkgOiB1bmRlZmluZWQ7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnYXN5bmNWYWxpZGF0ZScsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc3luY1ZhbGlkYXRlKG5hbWUsIHZhbHVlKSB7XFxuICAgICAgICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XFxuXFxuICAgICAgICAgICAgdmFyIF9wcm9wczcgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBhc3luY0JsdXJGaWVsZHMgPSBfcHJvcHM3LmFzeW5jQmx1ckZpZWxkcyxcXG4gICAgICAgICAgICAgICAgYXN5bmNFcnJvcnMgPSBfcHJvcHM3LmFzeW5jRXJyb3JzLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRlID0gX3Byb3BzNy5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wczcuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxpemVkID0gX3Byb3BzNy5pbml0aWFsaXplZCxcXG4gICAgICAgICAgICAgICAgcHJpc3RpbmUgPSBfcHJvcHM3LnByaXN0aW5lLFxcbiAgICAgICAgICAgICAgICBzaG91bGRBc3luY1ZhbGlkYXRlID0gX3Byb3BzNy5zaG91bGRBc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICBzdGFydEFzeW5jVmFsaWRhdGlvbiA9IF9wcm9wczcuc3RhcnRBc3luY1ZhbGlkYXRpb24sXFxuICAgICAgICAgICAgICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM3LnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHM3LnN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHZhbHVlcyA9IF9wcm9wczcudmFsdWVzO1xcblxcbiAgICAgICAgICAgIHZhciBzdWJtaXR0aW5nID0gIW5hbWU7XFxuICAgICAgICAgICAgaWYgKGFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgICAgIHZhciB2YWx1ZXNUb1ZhbGlkYXRlID0gc3VibWl0dGluZyA/IHZhbHVlcyA6IHNldEluKHZhbHVlcywgbmFtZSwgdmFsdWUpO1xcbiAgICAgICAgICAgICAgdmFyIHN5bmNWYWxpZGF0aW9uUGFzc2VzID0gc3VibWl0dGluZyB8fCAhZ2V0SW4oc3luY0Vycm9ycywgbmFtZSk7XFxuICAgICAgICAgICAgICB2YXIgaXNCbHVycmVkRmllbGQgPSAhc3VibWl0dGluZyAmJiAoIWFzeW5jQmx1ckZpZWxkcyB8fCB+YXN5bmNCbHVyRmllbGRzLmluZGV4T2YobmFtZS5yZXBsYWNlKC9cXFxcW1swLTldK1xcXFxdL2csICdbXScpKSk7XFxuICAgICAgICAgICAgICBpZiAoKGlzQmx1cnJlZEZpZWxkIHx8IHN1Ym1pdHRpbmcpICYmIHNob3VsZEFzeW5jVmFsaWRhdGUoe1xcbiAgICAgICAgICAgICAgICBhc3luY0Vycm9yczogYXN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxpemVkOiBpbml0aWFsaXplZCxcXG4gICAgICAgICAgICAgICAgdHJpZ2dlcjogc3VibWl0dGluZyA/ICdzdWJtaXQnIDogJ2JsdXInLFxcbiAgICAgICAgICAgICAgICBibHVycmVkRmllbGQ6IG5hbWUsXFxuICAgICAgICAgICAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICAgICAgICAgICAgc3luY1ZhbGlkYXRpb25QYXNzZXM6IHN5bmNWYWxpZGF0aW9uUGFzc2VzXFxuICAgICAgICAgICAgICB9KSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX2FzeW5jVmFsaWRhdGlvbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhc3luY1ZhbGlkYXRlKHZhbHVlc1RvVmFsaWRhdGUsIGRpc3BhdGNoLCBfdGhpczYucHJvcHMsIG5hbWUpO1xcbiAgICAgICAgICAgICAgICB9LCBzdGFydEFzeW5jVmFsaWRhdGlvbiwgc3RvcEFzeW5jVmFsaWRhdGlvbiwgbmFtZSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3N1Ym1pdENvbXBsZXRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzdWJtaXRDb21wbGV0ZWQocmVzdWx0KSB7XFxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3VibWl0UHJvbWlzZTtcXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3N1Ym1pdEZhaWxlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzdWJtaXRGYWlsZWQoZXJyb3IpIHtcXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5zdWJtaXRQcm9taXNlO1xcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2xpc3RlblRvU3VibWl0JyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGxpc3RlblRvU3VibWl0KHByb21pc2UpIHtcXG4gICAgICAgICAgICBpZiAoIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9pc19wcm9taXNlX19fZGVmYXVsdCgpKHByb21pc2UpKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdGhpcy5zdWJtaXRQcm9taXNlID0gcHJvbWlzZTtcXG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKHRoaXMuc3VibWl0Q29tcGxldGVkLCB0aGlzLnN1Ym1pdEZhaWxlZCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0JyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdChzdWJtaXRPckV2ZW50KSB7XFxuICAgICAgICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XFxuXFxuICAgICAgICAgICAgdmFyIF9wcm9wczggPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBvblN1Ym1pdCA9IF9wcm9wczgub25TdWJtaXQsXFxuICAgICAgICAgICAgICAgIGJsdXIgPSBfcHJvcHM4LmJsdXIsXFxuICAgICAgICAgICAgICAgIGNoYW5nZSA9IF9wcm9wczguY2hhbmdlLFxcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wczguZGlzcGF0Y2gsXFxuICAgICAgICAgICAgICAgIHZhbGlkRXhjZXB0U3VibWl0ID0gX3Byb3BzOC52YWxpZEV4Y2VwdFN1Ym1pdDtcXG5cXG5cXG4gICAgICAgICAgICBpZiAoIXN1Ym1pdE9yRXZlbnQgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2V2ZW50c19zaWxlbmNlRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN1Ym1pdE9yRXZlbnQpKSB7XFxuICAgICAgICAgICAgICAvLyBzdWJtaXRPckV2ZW50IGlzIGFuIGV2ZW50OiBmaXJlIHN1Ym1pdCBpZiBub3QgYWxyZWFkeSBzdWJtaXR0aW5nXFxuICAgICAgICAgICAgICBpZiAoIXRoaXMuc3VibWl0UHJvbWlzZSkge1xcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbm5lck9uU3VibWl0KSB7XFxuICAgICAgICAgICAgICAgICAgLy8gd2lsbCBjYWxsIFxcXCJzdWJtaXRPckV2ZW50IGlzIHRoZSBzdWJtaXQgZnVuY3Rpb25cXFwiIGJsb2NrIGJlbG93XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXJPblN1Ym1pdCgpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RlblRvU3VibWl0KE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX2hhbmRsZVN1Ym1pdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY2hlY2tTdWJtaXQob25TdWJtaXQpLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKSh7IGJsdXI6IGJsdXIsIGNoYW5nZTogY2hhbmdlIH0sIGRpc3BhdGNoKSksIHZhbGlkRXhjZXB0U3VibWl0LCB0aGlzLmFzeW5jVmFsaWRhdGUsIHRoaXMuZ2V0RmllbGRMaXN0KHsgZXhjbHVkZUZpZWxkQXJyYXk6IHRydWUgfSkpKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAvLyBzdWJtaXRPckV2ZW50IGlzIHRoZSBzdWJtaXQgZnVuY3Rpb246IHJldHVybiBkZWZlcnJlZCBzdWJtaXQgdGh1bmtcXG4gICAgICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fZXZlbnRzX3NpbGVuY2VFdmVudHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICFfdGhpczcuc3VibWl0UHJvbWlzZSAmJiBfdGhpczcubGlzdGVuVG9TdWJtaXQoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjaGVja1N1Ym1pdChzdWJtaXRPckV2ZW50KSwgX2V4dGVuZHMoe30sIF90aGlzNy5wcm9wcywgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKSh7IGJsdXI6IGJsdXIsIGNoYW5nZTogY2hhbmdlIH0sIGRpc3BhdGNoKSksIHZhbGlkRXhjZXB0U3VibWl0LCBfdGhpczcuYXN5bmNWYWxpZGF0ZSwgX3RoaXM3LmdldEZpZWxkTGlzdCh7IGV4Y2x1ZGVGaWVsZEFycmF5OiB0cnVlIH0pKSk7XFxuICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAncmVzZXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXQoKSB7XFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5yZXNldCgpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3JlbmRlcicsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICAgICAgLy8gcmVtb3ZlIHNvbWUgcmVkdXgtZm9ybSBjb25maWctb25seSBwcm9wc1xcbiAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXFxuICAgICAgICAgICAgdmFyIF9wcm9wczkgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBhbnlUb3VjaGVkID0gX3Byb3BzOS5hbnlUb3VjaGVkLFxcbiAgICAgICAgICAgICAgICBhcnJheUluc2VydCA9IF9wcm9wczkuYXJyYXlJbnNlcnQsXFxuICAgICAgICAgICAgICAgIGFycmF5TW92ZSA9IF9wcm9wczkuYXJyYXlNb3ZlLFxcbiAgICAgICAgICAgICAgICBhcnJheVBvcCA9IF9wcm9wczkuYXJyYXlQb3AsXFxuICAgICAgICAgICAgICAgIGFycmF5UHVzaCA9IF9wcm9wczkuYXJyYXlQdXNoLFxcbiAgICAgICAgICAgICAgICBhcnJheVJlbW92ZSA9IF9wcm9wczkuYXJyYXlSZW1vdmUsXFxuICAgICAgICAgICAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3Byb3BzOS5hcnJheVJlbW92ZUFsbCxcXG4gICAgICAgICAgICAgICAgYXJyYXlTaGlmdCA9IF9wcm9wczkuYXJyYXlTaGlmdCxcXG4gICAgICAgICAgICAgICAgYXJyYXlTcGxpY2UgPSBfcHJvcHM5LmFycmF5U3BsaWNlLFxcbiAgICAgICAgICAgICAgICBhcnJheVN3YXAgPSBfcHJvcHM5LmFycmF5U3dhcCxcXG4gICAgICAgICAgICAgICAgYXJyYXlVbnNoaWZ0ID0gX3Byb3BzOS5hcnJheVVuc2hpZnQsXFxuICAgICAgICAgICAgICAgIGFzeW5jRXJyb3JzID0gX3Byb3BzOS5hc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0ZSA9IF9wcm9wczkuYXN5bmNWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0aW5nID0gX3Byb3BzOS5hc3luY1ZhbGlkYXRpbmcsXFxuICAgICAgICAgICAgICAgIGJsdXIgPSBfcHJvcHM5LmJsdXIsXFxuICAgICAgICAgICAgICAgIGNoYW5nZSA9IF9wcm9wczkuY2hhbmdlLFxcbiAgICAgICAgICAgICAgICBkZXN0cm95ID0gX3Byb3BzOS5kZXN0cm95LFxcbiAgICAgICAgICAgICAgICBkZXN0cm95T25Vbm1vdW50ID0gX3Byb3BzOS5kZXN0cm95T25Vbm1vdW50LFxcbiAgICAgICAgICAgICAgICBmb3JjZVVucmVnaXN0ZXJPblVubW91bnQgPSBfcHJvcHM5LmZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCxcXG4gICAgICAgICAgICAgICAgZGlydHkgPSBfcHJvcHM5LmRpcnR5LFxcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wczkuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgICAgIGVuYWJsZVJlaW5pdGlhbGl6ZSA9IF9wcm9wczkuZW5hYmxlUmVpbml0aWFsaXplLFxcbiAgICAgICAgICAgICAgICBlcnJvciA9IF9wcm9wczkuZXJyb3IsXFxuICAgICAgICAgICAgICAgIGZvY3VzID0gX3Byb3BzOS5mb2N1cyxcXG4gICAgICAgICAgICAgICAgZm9ybSA9IF9wcm9wczkuZm9ybSxcXG4gICAgICAgICAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX3Byb3BzOS5nZXRGb3JtU3RhdGUsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxpemUgPSBfcHJvcHM5LmluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxpemVkID0gX3Byb3BzOS5pbml0aWFsaXplZCxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlcyA9IF9wcm9wczkuaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICAgICAgaW52YWxpZCA9IF9wcm9wczkuaW52YWxpZCxcXG4gICAgICAgICAgICAgICAga2VlcERpcnR5T25SZWluaXRpYWxpemUgPSBfcHJvcHM5LmtlZXBEaXJ0eU9uUmVpbml0aWFsaXplLFxcbiAgICAgICAgICAgICAgICBwcmlzdGluZSA9IF9wcm9wczkucHJpc3RpbmUsXFxuICAgICAgICAgICAgICAgIHByb3BOYW1lc3BhY2UgPSBfcHJvcHM5LnByb3BOYW1lc3BhY2UsXFxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRGaWVsZHMgPSBfcHJvcHM5LnJlZ2lzdGVyZWRGaWVsZHMsXFxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyRmllbGQgPSBfcHJvcHM5LnJlZ2lzdGVyRmllbGQsXFxuICAgICAgICAgICAgICAgIHJlc2V0ID0gX3Byb3BzOS5yZXNldCxcXG4gICAgICAgICAgICAgICAgc2V0U3VibWl0RmFpbGVkID0gX3Byb3BzOS5zZXRTdWJtaXRGYWlsZWQsXFxuICAgICAgICAgICAgICAgIHNldFN1Ym1pdFN1Y2NlZWRlZCA9IF9wcm9wczkuc2V0U3VibWl0U3VjY2VlZGVkLFxcbiAgICAgICAgICAgICAgICBzaG91bGRBc3luY1ZhbGlkYXRlID0gX3Byb3BzOS5zaG91bGRBc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICBzaG91bGRWYWxpZGF0ZSA9IF9wcm9wczkuc2hvdWxkVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHN0YXJ0QXN5bmNWYWxpZGF0aW9uID0gX3Byb3BzOS5zdGFydEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3RhcnRTdWJtaXQgPSBfcHJvcHM5LnN0YXJ0U3VibWl0LFxcbiAgICAgICAgICAgICAgICBzdG9wQXN5bmNWYWxpZGF0aW9uID0gX3Byb3BzOS5zdG9wQXN5bmNWYWxpZGF0aW9uLFxcbiAgICAgICAgICAgICAgICBzdG9wU3VibWl0ID0gX3Byb3BzOS5zdG9wU3VibWl0LFxcbiAgICAgICAgICAgICAgICBzdWJtaXR0aW5nID0gX3Byb3BzOS5zdWJtaXR0aW5nLFxcbiAgICAgICAgICAgICAgICBzdWJtaXRGYWlsZWQgPSBfcHJvcHM5LnN1Ym1pdEZhaWxlZCxcXG4gICAgICAgICAgICAgICAgc3VibWl0U3VjY2VlZGVkID0gX3Byb3BzOS5zdWJtaXRTdWNjZWVkZWQsXFxuICAgICAgICAgICAgICAgIHRvdWNoID0gX3Byb3BzOS50b3VjaCxcXG4gICAgICAgICAgICAgICAgdG91Y2hPbkJsdXIgPSBfcHJvcHM5LnRvdWNoT25CbHVyLFxcbiAgICAgICAgICAgICAgICB0b3VjaE9uQ2hhbmdlID0gX3Byb3BzOS50b3VjaE9uQ2hhbmdlLFxcbiAgICAgICAgICAgICAgICBwZXJzaXN0ZW50U3VibWl0RXJyb3JzID0gX3Byb3BzOS5wZXJzaXN0ZW50U3VibWl0RXJyb3JzLFxcbiAgICAgICAgICAgICAgICBzeW5jRXJyb3JzID0gX3Byb3BzOS5zeW5jRXJyb3JzLFxcbiAgICAgICAgICAgICAgICBzeW5jV2FybmluZ3MgPSBfcHJvcHM5LnN5bmNXYXJuaW5ncyxcXG4gICAgICAgICAgICAgICAgdW5yZWdpc3RlckZpZWxkID0gX3Byb3BzOS51bnJlZ2lzdGVyRmllbGQsXFxuICAgICAgICAgICAgICAgIHVudG91Y2ggPSBfcHJvcHM5LnVudG91Y2gsXFxuICAgICAgICAgICAgICAgIHVwZGF0ZVN5bmNFcnJvcnMgPSBfcHJvcHM5LnVwZGF0ZVN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHVwZGF0ZVN5bmNXYXJuaW5ncyA9IF9wcm9wczkudXBkYXRlU3luY1dhcm5pbmdzLFxcbiAgICAgICAgICAgICAgICB2YWxpZCA9IF9wcm9wczkudmFsaWQsXFxuICAgICAgICAgICAgICAgIHZhbGlkRXhjZXB0U3VibWl0ID0gX3Byb3BzOS52YWxpZEV4Y2VwdFN1Ym1pdCxcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzOS52YWx1ZXMsXFxuICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBfcHJvcHM5Lndhcm5pbmcsXFxuICAgICAgICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzOSwgWydhbnlUb3VjaGVkJywgJ2FycmF5SW5zZXJ0JywgJ2FycmF5TW92ZScsICdhcnJheVBvcCcsICdhcnJheVB1c2gnLCAnYXJyYXlSZW1vdmUnLCAnYXJyYXlSZW1vdmVBbGwnLCAnYXJyYXlTaGlmdCcsICdhcnJheVNwbGljZScsICdhcnJheVN3YXAnLCAnYXJyYXlVbnNoaWZ0JywgJ2FzeW5jRXJyb3JzJywgJ2FzeW5jVmFsaWRhdGUnLCAnYXN5bmNWYWxpZGF0aW5nJywgJ2JsdXInLCAnY2hhbmdlJywgJ2Rlc3Ryb3knLCAnZGVzdHJveU9uVW5tb3VudCcsICdmb3JjZVVucmVnaXN0ZXJPblVubW91bnQnLCAnZGlydHknLCAnZGlzcGF0Y2gnLCAnZW5hYmxlUmVpbml0aWFsaXplJywgJ2Vycm9yJywgJ2ZvY3VzJywgJ2Zvcm0nLCAnZ2V0Rm9ybVN0YXRlJywgJ2luaXRpYWxpemUnLCAnaW5pdGlhbGl6ZWQnLCAnaW5pdGlhbFZhbHVlcycsICdpbnZhbGlkJywgJ2tlZXBEaXJ0eU9uUmVpbml0aWFsaXplJywgJ3ByaXN0aW5lJywgJ3Byb3BOYW1lc3BhY2UnLCAncmVnaXN0ZXJlZEZpZWxkcycsICdyZWdpc3RlckZpZWxkJywgJ3Jlc2V0JywgJ3NldFN1Ym1pdEZhaWxlZCcsICdzZXRTdWJtaXRTdWNjZWVkZWQnLCAnc2hvdWxkQXN5bmNWYWxpZGF0ZScsICdzaG91bGRWYWxpZGF0ZScsICdzdGFydEFzeW5jVmFsaWRhdGlvbicsICdzdGFydFN1Ym1pdCcsICdzdG9wQXN5bmNWYWxpZGF0aW9uJywgJ3N0b3BTdWJtaXQnLCAnc3VibWl0dGluZycsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0U3VjY2VlZGVkJywgJ3RvdWNoJywgJ3RvdWNoT25CbHVyJywgJ3RvdWNoT25DaGFuZ2UnLCAncGVyc2lzdGVudFN1Ym1pdEVycm9ycycsICdzeW5jRXJyb3JzJywgJ3N5bmNXYXJuaW5ncycsICd1bnJlZ2lzdGVyRmllbGQnLCAndW50b3VjaCcsICd1cGRhdGVTeW5jRXJyb3JzJywgJ3VwZGF0ZVN5bmNXYXJuaW5ncycsICd2YWxpZCcsICd2YWxpZEV4Y2VwdFN1Ym1pdCcsICd2YWx1ZXMnLCAnd2FybmluZyddKTtcXG4gICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXFxuXFxuXFxuICAgICAgICAgICAgdmFyIHJlZHV4Rm9ybVByb3BzID0gX2V4dGVuZHMoe1xcbiAgICAgICAgICAgICAgYW55VG91Y2hlZDogYW55VG91Y2hlZCxcXG4gICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGU6IHRoaXMuYXN5bmNWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGluZzogYXN5bmNWYWxpZGF0aW5nXFxuICAgICAgICAgICAgfSwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKSh7IGJsdXI6IGJsdXIsIGNoYW5nZTogY2hhbmdlIH0sIGRpc3BhdGNoKSwge1xcbiAgICAgICAgICAgICAgZGVzdHJveTogZGVzdHJveSxcXG4gICAgICAgICAgICAgIGRpcnR5OiBkaXJ0eSxcXG4gICAgICAgICAgICAgIGRpc3BhdGNoOiBkaXNwYXRjaCxcXG4gICAgICAgICAgICAgIGVycm9yOiBlcnJvcixcXG4gICAgICAgICAgICAgIGZvcm06IGZvcm0sXFxuICAgICAgICAgICAgICBoYW5kbGVTdWJtaXQ6IHRoaXMuc3VibWl0LFxcbiAgICAgICAgICAgICAgaW5pdGlhbGl6ZTogaW5pdGlhbGl6ZSxcXG4gICAgICAgICAgICAgIGluaXRpYWxpemVkOiBpbml0aWFsaXplZCxcXG4gICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXM6IGluaXRpYWxWYWx1ZXMsXFxuICAgICAgICAgICAgICBpbnZhbGlkOiBpbnZhbGlkLFxcbiAgICAgICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICAgICAgcmVzZXQ6IHJlc2V0LFxcbiAgICAgICAgICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICAgICAgICAgIHN1Ym1pdEZhaWxlZDogc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICAgICAgc3VibWl0U3VjY2VlZGVkOiBzdWJtaXRTdWNjZWVkZWQsXFxuICAgICAgICAgICAgICB0b3VjaDogdG91Y2gsXFxuICAgICAgICAgICAgICB1bnRvdWNoOiB1bnRvdWNoLFxcbiAgICAgICAgICAgICAgdmFsaWQ6IHZhbGlkLFxcbiAgICAgICAgICAgICAgd2FybmluZzogd2FybmluZ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHZhciBwcm9wc1RvUGFzcyA9IF9leHRlbmRzKHt9LCBwcm9wTmFtZXNwYWNlID8gX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wTmFtZXNwYWNlLCByZWR1eEZvcm1Qcm9wcykgOiByZWR1eEZvcm1Qcm9wcywgcmVzdCk7XFxuICAgICAgICAgICAgaWYgKGlzQ2xhc3NDb21wb25lbnQoV3JhcHBlZENvbXBvbmVudCkpIHtcXG4gICAgICAgICAgICAgIHByb3BzVG9QYXNzLnJlZiA9ICd3cmFwcGVkJztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShXcmFwcGVkQ29tcG9uZW50LCBwcm9wc1RvUGFzcyk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1dKTtcXG5cXG4gICAgICAgIHJldHVybiBGb3JtO1xcbiAgICAgIH0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG4gICAgICBGb3JtLmRpc3BsYXlOYW1lID0gJ0Zvcm0oJyArIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX3V0aWxfZ2V0RGlzcGxheU5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKFdyYXBwZWRDb21wb25lbnQpICsgJyknO1xcbiAgICAgIEZvcm0uV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XFxuICAgICAgRm9ybS5jaGlsZENvbnRleHRUeXBlcyA9IHtcXG4gICAgICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QuaXNSZXF1aXJlZFxcbiAgICAgIH07XFxuICAgICAgRm9ybS5wcm9wVHlwZXMgPSB7XFxuICAgICAgICBkZXN0cm95T25Vbm1vdW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIGZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICBmb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nLmlzUmVxdWlyZWQsXFxuICAgICAgICBpbml0aWFsVmFsdWVzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgICAgIG9uU3VibWl0RmFpbDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICBvblN1Ym1pdFN1Y2Nlc3M6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgcHJvcE5hbWVTcGFjZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZyxcXG4gICAgICAgIHZhbGlkYXRlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgICAgIHdhcm46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgdG91Y2hPbkJsdXI6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgdG91Y2hPbkNoYW5nZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICB0cmlnZ2VyU3VibWl0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgcmVnaXN0ZXJlZEZpZWxkczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmFueVxcbiAgICAgIH07XFxuXFxuICAgICAgdmFyIGNvbm5lY3RvciA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfcmVhY3RfcmVkdXhfX1tcXFwiYVxcXCIgLyogY29ubmVjdCAqL10pKGZ1bmN0aW9uIChzdGF0ZSwgcHJvcHMpIHtcXG4gICAgICAgIHZhciBmb3JtID0gcHJvcHMuZm9ybSxcXG4gICAgICAgICAgICBnZXRGb3JtU3RhdGUgPSBwcm9wcy5nZXRGb3JtU3RhdGUsXFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlcyA9IHByb3BzLmluaXRpYWxWYWx1ZXMsXFxuICAgICAgICAgICAgZW5hYmxlUmVpbml0aWFsaXplID0gcHJvcHMuZW5hYmxlUmVpbml0aWFsaXplLFxcbiAgICAgICAgICAgIGtlZXBEaXJ0eU9uUmVpbml0aWFsaXplID0gcHJvcHMua2VlcERpcnR5T25SZWluaXRpYWxpemU7XFxuXFxuICAgICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSB8fCBlbXB0eSwgZm9ybSkgfHwgZW1wdHk7XFxuICAgICAgICB2YXIgc3RhdGVJbml0aWFsID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbCcpO1xcbiAgICAgICAgdmFyIGluaXRpYWxpemVkID0gISFzdGF0ZUluaXRpYWw7XFxuXFxuICAgICAgICB2YXIgc2hvdWxkVXBkYXRlSW5pdGlhbFZhbHVlcyA9IGVuYWJsZVJlaW5pdGlhbGl6ZSAmJiBpbml0aWFsaXplZCAmJiAhZGVlcEVxdWFsKGluaXRpYWxWYWx1ZXMsIHN0YXRlSW5pdGlhbCk7XFxuICAgICAgICB2YXIgc2hvdWxkUmVzZXRWYWx1ZXMgPSBzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzICYmICFrZWVwRGlydHlPblJlaW5pdGlhbGl6ZTtcXG5cXG4gICAgICAgIHZhciBpbml0aWFsID0gaW5pdGlhbFZhbHVlcyB8fCBzdGF0ZUluaXRpYWwgfHwgZW1wdHk7XFxuXFxuICAgICAgICBpZiAoc2hvdWxkVXBkYXRlSW5pdGlhbFZhbHVlcykge1xcbiAgICAgICAgICBpbml0aWFsID0gc3RhdGVJbml0aWFsIHx8IGVtcHR5O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIHZhbHVlcyA9IGdldEluKGZvcm1TdGF0ZSwgJ3ZhbHVlcycpIHx8IGluaXRpYWw7XFxuXFxuICAgICAgICBpZiAoc2hvdWxkUmVzZXRWYWx1ZXMpIHtcXG4gICAgICAgICAgdmFsdWVzID0gaW5pdGlhbDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHZhciBwcmlzdGluZSA9IHNob3VsZFJlc2V0VmFsdWVzIHx8IGRlZXBFcXVhbChpbml0aWFsLCB2YWx1ZXMpO1xcbiAgICAgICAgdmFyIGFzeW5jRXJyb3JzID0gZ2V0SW4oZm9ybVN0YXRlLCAnYXN5bmNFcnJvcnMnKTtcXG4gICAgICAgIHZhciBzeW5jRXJyb3JzID0gZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpIHx8IHt9O1xcbiAgICAgICAgdmFyIHN5bmNXYXJuaW5ncyA9IGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNXYXJuaW5ncycpIHx8IHt9O1xcbiAgICAgICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihmb3JtU3RhdGUsICdyZWdpc3RlcmVkRmllbGRzJyk7XFxuICAgICAgICB2YXIgdmFsaWQgPSBpc1ZhbGlkKGZvcm0sIGdldEZvcm1TdGF0ZSwgZmFsc2UpKHN0YXRlKTtcXG4gICAgICAgIHZhciB2YWxpZEV4Y2VwdFN1Ym1pdCA9IGlzVmFsaWQoZm9ybSwgZ2V0Rm9ybVN0YXRlLCB0cnVlKShzdGF0ZSk7XFxuICAgICAgICB2YXIgYW55VG91Y2hlZCA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnYW55VG91Y2hlZCcpO1xcbiAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSAhIWdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgICAgIHZhciBzdWJtaXRGYWlsZWQgPSAhIWdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEZhaWxlZCcpO1xcbiAgICAgICAgdmFyIHN1Ym1pdFN1Y2NlZWRlZCA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgICAgICB2YXIgZXJyb3IgPSBnZXRJbihmb3JtU3RhdGUsICdlcnJvcicpO1xcbiAgICAgICAgdmFyIHdhcm5pbmcgPSBnZXRJbihmb3JtU3RhdGUsICd3YXJuaW5nJyk7XFxuICAgICAgICB2YXIgdHJpZ2dlclN1Ym1pdCA9IGdldEluKGZvcm1TdGF0ZSwgJ3RyaWdnZXJTdWJtaXQnKTtcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgIGFueVRvdWNoZWQ6IGFueVRvdWNoZWQsXFxuICAgICAgICAgIGFzeW5jRXJyb3JzOiBhc3luY0Vycm9ycyxcXG4gICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY1ZhbGlkYXRpbmcnKSB8fCBmYWxzZSxcXG4gICAgICAgICAgZGlydHk6ICFwcmlzdGluZSxcXG4gICAgICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgICAgICBpbml0aWFsaXplZDogaW5pdGlhbGl6ZWQsXFxuICAgICAgICAgIGludmFsaWQ6ICF2YWxpZCxcXG4gICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICByZWdpc3RlcmVkRmllbGRzOiByZWdpc3RlcmVkRmllbGRzLFxcbiAgICAgICAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxcbiAgICAgICAgICBzdWJtaXRGYWlsZWQ6IHN1Ym1pdEZhaWxlZCxcXG4gICAgICAgICAgc3VibWl0U3VjY2VlZGVkOiBzdWJtaXRTdWNjZWVkZWQsXFxuICAgICAgICAgIHN5bmNFcnJvcnM6IHN5bmNFcnJvcnMsXFxuICAgICAgICAgIHN5bmNXYXJuaW5nczogc3luY1dhcm5pbmdzLFxcbiAgICAgICAgICB0cmlnZ2VyU3VibWl0OiB0cmlnZ2VyU3VibWl0LFxcbiAgICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcXG4gICAgICAgICAgdmFsaWQ6IHZhbGlkLFxcbiAgICAgICAgICB2YWxpZEV4Y2VwdFN1Ym1pdDogdmFsaWRFeGNlcHRTdWJtaXQsXFxuICAgICAgICAgIHdhcm5pbmc6IHdhcm5pbmdcXG4gICAgICAgIH07XFxuICAgICAgfSwgZnVuY3Rpb24gKGRpc3BhdGNoLCBpbml0aWFsUHJvcHMpIHtcXG4gICAgICAgIHZhciBiaW5kRm9ybSA9IGZ1bmN0aW9uIGJpbmRGb3JtKGFjdGlvbkNyZWF0b3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGFjdGlvbkNyZWF0b3IuYmluZChudWxsLCBpbml0aWFsUHJvcHMuZm9ybSk7XFxuICAgICAgICB9O1xcblxcbiAgICAgICAgLy8gQmluZCB0aGUgZmlyc3QgcGFyYW1ldGVyIG9uIGBwcm9wcy5mb3JtYFxcbiAgICAgICAgdmFyIGJvdW5kRm9ybUFDcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfbG9kYXNoX2VzX21hcFZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZm9ybUFjdGlvbnMsIGJpbmRGb3JtKTtcXG4gICAgICAgIHZhciBib3VuZEFycmF5QUNzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShhcnJheUFjdGlvbnMsIGJpbmRGb3JtKTtcXG4gICAgICAgIHZhciBib3VuZEJsdXIgPSBmdW5jdGlvbiBib3VuZEJsdXIoZmllbGQsIHZhbHVlKSB7XFxuICAgICAgICAgIHJldHVybiBibHVyKGluaXRpYWxQcm9wcy5mb3JtLCBmaWVsZCwgdmFsdWUsICEhaW5pdGlhbFByb3BzLnRvdWNoT25CbHVyKTtcXG4gICAgICAgIH07XFxuICAgICAgICB2YXIgYm91bmRDaGFuZ2UgPSBmdW5jdGlvbiBib3VuZENoYW5nZShmaWVsZCwgdmFsdWUpIHtcXG4gICAgICAgICAgcmV0dXJuIGNoYW5nZShpbml0aWFsUHJvcHMuZm9ybSwgZmllbGQsIHZhbHVlLCAhIWluaXRpYWxQcm9wcy50b3VjaE9uQ2hhbmdlLCAhIWluaXRpYWxQcm9wcy5wZXJzaXN0ZW50U3VibWl0RXJyb3JzKTtcXG4gICAgICAgIH07XFxuICAgICAgICB2YXIgYm91bmRGb2N1cyA9IGJpbmRGb3JtKGZvY3VzKTtcXG5cXG4gICAgICAgIC8vIFdyYXAgYWN0aW9uIGNyZWF0b3JzIHdpdGggYGRpc3BhdGNoYFxcbiAgICAgICAgdmFyIGNvbm5lY3RlZEZvcm1BQ3MgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kRm9ybUFDcywgZGlzcGF0Y2gpO1xcbiAgICAgICAgdmFyIGNvbm5lY3RlZEFycmF5QUNzID0ge1xcbiAgICAgICAgICBpbnNlcnQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheUluc2VydCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICBtb3ZlOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlNb3ZlLCBkaXNwYXRjaCksXFxuICAgICAgICAgIHBvcDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5UG9wLCBkaXNwYXRjaCksXFxuICAgICAgICAgIHB1c2g6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVB1c2gsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcmVtb3ZlOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlSZW1vdmUsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcmVtb3ZlQWxsOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlSZW1vdmVBbGwsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc2hpZnQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVNoaWZ0LCBkaXNwYXRjaCksXFxuICAgICAgICAgIHNwbGljZTogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U3BsaWNlLCBkaXNwYXRjaCksXFxuICAgICAgICAgIHN3YXA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVN3YXAsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgdW5zaGlmdDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5VW5zaGlmdCwgZGlzcGF0Y2gpXFxuICAgICAgICB9O1xcblxcbiAgICAgICAgdmFyIGNvbXB1dGVkQWN0aW9ucyA9IF9leHRlbmRzKHt9LCBjb25uZWN0ZWRGb3JtQUNzLCBib3VuZEFycmF5QUNzLCB7XFxuICAgICAgICAgIGJsdXI6IGJvdW5kQmx1cixcXG4gICAgICAgICAgY2hhbmdlOiBib3VuZENoYW5nZSxcXG4gICAgICAgICAgYXJyYXk6IGNvbm5lY3RlZEFycmF5QUNzLFxcbiAgICAgICAgICBmb2N1czogYm91bmRGb2N1cyxcXG4gICAgICAgICAgZGlzcGF0Y2g6IGRpc3BhdGNoXFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgIHJldHVybiBjb21wdXRlZEFjdGlvbnM7XFxuICAgICAgICB9O1xcbiAgICAgIH0sIHVuZGVmaW5lZCwgeyB3aXRoUmVmOiB0cnVlIH0pO1xcbiAgICAgIHZhciBDb25uZWN0ZWRGb3JtID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX19fZGVmYXVsdCgpKGNvbm5lY3RvcihGb3JtKSwgV3JhcHBlZENvbXBvbmVudCk7XFxuICAgICAgQ29ubmVjdGVkRm9ybS5kZWZhdWx0UHJvcHMgPSBjb25maWc7XFxuXFxuICAgICAgLy8gYnVpbGQgb3V0ZXIgY29tcG9uZW50IHRvIGV4cG9zZSBpbnN0YW5jZSBhcGlcXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKF9Db21wb25lbnQyKSB7XFxuICAgICAgICBfaW5oZXJpdHMoUmVkdXhGb3JtLCBfQ29tcG9uZW50Mik7XFxuXFxuICAgICAgICBmdW5jdGlvbiBSZWR1eEZvcm0oKSB7XFxuICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWR1eEZvcm0pO1xcblxcbiAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFJlZHV4Rm9ybS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKFJlZHV4Rm9ybSkpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgX2NyZWF0ZUNsYXNzKFJlZHV4Rm9ybSwgW3tcXG4gICAgICAgICAga2V5OiAnc3VibWl0JyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuc3VibWl0KCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAncmVzZXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLnJlc2V0KCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzMTAgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gX3Byb3BzMTAuaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMxMCwgWydpbml0aWFsVmFsdWVzJ10pO1xcblxcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRm9ybSwgX2V4dGVuZHMoe30sIHJlc3QsIHtcXG4gICAgICAgICAgICAgIHJlZjogJ3dyYXBwZWQnLFxcbiAgICAgICAgICAgICAgLy8gY29udmVydCBpbml0aWFsVmFsdWVzIGlmIG5lZWQgdG9cXG4gICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXM6IGZyb21KUyhpbml0aWFsVmFsdWVzKVxcbiAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd2YWxpZCcsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnMud3JhcHBlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5pc1ZhbGlkKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnaW52YWxpZCcsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy52YWxpZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnMud3JhcHBlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5pc1ByaXN0aW5lKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZGlydHknLFxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMucHJpc3RpbmU7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAndmFsdWVzJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlcygpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2ZpZWxkTGlzdCcsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIC8vIG1haW5seSBwcm92aWRlZCBmb3IgdGVzdGluZ1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnMud3JhcHBlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRGaWVsZExpc3QoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd3cmFwcGVkSW5zdGFuY2UnLFxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgICAgICAvLyBmb3IgdGVzdGluZVxcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnMud3JhcHBlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5yZWZzLndyYXBwZWQ7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1dKTtcXG5cXG4gICAgICAgIHJldHVybiBSZWR1eEZvcm07XFxuICAgICAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZVJlZHV4Rm9ybSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMTIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlTWVyZ2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19jcmVhdGVBc3NpZ25lcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDcpO1xcblxcblxcblxcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBtZXJnZXMgb3duIGFuZFxcbiAqIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIGludG8gdGhlXFxuICogZGVzdGluYXRpb24gb2JqZWN0LiBTb3VyY2UgcHJvcGVydGllcyB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAgYXJlXFxuICogc2tpcHBlZCBpZiBhIGRlc3RpbmF0aW9uIHZhbHVlIGV4aXN0cy4gQXJyYXkgYW5kIHBsYWluIG9iamVjdCBwcm9wZXJ0aWVzXFxuICogYXJlIG1lcmdlZCByZWN1cnNpdmVseS4gT3RoZXIgb2JqZWN0cyBhbmQgdmFsdWUgdHlwZXMgYXJlIG92ZXJyaWRkZW4gYnlcXG4gKiBhc3NpZ25tZW50LiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuIFN1YnNlcXVlbnRcXG4gKiBzb3VyY2VzIG92ZXJ3cml0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyBzb3VyY2VzLlxcbiAqXFxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC41LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxcbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSB7XFxuICogICAnYSc6IFt7ICdiJzogMiB9LCB7ICdkJzogNCB9XVxcbiAqIH07XFxuICpcXG4gKiB2YXIgb3RoZXIgPSB7XFxuICogICAnYSc6IFt7ICdjJzogMyB9LCB7ICdlJzogNSB9XVxcbiAqIH07XFxuICpcXG4gKiBfLm1lcmdlKG9iamVjdCwgb3RoZXIpO1xcbiAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IDIsICdjJzogMyB9LCB7ICdkJzogNCwgJ2UnOiA1IH1dIH1cXG4gKi9cXG52YXIgbWVyZ2UgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19jcmVhdGVBc3NpZ25lcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlTWVyZ2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCk7XFxufSk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWVyZ2UpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Fzc2lnbk1lcmdlVmFsdWVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Jhc2VGb3JfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2Jhc2VNZXJnZURlZXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19rZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3NhZmVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjEpO1xcblxcblxcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1lcmdlYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgbWVyZ2VkIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxcbiAqICBjb3VudGVycGFydHMuXFxuICovXFxuZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spIHtcXG4gIGlmIChvYmplY3QgPT09IHNvdXJjZSkge1xcbiAgICByZXR1cm47XFxuICB9XFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19iYXNlRm9yX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzb3VyY2UsIGZ1bmN0aW9uKHNyY1ZhbHVlLCBrZXkpIHtcXG4gICAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSkpIHtcXG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuICAgICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYmFzZU1lcmdlRGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIGJhc2VNZXJnZSwgY3VzdG9taXplciwgc3RhY2spO1xcbiAgICB9XFxuICAgIGVsc2Uge1xcbiAgICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcXG4gICAgICAgID8gY3VzdG9taXplcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19zYWZlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSksIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXFxuICAgICAgICA6IHVuZGVmaW5lZDtcXG5cXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgbmV3VmFsdWUgPSBzcmNWYWx1ZTtcXG4gICAgICB9XFxuICAgICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcXG4gICAgfVxcbiAgfSwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19rZXlzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlTWVyZ2UpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG5cXG5cXG4vKipcXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgU3RhY2tcXG4gKi9cXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0xpc3RDYWNoZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG4gIHRoaXMuc2l6ZSA9IDA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0YWNrQ2xlYXIpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBkZWxldGVcXG4gKiBAbWVtYmVyT2YgU3RhY2tcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XFxuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcXG5cXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0YWNrRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgZ2V0XFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0YWNrR2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcXG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdGFja0hhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTI3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fTWFwQ2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xcblxcblxcblxcblxcbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xcbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xcblxcbi8qKlxcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XFxuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XFxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSB7XFxuICAgIHZhciBwYWlycyA9IGRhdGEuX19kYXRhX187XFxuICAgIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19NYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcXG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcXG4gICAgICByZXR1cm4gdGhpcztcXG4gICAgfVxcbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX01hcENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKHBhaXJzKTtcXG4gIH1cXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0YWNrU2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XFxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHtcXG4gICAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxcbiAgICAgICAgcHJvcHMgPSBrZXlzRnVuYyhvYmplY3QpLFxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xcblxcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcXG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XFxuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xcbiAgICAgICAgYnJlYWs7XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBvYmplY3Q7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVCYXNlRm9yKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnbk1lcmdlVmFsdWVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Nsb25lQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY2xvbmVUeXBlZEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fY29weUFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pbml0Q2xvbmVPYmplY3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19pc0FycmF5TGlrZU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9faXNPYmplY3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX2lzUGxhaW5PYmplY3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19zYWZlR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fdG9QbGFpbk9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDEpO1xcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXFxuICogZGVlcCBtZXJnZXMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcXG4gKiByZWZlcmVuY2VzIHRvIGJlIG1lcmdlZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBtZXJnZS5cXG4gKiBAcGFyYW0ge251bWJlcn0gc3JjSW5kZXggVGhlIGluZGV4IG9mIGBzb3VyY2VgLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVyZ2UgdmFsdWVzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxcbiAqICBjb3VudGVycGFydHMuXFxuICovXFxuZnVuY3Rpb24gYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgbWVyZ2VGdW5jLCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgdmFyIG9ialZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5KSxcXG4gICAgICBzcmNWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19zYWZlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzb3VyY2UsIGtleSksXFxuICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XFxuXFxuICBpZiAoc3RhY2tlZCkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NpZ25NZXJnZVZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgc3RhY2tlZCk7XFxuICAgIHJldHVybjtcXG4gIH1cXG4gIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcXG4gICAgPyBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwgKGtleSArICcnKSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKVxcbiAgICA6IHVuZGVmaW5lZDtcXG5cXG4gIHZhciBpc0NvbW1vbiA9IG5ld1ZhbHVlID09PSB1bmRlZmluZWQ7XFxuXFxuICBpZiAoaXNDb21tb24pIHtcXG4gICAgdmFyIGlzQXJyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpLFxcbiAgICAgICAgaXNCdWZmID0gIWlzQXJyICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSksXFxuICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX2lzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpO1xcblxcbiAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xcbiAgICBpZiAoaXNBcnIgfHwgaXNCdWZmIHx8IGlzVHlwZWQpIHtcXG4gICAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IG9ialZhbHVlO1xcbiAgICAgIH1cXG4gICAgICBlbHNlIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19pc0FycmF5TGlrZU9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2NvcHlBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcXG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XFxuICAgICAgICBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Nsb25lQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgdHJ1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKGlzVHlwZWQpIHtcXG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XFxuICAgICAgICBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Nsb25lVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUsIHRydWUpO1xcbiAgICAgIH1cXG4gICAgICBlbHNlIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gW107XFxuICAgICAgfVxcbiAgICB9XFxuICAgIGVsc2UgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19pc1BsYWluT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSkge1xcbiAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XFxuICAgICAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzQXJndW1lbnRzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX3RvUGxhaW5PYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlKTtcXG4gICAgICB9XFxuICAgICAgZWxzZSBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19pc09iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX2lzRnVuY3Rpb25fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlKSkge1xcbiAgICAgICAgbmV3VmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pbml0Q2xvbmVPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgaWYgKGlzQ29tbW9uKSB7XFxuICAgIC8vIFJlY3Vyc2l2ZWx5IG1lcmdlIG9iamVjdHMgYW5kIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxcbiAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcXG4gICAgbWVyZ2VGdW5jKG5ld1ZhbHVlLCBzcmNWYWx1ZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcXG4gICAgc3RhY2tbJ2RlbGV0ZSddKHNyY1ZhbHVlKTtcXG4gIH1cXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnbk1lcmdlVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNZXJnZURlZXApO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEzMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKG1vZHVsZSkgey8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xcbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XFxuXFxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5CdWZmZXIgOiB1bmRlZmluZWQsXFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxcbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcXG4gIGlmIChpc0RlZXApIHtcXG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xcbiAgfVxcbiAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xcblxcbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNsb25lQnVmZmVyKTtcXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygyMikobW9kdWxlKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMTMxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jbG9uZUFycmF5QnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMik7XFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHR5cGVkIGFycmF5LlxcbiAqL1xcbmZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcXG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jbG9uZUFycmF5QnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcXG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjbG9uZVR5cGVkQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEzMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fVWludDhBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1OCk7XFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXFxuICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxcbiAqL1xcbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcXG4gIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XFxuICBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19VaW50OEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKHJlc3VsdCkuc2V0KG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10oYXJyYXlCdWZmZXIpKTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNsb25lQXJyYXlCdWZmZXIpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEzMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUNyZWF0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFByb3RvdHlwZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNQcm90b3R5cGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxcbiAqL1xcbmZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3QpIHtcXG4gIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc1Byb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSlcXG4gICAgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQ3JlYXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpXFxuICAgIDoge307XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGluaXRDbG9uZU9iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTM0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXFxuICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxcbiAqL1xcbnZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cXG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xcbiAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwcm90bykpIHtcXG4gICAgICByZXR1cm4ge307XFxuICAgIH1cXG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xcbiAgICB9XFxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcXG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XFxuICAgIG9iamVjdC5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9O1xcbn0oKSk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUNyZWF0ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTM1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgPT0gYXJnc1RhZztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUlzQXJndW1lbnRzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxcbiAqIGlzIGFuIG9iamVjdC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXktbGlrZSBvYmplY3QsXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheUxpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcnJheUxpa2VPYmplY3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEzNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMTMuMFxcbiAqIEBjYXRlZ29yeSBVdGlsXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XFxuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cXG4gKi9cXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XFxuICByZXR1cm4gZmFsc2U7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0dWJGYWxzZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzTGVuZ3RoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc09iamVjdExpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcXG5cXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XFxuXFxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xcbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cXG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cXG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcXG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cXG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cXG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XFxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmXFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzTGVuZ3RoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpXTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUlzVHlwZWRBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTM5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcXG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlVW5hcnkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKG1vZHVsZSkgey8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2ZyZWVHbG9iYWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTEpO1xcblxcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXFxudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xcblxcbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXFxudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXFxudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2ZyZWVHbG9iYWxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ucHJvY2VzcztcXG5cXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XFxuICB0cnkge1xcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XFxuXFxuICAgIGlmICh0eXBlcykge1xcbiAgICAgIHJldHVybiB0eXBlcztcXG4gICAgfVxcblxcbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxcbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XFxuICB9IGNhdGNoIChlKSB7fVxcbn0oKSk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobm9kZVV0aWwpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxNDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcHlPYmplY3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19rZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjIpO1xcblxcblxcblxcbi8qKlxcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcXG4gKiBrZXllZCBwcm9wZXJ0aWVzIG9mIGB2YWx1ZWAgdG8gb3duIHByb3BlcnRpZXMgb2YgdGhlIHBsYWluIG9iamVjdC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAzLjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgcGxhaW4gb2JqZWN0LlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBGb28oKSB7XFxuICogICB0aGlzLmIgPSAyO1xcbiAqIH1cXG4gKlxcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XFxuICpcXG4gKiBfLmFzc2lnbih7ICdhJzogMSB9LCBuZXcgRm9vKTtcXG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cXG4gKlxcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIF8udG9QbGFpbk9iamVjdChuZXcgRm9vKSk7XFxuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cXG4gKi9cXG5mdW5jdGlvbiB0b1BsYWluT2JqZWN0KHZhbHVlKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29weU9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAodG9QbGFpbk9iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NpZ25WYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxcbiAqL1xcbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XFxuICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XFxuXFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XFxuXFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xcblxcbiAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXFxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcXG4gICAgICA6IHVuZGVmaW5lZDtcXG5cXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcXG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xcbiAgICB9XFxuICAgIGlmIChpc05ldykge1xcbiAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NpZ25WYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIG9iamVjdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY29weU9iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQXNzaWduVmFsdWVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcblxcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcXG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXFxuICovXFxuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XFxuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcXG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2VxX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIHZhbHVlKTtcXG4gIH1cXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYXNzaWduVmFsdWUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XFxuXFxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcXG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VUaW1lcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc1Byb3RvdHlwZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbmF0aXZlS2V5c0luX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Nik7XFxuXFxuXFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KSB7XFxuICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19uYXRpdmVLZXlzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCk7XFxuICB9XFxuICB2YXIgaXNQcm90byA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzUHJvdG90eXBlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpLFxcbiAgICAgIHJlc3VsdCA9IFtdO1xcblxcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VLZXlzSW4pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXFxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxcbiAqIGV4Y2VwdCB0aGF0IGl0IGluY2x1ZGVzIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqL1xcbmZ1bmN0aW9uIG5hdGl2ZUtleXNJbihvYmplY3QpIHtcXG4gIHZhciByZXN1bHQgPSBbXTtcXG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xcbiAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChuYXRpdmVLZXlzSW4pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVJlc3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0l0ZXJhdGVlQ2FsbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTUpO1xcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVJlc3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xcbiAgICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxcbiAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDEgPyBzb3VyY2VzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkLFxcbiAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcXG5cXG4gICAgY3VzdG9taXplciA9IChhc3NpZ25lci5sZW5ndGggPiAzICYmIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicpXFxuICAgICAgPyAobGVuZ3RoLS0sIGN1c3RvbWl6ZXIpXFxuICAgICAgOiB1bmRlZmluZWQ7XFxuXFxuICAgIGlmIChndWFyZCAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0l0ZXJhdGVlQ2FsbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XFxuICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xcbiAgICAgIGxlbmd0aCA9IDE7XFxuICAgIH1cXG4gICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xcbiAgICAgIGlmIChzb3VyY2UpIHtcXG4gICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBvYmplY3Q7XFxuICB9KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQXNzaWduZXIpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faWRlbnRpdHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX292ZXJSZXN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc2V0VG9TdHJpbmdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUxKTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc2V0VG9TdHJpbmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX292ZXJSZXN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCBzdGFydCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pZGVudGl0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSksIGZ1bmMgKyAnJyk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VSZXN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwcGx5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1MCk7XFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xcbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcXG5cXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcXG4gIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcXG4gIHJldHVybiBmdW5jdGlvbigpIHtcXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXFxuICAgICAgICBpbmRleCA9IC0xLFxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xcblxcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XFxuICAgIH1cXG4gICAgaW5kZXggPSAtMTtcXG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XFxuICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcXG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XFxuICAgIH1cXG4gICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcHBseV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG92ZXJSZXN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXFxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXFxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cXG4gKi9cXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XFxuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XFxuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcXG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XFxuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcHBseSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTUxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlU2V0VG9TdHJpbmdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zaG9ydE91dF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTQpO1xcblxcblxcblxcbi8qKlxcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXFxuICovXFxudmFyIHNldFRvU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc2hvcnRPdXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVNldFRvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRUb1N0cmluZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTUyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb25zdGFudF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pZGVudGl0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxcbiAqL1xcbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faWRlbnRpdHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuYywgJ3RvU3RyaW5nJywge1xcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcXG4gICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcXG4gICAgJ3ZhbHVlJzogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29uc3RhbnRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cmluZyksXFxuICAgICd3cml0YWJsZSc6IHRydWVcXG4gIH0pO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVNldFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAyLjQuMFxcbiAqIEBjYXRlZ29yeSBVdGlsXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xcbiAqXFxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XFxuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXFxuICpcXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcXG4gKiAvLyA9PiB0cnVlXFxuICovXFxuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcXG4gIHJldHVybiBmdW5jdGlvbigpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY29uc3RhbnQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xcbnZhciBIT1RfQ09VTlQgPSA4MDAsXFxuICAgIEhPVF9TUEFOID0gMTY7XFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xcbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcXG4gKiBtaWxsaXNlY29uZHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XFxuICB2YXIgY291bnQgPSAwLFxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xcblxcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XFxuXFxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcXG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcXG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcXG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XFxuICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgIGNvdW50ID0gMDtcXG4gICAgfVxcbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzaG9ydE91dCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19lcV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FycmF5TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNJbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNPYmplY3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxcbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXFxuICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBvYmplY3QgYXJndW1lbnQuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XFxuICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciB0eXBlID0gdHlwZW9mIGluZGV4O1xcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcXG4gICAgICAgID8gKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzSW5kZXhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGluZGV4LCBvYmplY3QubGVuZ3RoKSlcXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxcbiAgICAgICkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcXG4gIH1cXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNJdGVyYXRlZUNhbGwpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUZvcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MCk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yT3duYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xcbiAgcmV0dXJuIG9iamVjdCAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlRm9yX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGl0ZXJhdGVlLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlRm9yT3duKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzUHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19uYXRpdmVLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1OCk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX25hdGl2ZUtleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCk7XFxuICB9XFxuICB2YXIgcmVzdWx0ID0gW107XFxuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcXG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XFxuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUtleXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fb3ZlckFyZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MCk7XFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xcbnZhciBuYXRpdmVLZXlzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fb3ZlckFyZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0LmtleXMsIE9iamVjdCk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobmF0aXZlS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlTWF0Y2hlc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VNYXRjaGVzUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pZGVudGl0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19wcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODkpO1xcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLml0ZXJhdGVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSBbdmFsdWU9Xy5pZGVudGl0eV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4gaXRlcmF0ZWUuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBpdGVyYXRlZS5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUpIHtcXG4gIC8vIERvbid0IHN0b3JlIHRoZSBgdHlwZW9mYCByZXN1bHQgaW4gYSB2YXJpYWJsZSB0byBhdm9pZCBhIEpJVCBidWcgaW4gU2FmYXJpIDkuXFxuICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjAzNCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XFxuICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbiAgfVxcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpXFxuICAgICAgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlTWF0Y2hlc1Byb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZVswXSwgdmFsdWVbMV0pXFxuICAgICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlTWF0Y2hlc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3Byb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJdGVyYXRlZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNNYXRjaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldE1hdGNoRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY3KTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKSB7XFxuICB2YXIgbWF0Y2hEYXRhID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0TWF0Y2hEYXRhX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzb3VyY2UpO1xcbiAgaWYgKG1hdGNoRGF0YS5sZW5ndGggPT0gMSAmJiBtYXRjaERhdGFbMF1bMl0pIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShtYXRjaERhdGFbMF1bMF0sIG1hdGNoRGF0YVswXVsxXSk7XFxuICB9XFxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XFxuICAgIHJldHVybiBvYmplY3QgPT09IHNvdXJjZSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNNYXRjaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlTWF0Y2hlcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cXG4gKiBAcGFyYW0ge0FycmF5fSBtYXRjaERhdGEgVGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIHRvIG1hdGNoLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xcbiAgdmFyIGluZGV4ID0gbWF0Y2hEYXRhLmxlbmd0aCxcXG4gICAgICBsZW5ndGggPSBpbmRleCxcXG4gICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcXG5cXG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xcbiAgICByZXR1cm4gIWxlbmd0aDtcXG4gIH1cXG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xcbiAgd2hpbGUgKGluZGV4LS0pIHtcXG4gICAgdmFyIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xcbiAgICBpZiAoKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKVxcbiAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxcbiAgICAgICAgICA6ICEoZGF0YVswXSBpbiBvYmplY3QpXFxuICAgICAgICApIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xcbiAgICB2YXIga2V5ID0gZGF0YVswXSxcXG4gICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXFxuICAgICAgICBzcmNWYWx1ZSA9IGRhdGFbMV07XFxuXFxuICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkge1xcbiAgICAgIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgdmFyIHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcXG4gICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xcbiAgICAgIH1cXG4gICAgICBpZiAoIShyZXN1bHQgPT09IHVuZGVmaW5lZFxcbiAgICAgICAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUlzRXF1YWxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHLCBjdXN0b21pemVyLCBzdGFjaylcXG4gICAgICAgICAgICA6IHJlc3VsdFxcbiAgICAgICAgICApKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuICByZXR1cm4gdHJ1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUlzTWF0Y2gpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2VxdWFsQXJyYXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcXVhbEJ5VGFnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXF1YWxPYmplY3RzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fZ2V0VGFnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0J1ZmZlcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19faXNUeXBlZEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXFxuICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xcbiAgdmFyIG9iaklzQXJyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSxcXG4gICAgICBvdGhJc0FyciA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyKSxcXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fZ2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpLFxcbiAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyKTtcXG5cXG4gIG9ialRhZyA9IG9ialRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb2JqVGFnO1xcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XFxuXFxuICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xcblxcbiAgaWYgKGlzU2FtZVRhZyAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0J1ZmZlcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSkge1xcbiAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlcikpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gICAgb2JqSXNBcnIgPSB0cnVlO1xcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xcbiAgfVxcbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcXG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSlcXG4gICAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2VxdWFsQXJyYXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxcbiAgICAgIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fZXF1YWxCeVRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcXG4gIH1cXG4gIGlmICghKGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRykpIHtcXG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xcblxcbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcXG4gICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xcblxcbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XFxuICAgIH1cXG4gIH1cXG4gIGlmICghaXNTYW1lVGFnKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19lcXVhbE9iamVjdHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNFcXVhbERlZXApO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3NldENhY2hlQWRkX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc2V0Q2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY1KTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBjb25zdHJ1Y3RvclxcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX01hcENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXFxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zZXRDYWNoZUFkZF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRDYWNoZUhhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChTZXRDYWNoZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKlxcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGFkZFxcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxcbiAqIEBhbGlhcyBwdXNoXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXFxuICovXFxuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcXG4gIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XFxuICByZXR1cm4gdGhpcztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2V0Q2FjaGVBZGQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBoYXNcXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2V0Q2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxcbiAqIHNob3J0aGFuZHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XFxuXFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gZmFsc2U7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5U29tZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcXG4gIHJldHVybiBjYWNoZS5oYXMoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19VaW50OEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19lcXVhbEFycmF5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fbWFwVG9BcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3NldFRvQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcXG5cXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XFxuXFxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXFxudmFyIHN5bWJvbFByb3RvID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5wcm90b3R5cGUgOiB1bmRlZmluZWQsXFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXFxuICpcXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXFxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xcbiAgc3dpdGNoICh0YWcpIHtcXG4gICAgY2FzZSBkYXRhVmlld1RhZzpcXG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XFxuICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICBvYmplY3QgPSBvYmplY3QuYnVmZmVyO1xcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xcblxcbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcXG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19VaW50OEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKG9iamVjdCksIG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ob3RoZXIpKSkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gdHJ1ZTtcXG5cXG4gICAgY2FzZSBib29sVGFnOlxcbiAgICBjYXNlIGRhdGVUYWc6XFxuICAgIGNhc2UgbnVtYmVyVGFnOlxcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXFxuICAgICAgLy8gSW52YWxpZCBkYXRlcyBhcmUgY29lcmNlZCB0byBgTmFOYC5cXG4gICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCtvYmplY3QsICtvdGhlcik7XFxuXFxuICAgIGNhc2UgZXJyb3JUYWc6XFxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcXG5cXG4gICAgY2FzZSByZWdleHBUYWc6XFxuICAgIGNhc2Ugc3RyaW5nVGFnOlxcbiAgICAgIC8vIENvZXJjZSByZWdleGVzIHRvIHN0cmluZ3MgYW5kIHRyZWF0IHN0cmluZ3MsIHByaW1pdGl2ZXMgYW5kIG9iamVjdHMsXFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXFxuICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7XFxuXFxuICAgIGNhc2UgbWFwVGFnOlxcbiAgICAgIHZhciBjb252ZXJ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBUb0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbiAgICBjYXNlIHNldFRhZzpcXG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xcbiAgICAgIGNvbnZlcnQgfHwgKGNvbnZlcnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3NldFRvQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICB9XFxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxcbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XFxuICAgICAgaWYgKHN0YWNrZWQpIHtcXG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xcbiAgICAgIH1cXG4gICAgICBiaXRtYXNrIHw9IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUc7XFxuXFxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xcbiAgICAgIHZhciByZXN1bHQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19lcXVhbEFycmF5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XFxuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XFxuICAgICAgcmV0dXJuIHJlc3VsdDtcXG5cXG4gICAgY2FzZSBzeW1ib2xUYWc6XFxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcXG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xcbiAgICAgIH1cXG4gIH1cXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZXF1YWxCeVRhZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cXG4gKi9cXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xcblxcbiAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XFxuICB9KTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcFRvQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZXMuXFxuICovXFxuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcXG5cXG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XFxuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xcbiAgfSk7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRUb0FycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldEFsbEtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcyKTtcXG5cXG5cXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXFxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcXG4gICAgICBvYmpQcm9wcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldEFsbEtleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxcbiAgICAgIG90aFByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpLFxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcXG5cXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xcbiAgd2hpbGUgKGluZGV4LS0pIHtcXG4gICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcXG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG4gIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cXG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XFxuICBpZiAoc3RhY2tlZCAmJiBzdGFjay5nZXQob3RoZXIpKSB7XFxuICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xcbiAgfVxcbiAgdmFyIHJlc3VsdCA9IHRydWU7XFxuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XFxuICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XFxuXFxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XFxuICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XFxuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xcblxcbiAgICBpZiAoY3VzdG9taXplcikge1xcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xcbiAgICB9XFxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxcbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXFxuICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXFxuICAgICAgICAgIDogY29tcGFyZWRcXG4gICAgICAgICkpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XFxuICB9XFxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xcbiAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcXG5cXG4gICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXFxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxcbiAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXFxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XFxuICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGVxdWFsT2JqZWN0cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0QWxsS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFN5bWJvbHNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19rZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cXG4gKi9cXG5mdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRBbGxLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fa2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRTeW1ib2xzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0QWxsS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTczICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheVB1c2hfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xcbiAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSA/IHJlc3VsdCA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5UHVzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUdldEFsbEtleXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcXG4gIH1cXG4gIHJldHVybiBhcnJheTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYXJyYXlQdXNoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5RmlsdGVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3R1YkFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3Nyk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xcbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxcbiAqL1xcbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IGZ1bmN0aW9uKG9iamVjdCkge1xcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XFxuICAgIHJldHVybiBbXTtcXG4gIH1cXG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5RmlsdGVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XFxuICB9KTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFN5bWJvbHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXFxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxcbiAqL1xcbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxcbiAgICAgIHJlc0luZGV4ID0gMCxcXG4gICAgICByZXN1bHQgPSBbXTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcXG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheUZpbHRlcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMTMuMFxcbiAqIEBjYXRlZ29yeSBVdGlsXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcXG4gKlxcbiAqIGNvbnNvbGUubG9nKGFycmF5cyk7XFxuICogLy8gPT4gW1tdLCBbXV1cXG4gKlxcbiAqIGNvbnNvbGUubG9nKGFycmF5c1swXSA9PT0gYXJyYXlzWzFdKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIHN0dWJBcnJheSgpIHtcXG4gIHJldHVybiBbXTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3R1YkFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGFWaWV3X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Qcm9taXNlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fU2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fV2Vha01hcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTMpO1xcblxcblxcblxcblxcblxcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcXG5cXG52YXIgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xcblxcbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXFxudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGFWaWV3X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgbWFwQ3RvclN0cmluZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSksXFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fUHJvbWlzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSksXFxuICAgIHNldEN0b3JTdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19TZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qKlxcbiAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cXG4gKi9cXG52YXIgZ2V0VGFnID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cXG5pZiAoKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGFWaWV3X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxcbiAgICAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19NYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkgIT0gbWFwVGFnKSB8fFxcbiAgICAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Qcm9taXNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dICYmIGdldFRhZyhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxcbiAgICAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19TZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkgIT0gc2V0VGFnKSB8fFxcbiAgICAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19XZWFrTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dICYmIGdldFRhZyhuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19XZWFrTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSB3ZWFrTWFwVGFnKSkge1xcbiAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcXG4gICAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSxcXG4gICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShDdG9yKSA6ICcnO1xcblxcbiAgICBpZiAoY3RvclN0cmluZykge1xcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xcbiAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcXG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcXG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xcbiAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRUYWcpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xcbnZhciBEYXRhVmlldyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnRGF0YVZpZXcnKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChEYXRhVmlldyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTgwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIFByb21pc2UgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1Byb21pc2UnKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChQcm9taXNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cXG52YXIgU2V0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sICdTZXQnKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xcbnZhciBXZWFrTWFwID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sICdXZWFrTWFwJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoV2Vha01hcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTgzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDApO1xcblxcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBtYXRjaCBkYXRhIG9mIGBvYmplY3RgLlxcbiAqL1xcbmZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcXG4gIHZhciByZXN1bHQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19rZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpLFxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XFxuXFxuICB3aGlsZSAobGVuZ3RoLS0pIHtcXG4gICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxcbiAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XTtcXG5cXG4gICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSldO1xcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0TWF0Y2hEYXRhKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTg1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19oYXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b0tleV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXFxudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc1Byb3BlcnR5YCB3aGljaCBkb2Vzbid0IGNsb25lIGBzcmNWYWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNLZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9LZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpLCBzcmNWYWx1ZSk7XFxuICB9XFxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XFxuICAgIHZhciBvYmpWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBwYXRoKTtcXG4gICAgcmV0dXJuIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIG9ialZhbHVlID09PSBzcmNWYWx1ZSlcXG4gICAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc0luX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpXFxuICAgICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZU1hdGNoZXNQcm9wZXJ0eSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY4KTtcXG5cXG5cXG4vKipcXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuNy4wXFxuICogQGNhdGVnb3J5IE9iamVjdFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xcbiAqXFxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcXG4gKiAvLyA9PiAzXFxuICpcXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcXG4gKiAvLyA9PiAzXFxuICpcXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XFxuICogLy8gPT4gJ2RlZmF1bHQnXFxuICovXFxuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XFxuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUhhc0luX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faGFzUGF0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODgpO1xcblxcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG9mIGBvYmplY3RgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IE9iamVjdFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0ID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xcbiAqXFxuICogXy5oYXNJbihvYmplY3QsICdhJyk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5oYXNJbihvYmplY3QsICdhLmInKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgWydhJywgJ2InXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5oYXNJbihvYmplY3QsICdiJyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBoYXNJbihvYmplY3QsIHBhdGgpIHtcXG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19oYXNQYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUhhc0luX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzSW4pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcXG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBrZXkgaW4gT2JqZWN0KG9iamVjdCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VIYXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jYXN0UGF0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcmd1bWVudHNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNJbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNMZW5ndGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIHByb3BlcnRpZXMuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgaGFzRnVuYykge1xcbiAgcGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwYXRoLCBvYmplY3QpO1xcblxcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXFxuICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuXFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICB2YXIga2V5ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdG9LZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGhbaW5kZXhdKTtcXG4gICAgaWYgKCEocmVzdWx0ID0gb2JqZWN0ICE9IG51bGwgJiYgaGFzRnVuYyhvYmplY3QsIGtleSkpKSB7XFxuICAgICAgYnJlYWs7XFxuICAgIH1cXG4gICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XFxuICB9XFxuICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9XFxuICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xcbiAgcmV0dXJuICEhbGVuZ3RoICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzTGVuZ3RoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShsZW5ndGgpICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzSW5kZXhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGtleSwgbGVuZ3RoKSAmJlxcbiAgICAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FyZ3VtZW50c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc1BhdGgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVByb3BlcnR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVByb3BlcnR5RGVlcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX190b0tleV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDIuNC4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0cyA9IFtcXG4gKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXFxuICogICB7ICdhJzogeyAnYic6IDEgfSB9XFxuICogXTtcXG4gKlxcbiAqIF8ubWFwKG9iamVjdHMsIF8ucHJvcGVydHkoJ2EuYicpKTtcXG4gKiAvLyA9PiBbMiwgMV1cXG4gKlxcbiAqIF8ubWFwKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InXSkpLCAnYS5iJyk7XFxuICogLy8gPT4gWzEsIDJdXFxuICovXFxuZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwYXRoKSA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9LZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpKSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VQcm9wZXJ0eURlZXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChwcm9wZXJ0eSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eWAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlUHJvcGVydHkoa2V5KSB7XFxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XFxuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVByb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjgpO1xcblxcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBwYXRoKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VQcm9wZXJ0eURlZXApO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE5MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vISBJbmMuXFxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxcbiAqL1xcblxcblxcbnZhciBSRUFDVF9TVEFUSUNTID0ge1xcbiAgICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcXG4gICAgY29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBkZWZhdWx0UHJvcHM6IHRydWUsXFxuICAgIGRpc3BsYXlOYW1lOiB0cnVlLFxcbiAgICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXFxuICAgIG1peGluczogdHJ1ZSxcXG4gICAgcHJvcFR5cGVzOiB0cnVlLFxcbiAgICB0eXBlOiB0cnVlXFxufTtcXG5cXG52YXIgS05PV05fU1RBVElDUyA9IHtcXG4gICAgbmFtZTogdHJ1ZSxcXG4gICAgbGVuZ3RoOiB0cnVlLFxcbiAgICBwcm90b3R5cGU6IHRydWUsXFxuICAgIGNhbGxlcjogdHJ1ZSxcXG4gICAgYXJndW1lbnRzOiB0cnVlLFxcbiAgICBhcml0eTogdHJ1ZVxcbn07XFxuXFxudmFyIGlzR2V0T3duUHJvcGVydHlTeW1ib2xzQXZhaWxhYmxlID0gdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09ICdmdW5jdGlvbic7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgY3VzdG9tU3RhdGljcykge1xcbiAgICBpZiAodHlwZW9mIHNvdXJjZUNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHsgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcXG5cXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXFxuICAgICAgICBpZiAoaXNHZXRPd25Qcm9wZXJ0eVN5bWJvbHNBdmFpbGFibGUpIHtcXG4gICAgICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xcbiAgICAgICAgICAgIGlmICghUkVBQ1RfU1RBVElDU1trZXlzW2ldXSAmJiAhS05PV05fU1RBVElDU1trZXlzW2ldXSAmJiAoIWN1c3RvbVN0YXRpY3MgfHwgIWN1c3RvbVN0YXRpY3Nba2V5c1tpXV0pKSB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRDb21wb25lbnRba2V5c1tpXV0gPSBzb3VyY2VDb21wb25lbnRba2V5c1tpXV07XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XFxuXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE5MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgY3JlYXRlUHJvdmlkZXIgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3Byb3BfdHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3Byb3BfdHlwZXNfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdXRpbHNfUHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcbnZhciBkaWRXYXJuQWJvdXRSZWNlaXZpbmdTdG9yZSA9IGZhbHNlO1xcbmZ1bmN0aW9uIHdhcm5BYm91dFJlY2VpdmluZ1N0b3JlKCkge1xcbiAgaWYgKGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG4gIGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlID0gdHJ1ZTtcXG5cXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCc8UHJvdmlkZXI+IGRvZXMgbm90IHN1cHBvcnQgY2hhbmdpbmcgYHN0b3JlYCBvbiB0aGUgZmx5LiAnICsgJ0l0IGlzIG1vc3QgbGlrZWx5IHRoYXQgeW91IHNlZSB0aGlzIGVycm9yIGJlY2F1c2UgeW91IHVwZGF0ZWQgdG8gJyArICdSZWR1eCAyLnggYW5kIFJlYWN0IFJlZHV4IDIueCB3aGljaCBubyBsb25nZXIgaG90IHJlbG9hZCByZWR1Y2VycyAnICsgJ2F1dG9tYXRpY2FsbHkuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC1yZWR1eC9yZWxlYXNlcy8nICsgJ3RhZy92Mi4wLjAgZm9yIHRoZSBtaWdyYXRpb24gaW5zdHJ1Y3Rpb25zLicpO1xcbn1cXG5cXG5mdW5jdGlvbiBjcmVhdGVQcm92aWRlcigpIHtcXG4gIHZhciBfUHJvdmlkZXIkY2hpbGRDb250ZXg7XFxuXFxuICB2YXIgc3RvcmVLZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdzdG9yZSc7XFxuICB2YXIgc3ViS2V5ID0gYXJndW1lbnRzWzFdO1xcblxcbiAgdmFyIHN1YnNjcmlwdGlvbktleSA9IHN1YktleSB8fCBzdG9yZUtleSArICdTdWJzY3JpcHRpb24nO1xcblxcbiAgdmFyIFByb3ZpZGVyID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKFByb3ZpZGVyLCBfQ29tcG9uZW50KTtcXG5cXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLmdldENoaWxkQ29udGV4dCA9IGZ1bmN0aW9uIGdldENoaWxkQ29udGV4dCgpIHtcXG4gICAgICB2YXIgX3JlZjtcXG5cXG4gICAgICByZXR1cm4gX3JlZiA9IHt9LCBfcmVmW3N0b3JlS2V5XSA9IHRoaXNbc3RvcmVLZXldLCBfcmVmW3N1YnNjcmlwdGlvbktleV0gPSBudWxsLCBfcmVmO1xcbiAgICB9O1xcblxcbiAgICBmdW5jdGlvbiBQcm92aWRlcihwcm9wcywgY29udGV4dCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQcm92aWRlcik7XFxuXFxuICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0NvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSk7XFxuXFxuICAgICAgX3RoaXNbc3RvcmVLZXldID0gcHJvcHMuc3RvcmU7XFxuICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuXFxuICAgIFByb3ZpZGVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDaGlsZHJlblxcXCJdLm9ubHkodGhpcy5wcm9wcy5jaGlsZHJlbik7XFxuICAgIH07XFxuXFxuICAgIHJldHVybiBQcm92aWRlcjtcXG4gIH0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIFByb3ZpZGVyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gKG5leHRQcm9wcykge1xcbiAgICAgIGlmICh0aGlzW3N0b3JlS2V5XSAhPT0gbmV4dFByb3BzLnN0b3JlKSB7XFxuICAgICAgICB3YXJuQWJvdXRSZWNlaXZpbmdTdG9yZSgpO1xcbiAgICAgIH1cXG4gICAgfTtcXG4gIH1cXG5cXG4gIFByb3ZpZGVyLnByb3BUeXBlcyA9IHtcXG4gICAgc3RvcmU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImFcXFwiIC8qIHN0b3JlU2hhcGUgKi9dLmlzUmVxdWlyZWQsXFxuICAgIGNoaWxkcmVuOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5lbGVtZW50LmlzUmVxdWlyZWRcXG4gIH07XFxuICBQcm92aWRlci5jaGlsZENvbnRleHRUeXBlcyA9IChfUHJvdmlkZXIkY2hpbGRDb250ZXggPSB7fSwgX1Byb3ZpZGVyJGNoaWxkQ29udGV4W3N0b3JlS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImFcXFwiIC8qIHN0b3JlU2hhcGUgKi9dLmlzUmVxdWlyZWQsIF9Qcm92aWRlciRjaGlsZENvbnRleFtzdWJzY3JpcHRpb25LZXldID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYlxcXCIgLyogc3Vic2NyaXB0aW9uU2hhcGUgKi9dLCBfUHJvdmlkZXIkY2hpbGRDb250ZXgpO1xcblxcbiAgcmV0dXJuIFByb3ZpZGVyO1xcbn1cXG5cXG4vKiB1bnVzZWQgaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgX3VudXNlZF93ZWJwYWNrX2RlZmF1bHRfZXhwb3J0ID0gKGNyZWF0ZVByb3ZpZGVyKCkpO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxOTQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihwcm9jZXNzKSB7LyoqXFxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXFxuICpcXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXFxuICovXFxuXFxuXFxuXFxudmFyIGFzc2lnbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTk1KTtcXG5cXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcXG52YXIgY2hlY2tQcm9wVHlwZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5Nik7XFxuXFxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XFxuXFxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XFxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxcbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcXG4gICAgfSBjYXRjaCAoeCkge31cXG4gIH07XFxufVxcblxcbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwoKSB7XFxuICByZXR1cm4gbnVsbDtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xcbiAgdmFyIElURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXFxuXFxuICAvKipcXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cXG4gICAqXFxuICAgKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDpcXG4gICAqXFxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xcbiAgICogICAgIGlmIChpdGVyYXRvckZuKSB7XFxuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XFxuICAgKiAgICAgICAuLi5cXG4gICAqICAgICB9XFxuICAgKlxcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXFxuICAgKiBAcmV0dXJuIHs/ZnVuY3Rpb259XFxuICAgKi9cXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xcbiAgICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pO1xcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcXG4gICAgfVxcbiAgfVxcblxcbiAgLyoqXFxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcXG4gICAqXFxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XFxuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XFxuICAgKiAgICAgcHJvcFR5cGVzOiB7XFxuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcXFwiZGVzY3JpcHRpb25cXFwiLlxcbiAgICogICAgICAgZGVzY3JpcHRpb246IFByb3BzLnN0cmluZyxcXG4gICAqXFxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcXFwiY2F0ZWdvcnlcXFwiLlxcbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxcbiAgICpcXG4gICAqICAgICAgIC8vIEEgcHJvcCBuYW1lZCBcXFwiZGlhbG9nXFxcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcXG4gICAqICAgICB9LFxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XFxuICAgKiAgIH0pO1xcbiAgICpcXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcXG4gICAqXFxuICAgKiAgIHR5cGUgOj0gYXJyYXl8Ym9vbHxmdW5jfG9iamVjdHxudW1iZXJ8c3RyaW5nfG9uZU9mKFsuLi5dKXxpbnN0YW5jZU9mKC4uLilcXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xcbiAgICpcXG4gICAqIEVhY2ggYW5kIGV2ZXJ5IGRlY2xhcmF0aW9uIHByb2R1Y2VzIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUuIFRoaXNcXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcXG4gICAqXFxuICAgKiAgdmFyIE15TGluayA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcXG4gICAqICAgIHByb3BUeXBlczoge1xcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXFxcImhyZWZcXFwiLlxcbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcXG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICogICAgICAgIGlmIChwcm9wVmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgcHJvcFZhbHVlICE9PSAnc3RyaW5nJyAmJlxcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcXG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXFxuICAgKiAgICAgICAgICAgICdFeHBlY3RlZCBhIHN0cmluZyBvciBhbiBVUkkgZm9yICcgKyBwcm9wTmFtZSArICcgaW4gJyArXFxuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcXG4gICAqICAgICAgICAgICk7XFxuICAgKiAgICAgICAgfVxcbiAgICogICAgICB9XFxuICAgKiAgICB9LFxcbiAgICogICAgcmVuZGVyOiBmdW5jdGlvbigpIHsuLi59XFxuICAgKiAgfSk7XFxuICAgKlxcbiAgICogQGludGVybmFsXFxuICAgKi9cXG5cXG4gIHZhciBBTk9OWU1PVVMgPSAnPDxhbm9ueW1vdXM+Pic7XFxuXFxuICAvLyBJbXBvcnRhbnQhXFxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qc2AuXFxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XFxuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcXG4gICAgYm9vbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Jvb2xlYW4nKSxcXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxcbiAgICBvYmplY3Q6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdvYmplY3QnKSxcXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxcblxcbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcXG4gICAgZWxlbWVudDogY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCksXFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXFxuICAgIG5vZGU6IGNyZWF0ZU5vZGVDaGVja2VyKCksXFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxcbiAgICBvbmVPZlR5cGU6IGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIsXFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcXG4gIH07XFxuXFxuICAvKipcXG4gICAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25cXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xcbiAgICovXFxuICAvKmVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSovXFxuICBmdW5jdGlvbiBpcyh4LCB5KSB7XFxuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cXG4gICAgaWYgKHggPT09IHkpIHtcXG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxcbiAgICAgIHJldHVybiB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxcbiAgICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XFxuICAgIH1cXG4gIH1cXG4gIC8qZXNsaW50LWVuYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xcblxcbiAgLyoqXFxuICAgKiBXZSB1c2UgYW4gRXJyb3ItbGlrZSBvYmplY3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgcGVvcGxlIG1heSBjYWxsXFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxcbiAgICogaXMgcHJvaGliaXRpdmVseSBleHBlbnNpdmUgaWYgdGhleSBhcmUgY3JlYXRlZCB0b28gb2Z0ZW4sIHN1Y2ggYXMgd2hhdFxcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxcbiAgICovXFxuICBmdW5jdGlvbiBQcm9wVHlwZUVycm9yKG1lc3NhZ2UpIHtcXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcXG4gICAgdGhpcy5zdGFjayA9ICcnO1xcbiAgfVxcbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxcbiAgUHJvcFR5cGVFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9O1xcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XFxuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xcbiAgICAgIHByb3BGdWxsTmFtZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcXG5cXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xcbiAgICAgICAgaWYgKHRocm93T25EaXJlY3RBY2Nlc3MpIHtcXG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXFxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXFxuICAgICAgICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xcbiAgICAgICAgICApO1xcbiAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcXG4gICAgICAgICAgdGhyb3cgZXJyO1xcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xcbiAgICAgICAgICBpZiAoXFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50IDwgM1xcbiAgICAgICAgICApIHtcXG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXFxuICAgICAgICAgICAgICAnWW91IGFyZSBtYW51YWxseSBjYWxsaW5nIGEgUmVhY3QuUHJvcFR5cGVzIHZhbGlkYXRpb24gJyArXFxuICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJyArIHByb3BGdWxsTmFtZSArICdgIHByb3Agb24gYCcgKyBjb21wb25lbnROYW1lICArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXFxuICAgICAgICAgICAgICAnYW5kIHdpbGwgdGhyb3cgaW4gdGhlIHN0YW5kYWxvbmUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXFxuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xcbiAgICAgICAgICAgICk7XFxuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcXG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBudWxsO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XFxuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xcblxcbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xcbiAgICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnXFxuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cXG4gICAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7XFxuXFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSk7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBudWxsO1xcbiAgICB9XFxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpIHtcXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XFxuICAgICAgfVxcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBhcnJheS4nKSk7XFxuICAgICAgfVxcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnWycgKyBpICsgJ10nLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBudWxsO1xcbiAgICB9XFxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XFxuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcXG4gICAgICAgIHZhciBhY3R1YWxDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUocHJvcHNbcHJvcE5hbWVdKTtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhwZWN0ZWRWYWx1ZXMpKSB7XFxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XFxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBpZiAoaXMocHJvcFZhbHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHtcXG4gICAgICAgICAgcmV0dXJuIG51bGw7XFxuICAgICAgICB9XFxuICAgICAgfVxcblxcbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcyk7XFxuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIHByb3BWYWx1ZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xcbiAgICB9XFxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIG9iamVjdE9mLicpO1xcbiAgICAgIH1cXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcXG4gICAgICB9XFxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xcbiAgICAgICAgaWYgKHByb3BWYWx1ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XFxuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBudWxsO1xcbiAgICB9XFxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVVbmlvblR5cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMpIHtcXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7XFxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xcbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xcbiAgICB9XFxuXFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcXG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXFxuICAgICAgICApO1xcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xcbiAgICAgICAgaWYgKGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBSZWFjdFByb3BUeXBlc1NlY3JldCkgPT0gbnVsbCkge1xcbiAgICAgICAgICByZXR1cm4gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuXFxuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nKSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBudWxsO1xcbiAgICB9XFxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcXG4gICAgICB9XFxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcXG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XFxuICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xcbiAgICAgICAgaWYgKGVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0cmljdFNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xcbiAgICAgIH1cXG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbVxcbiAgICAgIC8vIHByb3BzLlxcbiAgICAgIHZhciBhbGxLZXlzID0gYXNzaWduKHt9LCBwcm9wc1twcm9wTmFtZV0sIHNoYXBlVHlwZXMpO1xcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XFxuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcXG4gICAgICAgIGlmICghY2hlY2tlcikge1xcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xcbiAgICAgICAgICAgICdcXFxcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcXG4gICAgICAgICAgICAnXFxcXG5WYWxpZCBrZXlzOiAnICsgIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxcbiAgICAgICAgICApO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xcbiAgICAgICAgaWYgKGVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcXG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XFxuICAgICAgY2FzZSAnbnVtYmVyJzpcXG4gICAgICBjYXNlICdzdHJpbmcnOlxcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICBjYXNlICdib29sZWFuJzpcXG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xcbiAgICAgIGNhc2UgJ29iamVjdCc6XFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XFxuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xcbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcXG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XFxuICAgICAgICAgIHZhciBzdGVwO1xcbiAgICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gcHJvcFZhbHVlLmVudHJpZXMpIHtcXG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XFxuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcXG4gICAgICAgICAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XFxuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcXG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuXFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICBkZWZhdWx0OlxcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9XFxuICB9XFxuXFxuICBmdW5jdGlvbiBpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSB7XFxuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXFxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcXG4gICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgfVxcblxcbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xcbiAgICBpZiAocHJvcFZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7XFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIH1cXG5cXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxcbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcXG4gICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuXFxuICAvLyBFcXVpdmFsZW50IG9mIGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuXFxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcXG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xcbiAgICAgIHJldHVybiAnYXJyYXknO1xcbiAgICB9XFxuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcXG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXFxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXFxuICAgICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuXFxuICAgICAgcmV0dXJuICdvYmplY3QnO1xcbiAgICB9XFxuICAgIGlmIChpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSkge1xcbiAgICAgIHJldHVybiAnc3ltYm9sJztcXG4gICAgfVxcbiAgICByZXR1cm4gcHJvcFR5cGU7XFxuICB9XFxuXFxuICAvLyBUaGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMuXFxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xcbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XFxuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xcbiAgICB9XFxuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcXG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xcbiAgICAgICAgcmV0dXJuICdkYXRlJztcXG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcHJvcFR5cGU7XFxuICB9XFxuXFxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXFxuICAvLyBGb3IgZXhhbXBsZSwgXFxcInVuZGVmaW5lZFxcXCIgb3IgXFxcIm9mIHR5cGUgYXJyYXlcXFwiXFxuICBmdW5jdGlvbiBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcodmFsdWUpIHtcXG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XFxuICAgIHN3aXRjaCAodHlwZSkge1xcbiAgICAgIGNhc2UgJ2FycmF5JzpcXG4gICAgICBjYXNlICdvYmplY3QnOlxcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcXG4gICAgICBjYXNlICdib29sZWFuJzpcXG4gICAgICBjYXNlICdkYXRlJzpcXG4gICAgICBjYXNlICdyZWdleHAnOlxcbiAgICAgICAgcmV0dXJuICdhICcgKyB0eXBlO1xcbiAgICAgIGRlZmF1bHQ6XFxuICAgICAgICByZXR1cm4gdHlwZTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLy8gUmV0dXJucyBjbGFzcyBuYW1lIG9mIHRoZSBvYmplY3QsIGlmIGFueS5cXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcXG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XFxuICAgICAgcmV0dXJuIEFOT05ZTU9VUztcXG4gICAgfVxcbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XFxuICB9XFxuXFxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XFxuXFxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XFxufTtcXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMTk1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKlxcbm9iamVjdC1hc3NpZ25cXG4oYykgU2luZHJlIFNvcmh1c1xcbkBsaWNlbnNlIE1JVFxcbiovXFxuXFxuXFxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcXG5cXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XFxuXFx0XFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcXG5cXHR9XFxuXFxuXFx0cmV0dXJuIE9iamVjdCh2YWwpO1xcbn1cXG5cXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XFxuXFx0dHJ5IHtcXG5cXHRcXHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcXG5cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXFx0XFx0fVxcblxcblxcdFxcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cXG5cXG5cXHRcXHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XFxuXFx0XFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xcblxcdFxcdHRlc3QxWzVdID0gJ2RlJztcXG5cXHRcXHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcXG5cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXFx0XFx0fVxcblxcblxcdFxcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcXG5cXHRcXHR2YXIgdGVzdDIgPSB7fTtcXG5cXHRcXHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcXG5cXHRcXHRcXHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XFxuXFx0XFx0XFx0cmV0dXJuIHRlc3QyW25dO1xcblxcdFxcdH0pO1xcblxcdFxcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxcblxcdFxcdHZhciB0ZXN0MyA9IHt9O1xcblxcdFxcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xcblxcdFxcdFxcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XFxuXFx0XFx0fSk7XFxuXFx0XFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XFxuXFx0XFx0XFx0XFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0cmV0dXJuIHRydWU7XFxuXFx0fSBjYXRjaCAoZXJyKSB7XFxuXFx0XFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cXG5cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXFx0fVxcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xcblxcdHZhciBmcm9tO1xcblxcdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XFxuXFx0dmFyIHN5bWJvbHM7XFxuXFxuXFx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcXG5cXHRcXHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XFxuXFxuXFx0XFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcXG5cXHRcXHRcXHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XFxuXFx0XFx0XFx0XFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcblxcdFxcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcXG5cXHRcXHRcXHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xcblxcdFxcdFxcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xcblxcdFxcdFxcdFxcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcXG5cXHRcXHRcXHRcXHRcXHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0fVxcblxcblxcdHJldHVybiB0bztcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE5NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgdmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7XFxuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XFxuXFxuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XFxuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XFxuICAgIH0gY2F0Y2ggKHgpIHt9XFxuICB9O1xcbn1cXG5cXG4vKipcXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXFxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXFxuICpcXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuIFxcXCJwcm9wXFxcIiwgXFxcImNvbnRleHRcXFwiLCBcXFwiY2hpbGQgY29udGV4dFxcXCJcXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxcbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXFxuICogQHByaXZhdGVcXG4gKi9cXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XFxuICAgICAgaWYgKHR5cGVTcGVjcy5oYXNPd25Qcm9wZXJ0eSh0eXBlU3BlY05hbWUpKSB7XFxuICAgICAgICB2YXIgZXJyb3I7XFxuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xcbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxcbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXFxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcihcXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArXFxuICAgICAgICAgICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nXFxuICAgICAgICAgICAgKTtcXG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcXG4gICAgICAgICAgICB0aHJvdyBlcnI7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XFxuICAgICAgICAgIGVycm9yID0gZXg7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xcbiAgICAgICAgICBwcmludFdhcm5pbmcoXFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJyArXFxuICAgICAgICAgICAgbG9jYXRpb24gKyAnIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICtcXG4gICAgICAgICAgICAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJyArIHR5cGVvZiBlcnJvciArICcuICcgK1xcbiAgICAgICAgICAgICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICtcXG4gICAgICAgICAgICAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICtcXG4gICAgICAgICAgICAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLidcXG4gICAgICAgICAgKVxcblxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcXG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXFxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXFxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XFxuXFxuICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xcblxcbiAgICAgICAgICBwcmludFdhcm5pbmcoXFxuICAgICAgICAgICAgJ0ZhaWxlZCAnICsgbG9jYXRpb24gKyAnIHR5cGU6ICcgKyBlcnJvci5tZXNzYWdlICsgKHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKVxcbiAgICAgICAgICApO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxOTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xcblxcbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKSB7fVxcblxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XFxuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XFxuICAgIGlmIChzZWNyZXQgPT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XFxuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxcbiAgICAgIHJldHVybjtcXG4gICAgfVxcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxcbiAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXFxuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXFxuICAgICk7XFxuICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICB0aHJvdyBlcnI7XFxuICB9O1xcbiAgc2hpbS5pc1JlcXVpcmVkID0gc2hpbTtcXG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XFxuICAgIHJldHVybiBzaGltO1xcbiAgfTtcXG4gIC8vIEltcG9ydGFudCFcXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxcbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xcbiAgICBhcnJheTogc2hpbSxcXG4gICAgYm9vbDogc2hpbSxcXG4gICAgZnVuYzogc2hpbSxcXG4gICAgbnVtYmVyOiBzaGltLFxcbiAgICBvYmplY3Q6IHNoaW0sXFxuICAgIHN0cmluZzogc2hpbSxcXG4gICAgc3ltYm9sOiBzaGltLFxcblxcbiAgICBhbnk6IHNoaW0sXFxuICAgIGFycmF5T2Y6IGdldFNoaW0sXFxuICAgIGVsZW1lbnQ6IHNoaW0sXFxuICAgIGluc3RhbmNlT2Y6IGdldFNoaW0sXFxuICAgIG5vZGU6IHNoaW0sXFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxcbiAgICBvbmVPZjogZ2V0U2hpbSxcXG4gICAgb25lT2ZUeXBlOiBnZXRTaGltLFxcbiAgICBzaGFwZTogZ2V0U2hpbSxcXG4gICAgZXhhY3Q6IGdldFNoaW1cXG4gIH07XFxuXFxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGVtcHR5RnVuY3Rpb247XFxuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcXG5cXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE5OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuXFxuLyoqXFxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vISBJbmMuXFxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxcbiAqL1xcbnZhciBSRUFDVF9TVEFUSUNTID0ge1xcbiAgICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcXG4gICAgY29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBkZWZhdWx0UHJvcHM6IHRydWUsXFxuICAgIGRpc3BsYXlOYW1lOiB0cnVlLFxcbiAgICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXFxuICAgIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczogdHJ1ZSxcXG4gICAgbWl4aW5zOiB0cnVlLFxcbiAgICBwcm9wVHlwZXM6IHRydWUsXFxuICAgIHR5cGU6IHRydWVcXG59O1xcblxcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xcbiAgICBuYW1lOiB0cnVlLFxcbiAgICBsZW5ndGg6IHRydWUsXFxuICAgIHByb3RvdHlwZTogdHJ1ZSxcXG4gICAgY2FsbGVyOiB0cnVlLFxcbiAgICBjYWxsZWU6IHRydWUsXFxuICAgIGFyZ3VtZW50czogdHJ1ZSxcXG4gICAgYXJpdHk6IHRydWVcXG59O1xcblxcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcXG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xcbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcXG52YXIgb2JqZWN0UHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YgJiYgZ2V0UHJvdG90eXBlT2YoT2JqZWN0KTtcXG5cXG5mdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgYmxhY2tsaXN0KSB7XFxuICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykgeyAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xcblxcbiAgICAgICAgaWYgKG9iamVjdFByb3RvdHlwZSkge1xcbiAgICAgICAgICAgIHZhciBpbmhlcml0ZWRDb21wb25lbnQgPSBnZXRQcm90b3R5cGVPZihzb3VyY2VDb21wb25lbnQpO1xcbiAgICAgICAgICAgIGlmIChpbmhlcml0ZWRDb21wb25lbnQgJiYgaW5oZXJpdGVkQ29tcG9uZW50ICE9PSBvYmplY3RQcm90b3R5cGUpIHtcXG4gICAgICAgICAgICAgICAgaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBpbmhlcml0ZWRDb21wb25lbnQsIGJsYWNrbGlzdCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZUNvbXBvbmVudCk7XFxuXFxuICAgICAgICBpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XFxuICAgICAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xcbiAgICAgICAgICAgIGlmICghUkVBQ1RfU1RBVElDU1trZXldICYmICFLTk9XTl9TVEFUSUNTW2tleV0gJiYgKCFibGFja2xpc3QgfHwgIWJsYWNrbGlzdFtrZXldKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2VDb21wb25lbnQsIGtleSk7XFxuICAgICAgICAgICAgICAgIHRyeSB7IC8vIEF2b2lkIGZhaWx1cmVzIGZyb20gcmVhZC1vbmx5IHByb3BlcnRpZXNcXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xcbiAgICB9XFxuXFxuICAgIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gaG9pc3ROb25SZWFjdFN0YXRpY3M7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdWJzY3JpcHRpb247IH0pO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbi8vIGVuY2Fwc3VsYXRlcyB0aGUgc3Vic2NyaXB0aW9uIGxvZ2ljIGZvciBjb25uZWN0aW5nIGEgY29tcG9uZW50IHRvIHRoZSByZWR1eCBzdG9yZSwgYXNcXG4vLyB3ZWxsIGFzIG5lc3Rpbmcgc3Vic2NyaXB0aW9ucyBvZiBkZXNjZW5kYW50IGNvbXBvbmVudHMsIHNvIHRoYXQgd2UgY2FuIGVuc3VyZSB0aGVcXG4vLyBhbmNlc3RvciBjb21wb25lbnRzIHJlLXJlbmRlciBiZWZvcmUgZGVzY2VuZGFudHNcXG5cXG52YXIgQ0xFQVJFRCA9IG51bGw7XFxudmFyIG51bGxMaXN0ZW5lcnMgPSB7XFxuICBub3RpZnk6IGZ1bmN0aW9uIG5vdGlmeSgpIHt9XFxufTtcXG5cXG5mdW5jdGlvbiBjcmVhdGVMaXN0ZW5lckNvbGxlY3Rpb24oKSB7XFxuICAvLyB0aGUgY3VycmVudC9uZXh0IHBhdHRlcm4gaXMgY29waWVkIGZyb20gcmVkdXgncyBjcmVhdGVTdG9yZSBjb2RlLlxcbiAgLy8gVE9ETzogcmVmYWN0b3IrZXhwb3NlIHRoYXQgY29kZSB0byBiZSByZXVzYWJsZSBoZXJlP1xcbiAgdmFyIGN1cnJlbnQgPSBbXTtcXG4gIHZhciBuZXh0ID0gW107XFxuXFxuICByZXR1cm4ge1xcbiAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XFxuICAgICAgbmV4dCA9IENMRUFSRUQ7XFxuICAgICAgY3VycmVudCA9IENMRUFSRUQ7XFxuICAgIH0sXFxuICAgIG5vdGlmeTogZnVuY3Rpb24gbm90aWZ5KCkge1xcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBjdXJyZW50ID0gbmV4dDtcXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgbGlzdGVuZXJzW2ldKCk7XFxuICAgICAgfVxcbiAgICB9LFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gbmV4dDtcXG4gICAgfSxcXG4gICAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcXG4gICAgICB2YXIgaXNTdWJzY3JpYmVkID0gdHJ1ZTtcXG4gICAgICBpZiAobmV4dCA9PT0gY3VycmVudCkgbmV4dCA9IGN1cnJlbnQuc2xpY2UoKTtcXG4gICAgICBuZXh0LnB1c2gobGlzdGVuZXIpO1xcblxcbiAgICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcXG4gICAgICAgIGlmICghaXNTdWJzY3JpYmVkIHx8IGN1cnJlbnQgPT09IENMRUFSRUQpIHJldHVybjtcXG4gICAgICAgIGlzU3Vic2NyaWJlZCA9IGZhbHNlO1xcblxcbiAgICAgICAgaWYgKG5leHQgPT09IGN1cnJlbnQpIG5leHQgPSBjdXJyZW50LnNsaWNlKCk7XFxuICAgICAgICBuZXh0LnNwbGljZShuZXh0LmluZGV4T2YobGlzdGVuZXIpLCAxKTtcXG4gICAgICB9O1xcbiAgICB9XFxuICB9O1xcbn1cXG5cXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKCkge1xcbiAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uKHN0b3JlLCBwYXJlbnRTdWIsIG9uU3RhdGVDaGFuZ2UpIHtcXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN1YnNjcmlwdGlvbik7XFxuXFxuICAgIHRoaXMuc3RvcmUgPSBzdG9yZTtcXG4gICAgdGhpcy5wYXJlbnRTdWIgPSBwYXJlbnRTdWI7XFxuICAgIHRoaXMub25TdGF0ZUNoYW5nZSA9IG9uU3RhdGVDaGFuZ2U7XFxuICAgIHRoaXMudW5zdWJzY3JpYmUgPSBudWxsO1xcbiAgICB0aGlzLmxpc3RlbmVycyA9IG51bGxMaXN0ZW5lcnM7XFxuICB9XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZE5lc3RlZFN1YiA9IGZ1bmN0aW9uIGFkZE5lc3RlZFN1YihsaXN0ZW5lcikge1xcbiAgICB0aGlzLnRyeVN1YnNjcmliZSgpO1xcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lcnMuc3Vic2NyaWJlKGxpc3RlbmVyKTtcXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLm5vdGlmeU5lc3RlZFN1YnMgPSBmdW5jdGlvbiBub3RpZnlOZXN0ZWRTdWJzKCkge1xcbiAgICB0aGlzLmxpc3RlbmVycy5ub3RpZnkoKTtcXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmlzU3Vic2NyaWJlZCA9IGZ1bmN0aW9uIGlzU3Vic2NyaWJlZCgpIHtcXG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy51bnN1YnNjcmliZSk7XFxuICB9O1xcblxcbiAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS50cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiB0cnlTdWJzY3JpYmUoKSB7XFxuICAgIGlmICghdGhpcy51bnN1YnNjcmliZSkge1xcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUgPSB0aGlzLnBhcmVudFN1YiA/IHRoaXMucGFyZW50U3ViLmFkZE5lc3RlZFN1Yih0aGlzLm9uU3RhdGVDaGFuZ2UpIDogdGhpcy5zdG9yZS5zdWJzY3JpYmUodGhpcy5vblN0YXRlQ2hhbmdlKTtcXG5cXG4gICAgICB0aGlzLmxpc3RlbmVycyA9IGNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbigpO1xcbiAgICB9XFxuICB9O1xcblxcbiAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS50cnlVbnN1YnNjcmliZSA9IGZ1bmN0aW9uIHRyeVVuc3Vic2NyaWJlKCkge1xcbiAgICBpZiAodGhpcy51bnN1YnNjcmliZSkge1xcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcXG4gICAgICB0aGlzLnVuc3Vic2NyaWJlID0gbnVsbDtcXG4gICAgICB0aGlzLmxpc3RlbmVycy5jbGVhcigpO1xcbiAgICAgIHRoaXMubGlzdGVuZXJzID0gbnVsbExpc3RlbmVycztcXG4gICAgfVxcbiAgfTtcXG5cXG4gIHJldHVybiBTdWJzY3JpcHRpb247XFxufSgpO1xcblxcblxcblxcbi8qKiovIH0pLFxcbi8qIDIwMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGNyZWF0ZUNvbm5lY3QgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb25lbnRzX2Nvbm5lY3RBZHZhbmNlZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbHNfc2hhbGxvd0VxdWFsX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWFwRGlzcGF0Y2hUb1Byb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbWFwU3RhdGVUb1Byb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fbWVyZ2VQcm9wc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3NlbGVjdG9yRmFjdG9yeV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTApO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbi8qXFxuICBjb25uZWN0IGlzIGEgZmFjYWRlIG92ZXIgY29ubmVjdEFkdmFuY2VkLiBJdCB0dXJucyBpdHMgYXJncyBpbnRvIGEgY29tcGF0aWJsZVxcbiAgc2VsZWN0b3JGYWN0b3J5LCB3aGljaCBoYXMgdGhlIHNpZ25hdHVyZTpcXG5cXG4gICAgKGRpc3BhdGNoLCBvcHRpb25zKSA9PiAobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpID0+IG5leHRGaW5hbFByb3BzXFxuICBcXG4gIGNvbm5lY3QgcGFzc2VzIGl0cyBhcmdzIHRvIGNvbm5lY3RBZHZhbmNlZCBhcyBvcHRpb25zLCB3aGljaCB3aWxsIGluIHR1cm4gcGFzcyB0aGVtIHRvXFxuICBzZWxlY3RvckZhY3RvcnkgZWFjaCB0aW1lIGEgQ29ubmVjdCBjb21wb25lbnQgaW5zdGFuY2UgaXMgaW5zdGFudGlhdGVkIG9yIGhvdCByZWxvYWRlZC5cXG5cXG4gIHNlbGVjdG9yRmFjdG9yeSByZXR1cm5zIGEgZmluYWwgcHJvcHMgc2VsZWN0b3IgZnJvbSBpdHMgbWFwU3RhdGVUb1Byb3BzLFxcbiAgbWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcywgbWVyZ2VQcm9wcyxcXG4gIG1lcmdlUHJvcHNGYWN0b3JpZXMsIGFuZCBwdXJlIGFyZ3MuXFxuXFxuICBUaGUgcmVzdWx0aW5nIGZpbmFsIHByb3BzIHNlbGVjdG9yIGlzIGNhbGxlZCBieSB0aGUgQ29ubmVjdCBjb21wb25lbnQgaW5zdGFuY2Ugd2hlbmV2ZXJcXG4gIGl0IHJlY2VpdmVzIG5ldyBwcm9wcyBvciBzdG9yZSBzdGF0ZS5cXG4gKi9cXG5cXG5mdW5jdGlvbiBtYXRjaChhcmcsIGZhY3RvcmllcywgbmFtZSkge1xcbiAgZm9yICh2YXIgaSA9IGZhY3Rvcmllcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xcbiAgICB2YXIgcmVzdWx0ID0gZmFjdG9yaWVzW2ldKGFyZyk7XFxuICAgIGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQ7XFxuICB9XFxuXFxuICByZXR1cm4gZnVuY3Rpb24gKGRpc3BhdGNoLCBvcHRpb25zKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB2YWx1ZSBvZiB0eXBlICcgKyB0eXBlb2YgYXJnICsgJyBmb3IgJyArIG5hbWUgKyAnIGFyZ3VtZW50IHdoZW4gY29ubmVjdGluZyBjb21wb25lbnQgJyArIG9wdGlvbnMud3JhcHBlZENvbXBvbmVudE5hbWUgKyAnLicpO1xcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gc3RyaWN0RXF1YWwoYSwgYikge1xcbiAgcmV0dXJuIGEgPT09IGI7XFxufVxcblxcbi8vIGNyZWF0ZUNvbm5lY3Qgd2l0aCBkZWZhdWx0IGFyZ3MgYnVpbGRzIHRoZSAnb2ZmaWNpYWwnIGNvbm5lY3QgYmVoYXZpb3IuIENhbGxpbmcgaXQgd2l0aFxcbi8vIGRpZmZlcmVudCBvcHRpb25zIG9wZW5zIHVwIHNvbWUgdGVzdGluZyBhbmQgZXh0ZW5zaWJpbGl0eSBzY2VuYXJpb3NcXG5mdW5jdGlvbiBjcmVhdGVDb25uZWN0KCkge1xcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxcbiAgICAgIF9yZWYkY29ubmVjdEhPQyA9IF9yZWYuY29ubmVjdEhPQyxcXG4gICAgICBjb25uZWN0SE9DID0gX3JlZiRjb25uZWN0SE9DID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZiRjb25uZWN0SE9DLFxcbiAgICAgIF9yZWYkbWFwU3RhdGVUb1Byb3BzRiA9IF9yZWYubWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzLFxcbiAgICAgIG1hcFN0YXRlVG9Qcm9wc0ZhY3RvcmllcyA9IF9yZWYkbWFwU3RhdGVUb1Byb3BzRiA9PT0gdW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19tYXBTdGF0ZVRvUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJG1hcFN0YXRlVG9Qcm9wc0YsXFxuICAgICAgX3JlZiRtYXBEaXNwYXRjaFRvUHJvID0gX3JlZi5tYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMsXFxuICAgICAgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVzID0gX3JlZiRtYXBEaXNwYXRjaFRvUHJvID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcERpc3BhdGNoVG9Qcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYkbWFwRGlzcGF0Y2hUb1BybyxcXG4gICAgICBfcmVmJG1lcmdlUHJvcHNGYWN0b3IgPSBfcmVmLm1lcmdlUHJvcHNGYWN0b3JpZXMsXFxuICAgICAgbWVyZ2VQcm9wc0ZhY3RvcmllcyA9IF9yZWYkbWVyZ2VQcm9wc0ZhY3RvciA9PT0gdW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tZXJnZVByb3BzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZiRtZXJnZVByb3BzRmFjdG9yLFxcbiAgICAgIF9yZWYkc2VsZWN0b3JGYWN0b3J5ID0gX3JlZi5zZWxlY3RvckZhY3RvcnksXFxuICAgICAgc2VsZWN0b3JGYWN0b3J5ID0gX3JlZiRzZWxlY3RvckZhY3RvcnkgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2VsZWN0b3JGYWN0b3J5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZiRzZWxlY3RvckZhY3Rvcnk7XFxuXFxuICByZXR1cm4gZnVuY3Rpb24gY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcykge1xcbiAgICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHt9LFxcbiAgICAgICAgX3JlZjIkcHVyZSA9IF9yZWYyLnB1cmUsXFxuICAgICAgICBwdXJlID0gX3JlZjIkcHVyZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IF9yZWYyJHB1cmUsXFxuICAgICAgICBfcmVmMiRhcmVTdGF0ZXNFcXVhbCA9IF9yZWYyLmFyZVN0YXRlc0VxdWFsLFxcbiAgICAgICAgYXJlU3RhdGVzRXF1YWwgPSBfcmVmMiRhcmVTdGF0ZXNFcXVhbCA9PT0gdW5kZWZpbmVkID8gc3RyaWN0RXF1YWwgOiBfcmVmMiRhcmVTdGF0ZXNFcXVhbCxcXG4gICAgICAgIF9yZWYyJGFyZU93blByb3BzRXF1YSA9IF9yZWYyLmFyZU93blByb3BzRXF1YWwsXFxuICAgICAgICBhcmVPd25Qcm9wc0VxdWFsID0gX3JlZjIkYXJlT3duUHJvcHNFcXVhID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZU93blByb3BzRXF1YSxcXG4gICAgICAgIF9yZWYyJGFyZVN0YXRlUHJvcHNFcSA9IF9yZWYyLmFyZVN0YXRlUHJvcHNFcXVhbCxcXG4gICAgICAgIGFyZVN0YXRlUHJvcHNFcXVhbCA9IF9yZWYyJGFyZVN0YXRlUHJvcHNFcSA9PT0gdW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX191dGlsc19zaGFsbG93RXF1YWxfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmMiRhcmVTdGF0ZVByb3BzRXEsXFxuICAgICAgICBfcmVmMiRhcmVNZXJnZWRQcm9wc0UgPSBfcmVmMi5hcmVNZXJnZWRQcm9wc0VxdWFsLFxcbiAgICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbCA9IF9yZWYyJGFyZU1lcmdlZFByb3BzRSA9PT0gdW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX191dGlsc19zaGFsbG93RXF1YWxfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmMiRhcmVNZXJnZWRQcm9wc0UsXFxuICAgICAgICBleHRyYU9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFsncHVyZScsICdhcmVTdGF0ZXNFcXVhbCcsICdhcmVPd25Qcm9wc0VxdWFsJywgJ2FyZVN0YXRlUHJvcHNFcXVhbCcsICdhcmVNZXJnZWRQcm9wc0VxdWFsJ10pO1xcblxcbiAgICB2YXIgaW5pdE1hcFN0YXRlVG9Qcm9wcyA9IG1hdGNoKG1hcFN0YXRlVG9Qcm9wcywgbWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzLCAnbWFwU3RhdGVUb1Byb3BzJyk7XFxuICAgIHZhciBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzID0gbWF0Y2gobWFwRGlzcGF0Y2hUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMsICdtYXBEaXNwYXRjaFRvUHJvcHMnKTtcXG4gICAgdmFyIGluaXRNZXJnZVByb3BzID0gbWF0Y2gobWVyZ2VQcm9wcywgbWVyZ2VQcm9wc0ZhY3RvcmllcywgJ21lcmdlUHJvcHMnKTtcXG5cXG4gICAgcmV0dXJuIGNvbm5lY3RIT0Moc2VsZWN0b3JGYWN0b3J5LCBfZXh0ZW5kcyh7XFxuICAgICAgLy8gdXNlZCBpbiBlcnJvciBtZXNzYWdlc1xcbiAgICAgIG1ldGhvZE5hbWU6ICdjb25uZWN0JyxcXG5cXG4gICAgICAvLyB1c2VkIHRvIGNvbXB1dGUgQ29ubmVjdCdzIGRpc3BsYXlOYW1lIGZyb20gdGhlIHdyYXBwZWQgY29tcG9uZW50J3MgZGlzcGxheU5hbWUuXFxuICAgICAgZ2V0RGlzcGxheU5hbWU6IGZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKG5hbWUpIHtcXG4gICAgICAgIHJldHVybiAnQ29ubmVjdCgnICsgbmFtZSArICcpJztcXG4gICAgICB9LFxcblxcbiAgICAgIC8vIGlmIG1hcFN0YXRlVG9Qcm9wcyBpcyBmYWxzeSwgdGhlIENvbm5lY3QgY29tcG9uZW50IGRvZXNuJ3Qgc3Vic2NyaWJlIHRvIHN0b3JlIHN0YXRlIGNoYW5nZXNcXG4gICAgICBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXM6IEJvb2xlYW4obWFwU3RhdGVUb1Byb3BzKSxcXG5cXG4gICAgICAvLyBwYXNzZWQgdGhyb3VnaCB0byBzZWxlY3RvckZhY3RvcnlcXG4gICAgICBpbml0TWFwU3RhdGVUb1Byb3BzOiBpbml0TWFwU3RhdGVUb1Byb3BzLFxcbiAgICAgIGluaXRNYXBEaXNwYXRjaFRvUHJvcHM6IGluaXRNYXBEaXNwYXRjaFRvUHJvcHMsXFxuICAgICAgaW5pdE1lcmdlUHJvcHM6IGluaXRNZXJnZVByb3BzLFxcbiAgICAgIHB1cmU6IHB1cmUsXFxuICAgICAgYXJlU3RhdGVzRXF1YWw6IGFyZVN0YXRlc0VxdWFsLFxcbiAgICAgIGFyZU93blByb3BzRXF1YWw6IGFyZU93blByb3BzRXF1YWwsXFxuICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsOiBhcmVTdGF0ZVByb3BzRXF1YWwsXFxuICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbDogYXJlTWVyZ2VkUHJvcHNFcXVhbFxcblxcbiAgICB9LCBleHRyYU9wdGlvbnMpKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUNvbm5lY3QoKSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjAxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSBzaGFsbG93RXF1YWw7XFxudmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XFxuXFxuZnVuY3Rpb24gaXMoeCwgeSkge1xcbiAgaWYgKHggPT09IHkpIHtcXG4gICAgcmV0dXJuIHggIT09IDAgfHwgeSAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XFxuICB9IGVsc2Uge1xcbiAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xcbiAgfVxcbn1cXG5cXG5mdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQSwgb2JqQikge1xcbiAgaWYgKGlzKG9iakEsIG9iakIpKSByZXR1cm4gdHJ1ZTtcXG5cXG4gIGlmICh0eXBlb2Ygb2JqQSAhPT0gJ29iamVjdCcgfHwgb2JqQSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqQiAhPT0gJ29iamVjdCcgfHwgb2JqQiA9PT0gbnVsbCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuXFxuICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcXG4gIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xcblxcbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSByZXR1cm4gZmFsc2U7XFxuXFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXNBLmxlbmd0aDsgaSsrKSB7XFxuICAgIGlmICghaGFzT3duLmNhbGwob2JqQiwga2V5c0FbaV0pIHx8ICFpcyhvYmpBW2tleXNBW2ldXSwgb2JqQltrZXlzQVtpXV0pKSB7XFxuICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9XFxuICB9XFxuXFxuICByZXR1cm4gdHJ1ZTtcXG59XFxuXFxuLyoqKi8gfSksXFxuLyogMjAyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzRnVuY3Rpb24gKi9cXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzTWlzc2luZyAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNPYmplY3QgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193cmFwTWFwVG9Qcm9wc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nik7XFxuXFxuXFxuXFxuZnVuY3Rpb24gd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzRnVuY3Rpb24obWFwRGlzcGF0Y2hUb1Byb3BzKSB7XFxuICByZXR1cm4gdHlwZW9mIG1hcERpc3BhdGNoVG9Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImJcXFwiIC8qIHdyYXBNYXBUb1Byb3BzRnVuYyAqL10pKG1hcERpc3BhdGNoVG9Qcm9wcywgJ21hcERpc3BhdGNoVG9Qcm9wcycpIDogdW5kZWZpbmVkO1xcbn1cXG5cXG5mdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nKG1hcERpc3BhdGNoVG9Qcm9wcykge1xcbiAgcmV0dXJuICFtYXBEaXNwYXRjaFRvUHJvcHMgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193cmFwTWFwVG9Qcm9wc19fW1xcXCJhXFxcIiAvKiB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50ICovXSkoZnVuY3Rpb24gKGRpc3BhdGNoKSB7XFxuICAgIHJldHVybiB7IGRpc3BhdGNoOiBkaXNwYXRjaCB9O1xcbiAgfSkgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc09iamVjdChtYXBEaXNwYXRjaFRvUHJvcHMpIHtcXG4gIHJldHVybiBtYXBEaXNwYXRjaFRvUHJvcHMgJiYgdHlwZW9mIG1hcERpc3BhdGNoVG9Qcm9wcyA9PT0gJ29iamVjdCcgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193cmFwTWFwVG9Qcm9wc19fW1xcXCJhXFxcIiAvKiB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50ICovXSkoZnVuY3Rpb24gKGRpc3BhdGNoKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKG1hcERpc3BhdGNoVG9Qcm9wcywgZGlzcGF0Y2gpO1xcbiAgfSkgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFt3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbiwgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzTWlzc2luZywgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzT2JqZWN0XSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjAzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsLCBtb2R1bGUpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19wb255ZmlsbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDQpO1xcbi8qIGdsb2JhbCB3aW5kb3cgKi9cXG5cXG5cXG52YXIgcm9vdDtcXG5cXG5pZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XFxuICByb290ID0gc2VsZjtcXG59IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XFxuICByb290ID0gd2luZG93O1xcbn0gZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSBnbG9iYWw7XFxufSBlbHNlIGlmICh0cnVlKSB7XFxuICByb290ID0gbW9kdWxlO1xcbn0gZWxzZSB7XFxuICByb290ID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcXG59XFxuXFxudmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3BvbnlmaWxsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShyb290KTtcXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChyZXN1bHQpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KSwgX193ZWJwYWNrX3JlcXVpcmVfXygyMikobW9kdWxlKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMjA0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSBzeW1ib2xPYnNlcnZhYmxlUG9ueWZpbGw7XFxuZnVuY3Rpb24gc3ltYm9sT2JzZXJ2YWJsZVBvbnlmaWxsKHJvb3QpIHtcXG5cXHR2YXIgcmVzdWx0O1xcblxcdHZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcXG5cXG5cXHRpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJykge1xcblxcdFxcdGlmIChTeW1ib2wub2JzZXJ2YWJsZSkge1xcblxcdFxcdFxcdHJlc3VsdCA9IFN5bWJvbC5vYnNlcnZhYmxlO1xcblxcdFxcdH0gZWxzZSB7XFxuXFx0XFx0XFx0cmVzdWx0ID0gU3ltYm9sKCdvYnNlcnZhYmxlJyk7XFxuXFx0XFx0XFx0U3ltYm9sLm9ic2VydmFibGUgPSByZXN1bHQ7XFxuXFx0XFx0fVxcblxcdH0gZWxzZSB7XFxuXFx0XFx0cmVzdWx0ID0gJ0BAb2JzZXJ2YWJsZSc7XFxuXFx0fVxcblxcblxcdHJldHVybiByZXN1bHQ7XFxufTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihwcm9jZXNzKSB7LyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGRlZmF1bHQgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdXRpbHNfd2FybmluZ19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NCk7XFxuXFxuXFxuXFxuXFxuZnVuY3Rpb24gZ2V0VW5kZWZpbmVkU3RhdGVFcnJvck1lc3NhZ2Uoa2V5LCBhY3Rpb24pIHtcXG4gIHZhciBhY3Rpb25UeXBlID0gYWN0aW9uICYmIGFjdGlvbi50eXBlO1xcbiAgdmFyIGFjdGlvbk5hbWUgPSBhY3Rpb25UeXBlICYmICdcXFwiJyArIGFjdGlvblR5cGUudG9TdHJpbmcoKSArICdcXFwiJyB8fCAnYW4gYWN0aW9uJztcXG5cXG4gIHJldHVybiAnR2l2ZW4gYWN0aW9uICcgKyBhY3Rpb25OYW1lICsgJywgcmVkdWNlciBcXFwiJyArIGtleSArICdcXFwiIHJldHVybmVkIHVuZGVmaW5lZC4gJyArICdUbyBpZ25vcmUgYW4gYWN0aW9uLCB5b3UgbXVzdCBleHBsaWNpdGx5IHJldHVybiB0aGUgcHJldmlvdXMgc3RhdGUuICcgKyAnSWYgeW91IHdhbnQgdGhpcyByZWR1Y2VyIHRvIGhvbGQgbm8gdmFsdWUsIHlvdSBjYW4gcmV0dXJuIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQuJztcXG59XFxuXFxuZnVuY3Rpb24gZ2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShpbnB1dFN0YXRlLCByZWR1Y2VycywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpIHtcXG4gIHZhciByZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcXG4gIHZhciBhcmd1bWVudE5hbWUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGUgPT09IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlU3RvcmVfX1tcXFwiYVxcXCIgLyogQWN0aW9uVHlwZXMgKi9dLklOSVQgPyAncHJlbG9hZGVkU3RhdGUgYXJndW1lbnQgcGFzc2VkIHRvIGNyZWF0ZVN0b3JlJyA6ICdwcmV2aW91cyBzdGF0ZSByZWNlaXZlZCBieSB0aGUgcmVkdWNlcic7XFxuXFxuICBpZiAocmVkdWNlcktleXMubGVuZ3RoID09PSAwKSB7XFxuICAgIHJldHVybiAnU3RvcmUgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIHJlZHVjZXIuIE1ha2Ugc3VyZSB0aGUgYXJndW1lbnQgcGFzc2VkICcgKyAndG8gY29tYmluZVJlZHVjZXJzIGlzIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIHJlZHVjZXJzLic7XFxuICB9XFxuXFxuICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGlucHV0U3RhdGUpKSB7XFxuICAgIHJldHVybiAnVGhlICcgKyBhcmd1bWVudE5hbWUgKyAnIGhhcyB1bmV4cGVjdGVkIHR5cGUgb2YgXFxcIicgKyB7fS50b1N0cmluZy5jYWxsKGlucHV0U3RhdGUpLm1hdGNoKC9cXFxccyhbYS16fEEtWl0rKS8pWzFdICsgJ1xcXCIuIEV4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgJyArICgna2V5czogXFxcIicgKyByZWR1Y2VyS2V5cy5qb2luKCdcXFwiLCBcXFwiJykgKyAnXFxcIicpO1xcbiAgfVxcblxcbiAgdmFyIHVuZXhwZWN0ZWRLZXlzID0gT2JqZWN0LmtleXMoaW5wdXRTdGF0ZSkuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgcmV0dXJuICFyZWR1Y2Vycy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICF1bmV4cGVjdGVkS2V5Q2FjaGVba2V5XTtcXG4gIH0pO1xcblxcbiAgdW5leHBlY3RlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XFxuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldID0gdHJ1ZTtcXG4gIH0pO1xcblxcbiAgaWYgKHVuZXhwZWN0ZWRLZXlzLmxlbmd0aCA+IDApIHtcXG4gICAgcmV0dXJuICdVbmV4cGVjdGVkICcgKyAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMSA/ICdrZXlzJyA6ICdrZXknKSArICcgJyArICgnXFxcIicgKyB1bmV4cGVjdGVkS2V5cy5qb2luKCdcXFwiLCBcXFwiJykgKyAnXFxcIiBmb3VuZCBpbiAnICsgYXJndW1lbnROYW1lICsgJy4gJykgKyAnRXhwZWN0ZWQgdG8gZmluZCBvbmUgb2YgdGhlIGtub3duIHJlZHVjZXIga2V5cyBpbnN0ZWFkOiAnICsgKCdcXFwiJyArIHJlZHVjZXJLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiLiBVbmV4cGVjdGVkIGtleXMgd2lsbCBiZSBpZ25vcmVkLicpO1xcbiAgfVxcbn1cXG5cXG5mdW5jdGlvbiBhc3NlcnRSZWR1Y2VyU2hhcGUocmVkdWNlcnMpIHtcXG4gIE9iamVjdC5rZXlzKHJlZHVjZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgdmFyIHJlZHVjZXIgPSByZWR1Y2Vyc1trZXldO1xcbiAgICB2YXIgaW5pdGlhbFN0YXRlID0gcmVkdWNlcih1bmRlZmluZWQsIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fW1xcXCJhXFxcIiAvKiBBY3Rpb25UeXBlcyAqL10uSU5JVCB9KTtcXG5cXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkIGR1cmluZyBpbml0aWFsaXphdGlvbi4gJyArICdJZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VyIGlzIHVuZGVmaW5lZCwgeW91IG11c3QgJyArICdleHBsaWNpdGx5IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5ICcgKyAnbm90IGJlIHVuZGVmaW5lZC4gSWYgeW91IGRvblxcXFwndCB3YW50IHRvIHNldCBhIHZhbHVlIGZvciB0aGlzIHJlZHVjZXIsICcgKyAneW91IGNhbiB1c2UgbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC4nKTtcXG4gICAgfVxcblxcbiAgICB2YXIgdHlwZSA9ICdAQHJlZHV4L1BST0JFX1VOS05PV05fQUNUSU9OXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNykuc3BsaXQoJycpLmpvaW4oJy4nKTtcXG4gICAgaWYgKHR5cGVvZiByZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiB0eXBlIH0pID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVkdWNlciBcXFwiJyArIGtleSArICdcXFwiIHJldHVybmVkIHVuZGVmaW5lZCB3aGVuIHByb2JlZCB3aXRoIGEgcmFuZG9tIHR5cGUuICcgKyAoJ0RvblxcXFwndCB0cnkgdG8gaGFuZGxlICcgKyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX19bXFxcImFcXFwiIC8qIEFjdGlvblR5cGVzICovXS5JTklUICsgJyBvciBvdGhlciBhY3Rpb25zIGluIFxcXCJyZWR1eC8qXFxcIiAnKSArICduYW1lc3BhY2UuIFRoZXkgYXJlIGNvbnNpZGVyZWQgcHJpdmF0ZS4gSW5zdGVhZCwgeW91IG11c3QgcmV0dXJuIHRoZSAnICsgJ2N1cnJlbnQgc3RhdGUgZm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHVubGVzcyBpdCBpcyB1bmRlZmluZWQsICcgKyAnaW4gd2hpY2ggY2FzZSB5b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUsIHJlZ2FyZGxlc3Mgb2YgdGhlICcgKyAnYWN0aW9uIHR5cGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSBub3QgYmUgdW5kZWZpbmVkLCBidXQgY2FuIGJlIG51bGwuJyk7XFxuICAgIH1cXG4gIH0pO1xcbn1cXG5cXG4vKipcXG4gKiBUdXJucyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBkaWZmZXJlbnQgcmVkdWNlciBmdW5jdGlvbnMsIGludG8gYSBzaW5nbGVcXG4gKiByZWR1Y2VyIGZ1bmN0aW9uLiBJdCB3aWxsIGNhbGwgZXZlcnkgY2hpbGQgcmVkdWNlciwgYW5kIGdhdGhlciB0aGVpciByZXN1bHRzXFxuICogaW50byBhIHNpbmdsZSBzdGF0ZSBvYmplY3QsIHdob3NlIGtleXMgY29ycmVzcG9uZCB0byB0aGUga2V5cyBvZiB0aGUgcGFzc2VkXFxuICogcmVkdWNlciBmdW5jdGlvbnMuXFxuICpcXG4gKiBAcGFyYW0ge09iamVjdH0gcmVkdWNlcnMgQW4gb2JqZWN0IHdob3NlIHZhbHVlcyBjb3JyZXNwb25kIHRvIGRpZmZlcmVudFxcbiAqIHJlZHVjZXIgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBjb21iaW5lZCBpbnRvIG9uZS4gT25lIGhhbmR5IHdheSB0byBvYnRhaW5cXG4gKiBpdCBpcyB0byB1c2UgRVM2IGBpbXBvcnQgKiBhcyByZWR1Y2Vyc2Agc3ludGF4LiBUaGUgcmVkdWNlcnMgbWF5IG5ldmVyIHJldHVyblxcbiAqIHVuZGVmaW5lZCBmb3IgYW55IGFjdGlvbi4gSW5zdGVhZCwgdGhleSBzaG91bGQgcmV0dXJuIHRoZWlyIGluaXRpYWwgc3RhdGVcXG4gKiBpZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZW0gd2FzIHVuZGVmaW5lZCwgYW5kIHRoZSBjdXJyZW50IHN0YXRlIGZvciBhbnlcXG4gKiB1bnJlY29nbml6ZWQgYWN0aW9uLlxcbiAqXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHJlZHVjZXIgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGV2ZXJ5IHJlZHVjZXIgaW5zaWRlIHRoZVxcbiAqIHBhc3NlZCBvYmplY3QsIGFuZCBidWlsZHMgYSBzdGF0ZSBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzaGFwZS5cXG4gKi9cXG5mdW5jdGlvbiBjb21iaW5lUmVkdWNlcnMocmVkdWNlcnMpIHtcXG4gIHZhciByZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcXG4gIHZhciBmaW5hbFJlZHVjZXJzID0ge307XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJlZHVjZXJLZXlzLmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBrZXkgPSByZWR1Y2VyS2V5c1tpXTtcXG5cXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnTm8gcmVkdWNlciBwcm92aWRlZCBmb3Iga2V5IFxcXCInICsga2V5ICsgJ1xcXCInKTtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKHR5cGVvZiByZWR1Y2Vyc1trZXldID09PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgZmluYWxSZWR1Y2Vyc1trZXldID0gcmVkdWNlcnNba2V5XTtcXG4gICAgfVxcbiAgfVxcbiAgdmFyIGZpbmFsUmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhmaW5hbFJlZHVjZXJzKTtcXG5cXG4gIHZhciB1bmV4cGVjdGVkS2V5Q2FjaGUgPSB2b2lkIDA7XFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICB1bmV4cGVjdGVkS2V5Q2FjaGUgPSB7fTtcXG4gIH1cXG5cXG4gIHZhciBzaGFwZUFzc2VydGlvbkVycm9yID0gdm9pZCAwO1xcbiAgdHJ5IHtcXG4gICAgYXNzZXJ0UmVkdWNlclNoYXBlKGZpbmFsUmVkdWNlcnMpO1xcbiAgfSBjYXRjaCAoZSkge1xcbiAgICBzaGFwZUFzc2VydGlvbkVycm9yID0gZTtcXG4gIH1cXG5cXG4gIHJldHVybiBmdW5jdGlvbiBjb21iaW5hdGlvbigpIHtcXG4gICAgdmFyIHN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcXG4gICAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50c1sxXTtcXG5cXG4gICAgaWYgKHNoYXBlQXNzZXJ0aW9uRXJyb3IpIHtcXG4gICAgICB0aHJvdyBzaGFwZUFzc2VydGlvbkVycm9yO1xcbiAgICB9XFxuXFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgdmFyIHdhcm5pbmdNZXNzYWdlID0gZ2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShzdGF0ZSwgZmluYWxSZWR1Y2VycywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpO1xcbiAgICAgIGlmICh3YXJuaW5nTWVzc2FnZSkge1xcbiAgICAgICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdXRpbHNfd2FybmluZ19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybmluZ01lc3NhZ2UpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICB2YXIgaGFzQ2hhbmdlZCA9IGZhbHNlO1xcbiAgICB2YXIgbmV4dFN0YXRlID0ge307XFxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aDsgX2krKykge1xcbiAgICAgIHZhciBfa2V5ID0gZmluYWxSZWR1Y2VyS2V5c1tfaV07XFxuICAgICAgdmFyIHJlZHVjZXIgPSBmaW5hbFJlZHVjZXJzW19rZXldO1xcbiAgICAgIHZhciBwcmV2aW91c1N0YXRlRm9yS2V5ID0gc3RhdGVbX2tleV07XFxuICAgICAgdmFyIG5leHRTdGF0ZUZvcktleSA9IHJlZHVjZXIocHJldmlvdXNTdGF0ZUZvcktleSwgYWN0aW9uKTtcXG4gICAgICBpZiAodHlwZW9mIG5leHRTdGF0ZUZvcktleSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSBnZXRVbmRlZmluZWRTdGF0ZUVycm9yTWVzc2FnZShfa2V5LCBhY3Rpb24pO1xcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XFxuICAgICAgfVxcbiAgICAgIG5leHRTdGF0ZVtfa2V5XSA9IG5leHRTdGF0ZUZvcktleTtcXG4gICAgICBoYXNDaGFuZ2VkID0gaGFzQ2hhbmdlZCB8fCBuZXh0U3RhdGVGb3JLZXkgIT09IHByZXZpb3VzU3RhdGVGb3JLZXk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQgPyBuZXh0U3RhdGUgOiBzdGF0ZTtcXG4gIH07XFxufVxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IGJpbmRBY3Rpb25DcmVhdG9ycztcXG5mdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9yLCBkaXNwYXRjaCkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIGRpc3BhdGNoKGFjdGlvbkNyZWF0b3IuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpKTtcXG4gIH07XFxufVxcblxcbi8qKlxcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGFjdGlvbiBjcmVhdG9ycywgaW50byBhbiBvYmplY3Qgd2l0aCB0aGVcXG4gKiBzYW1lIGtleXMsIGJ1dCB3aXRoIGV2ZXJ5IGZ1bmN0aW9uIHdyYXBwZWQgaW50byBhIGBkaXNwYXRjaGAgY2FsbCBzbyB0aGV5XFxuICogbWF5IGJlIGludm9rZWQgZGlyZWN0bHkuIFRoaXMgaXMganVzdCBhIGNvbnZlbmllbmNlIG1ldGhvZCwgYXMgeW91IGNhbiBjYWxsXFxuICogYHN0b3JlLmRpc3BhdGNoKE15QWN0aW9uQ3JlYXRvcnMuZG9Tb21ldGhpbmcoKSlgIHlvdXJzZWxmIGp1c3QgZmluZS5cXG4gKlxcbiAqIEZvciBjb252ZW5pZW5jZSwgeW91IGNhbiBhbHNvIHBhc3MgYSBzaW5nbGUgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LFxcbiAqIGFuZCBnZXQgYSBmdW5jdGlvbiBpbiByZXR1cm4uXFxuICpcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdH0gYWN0aW9uQ3JlYXRvcnMgQW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgYWN0aW9uXFxuICogY3JlYXRvciBmdW5jdGlvbnMuIE9uZSBoYW5keSB3YXkgdG8gb2J0YWluIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzYFxcbiAqIHN5bnRheC4gWW91IG1heSBhbHNvIHBhc3MgYSBzaW5nbGUgZnVuY3Rpb24uXFxuICpcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBkaXNwYXRjaCBUaGUgYGRpc3BhdGNoYCBmdW5jdGlvbiBhdmFpbGFibGUgb24geW91ciBSZWR1eFxcbiAqIHN0b3JlLlxcbiAqXFxuICogQHJldHVybnMge0Z1bmN0aW9ufE9iamVjdH0gVGhlIG9iamVjdCBtaW1pY2tpbmcgdGhlIG9yaWdpbmFsIG9iamVjdCwgYnV0IHdpdGhcXG4gKiBldmVyeSBhY3Rpb24gY3JlYXRvciB3cmFwcGVkIGludG8gdGhlIGBkaXNwYXRjaGAgY2FsbC4gSWYgeW91IHBhc3NlZCBhXFxuICogZnVuY3Rpb24gYXMgYGFjdGlvbkNyZWF0b3JzYCwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGFsc28gYmUgYSBzaW5nbGVcXG4gKiBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcnMoYWN0aW9uQ3JlYXRvcnMsIGRpc3BhdGNoKSB7XFxuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzID09PSAnZnVuY3Rpb24nKSB7XFxuICAgIHJldHVybiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpO1xcbiAgfVxcblxcbiAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyAhPT0gJ29iamVjdCcgfHwgYWN0aW9uQ3JlYXRvcnMgPT09IG51bGwpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWN0aW9uQ3JlYXRvcnMgZXhwZWN0ZWQgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb24sIGluc3RlYWQgcmVjZWl2ZWQgJyArIChhY3Rpb25DcmVhdG9ycyA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBhY3Rpb25DcmVhdG9ycykgKyAnLiAnICsgJ0RpZCB5b3Ugd3JpdGUgXFxcImltcG9ydCBBY3Rpb25DcmVhdG9ycyBmcm9tXFxcIiBpbnN0ZWFkIG9mIFxcXCJpbXBvcnQgKiBhcyBBY3Rpb25DcmVhdG9ycyBmcm9tXFxcIj8nKTtcXG4gIH1cXG5cXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoYWN0aW9uQ3JlYXRvcnMpO1xcbiAgdmFyIGJvdW5kQWN0aW9uQ3JlYXRvcnMgPSB7fTtcXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcXG4gICAgdmFyIGFjdGlvbkNyZWF0b3IgPSBhY3Rpb25DcmVhdG9yc1trZXldO1xcbiAgICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICBib3VuZEFjdGlvbkNyZWF0b3JzW2tleV0gPSBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9yLCBkaXNwYXRjaCk7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiBib3VuZEFjdGlvbkNyZWF0b3JzO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBkZWZhdWx0ICovXFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9zZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgc3RvcmUgZW5oYW5jZXIgdGhhdCBhcHBsaWVzIG1pZGRsZXdhcmUgdG8gdGhlIGRpc3BhdGNoIG1ldGhvZFxcbiAqIG9mIHRoZSBSZWR1eCBzdG9yZS4gVGhpcyBpcyBoYW5keSBmb3IgYSB2YXJpZXR5IG9mIHRhc2tzLCBzdWNoIGFzIGV4cHJlc3NpbmdcXG4gKiBhc3luY2hyb25vdXMgYWN0aW9ucyBpbiBhIGNvbmNpc2UgbWFubmVyLCBvciBsb2dnaW5nIGV2ZXJ5IGFjdGlvbiBwYXlsb2FkLlxcbiAqXFxuICogU2VlIGByZWR1eC10aHVua2AgcGFja2FnZSBhcyBhbiBleGFtcGxlIG9mIHRoZSBSZWR1eCBtaWRkbGV3YXJlLlxcbiAqXFxuICogQmVjYXVzZSBtaWRkbGV3YXJlIGlzIHBvdGVudGlhbGx5IGFzeW5jaHJvbm91cywgdGhpcyBzaG91bGQgYmUgdGhlIGZpcnN0XFxuICogc3RvcmUgZW5oYW5jZXIgaW4gdGhlIGNvbXBvc2l0aW9uIGNoYWluLlxcbiAqXFxuICogTm90ZSB0aGF0IGVhY2ggbWlkZGxld2FyZSB3aWxsIGJlIGdpdmVuIHRoZSBgZGlzcGF0Y2hgIGFuZCBgZ2V0U3RhdGVgIGZ1bmN0aW9uc1xcbiAqIGFzIG5hbWVkIGFyZ3VtZW50cy5cXG4gKlxcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IG1pZGRsZXdhcmVzIFRoZSBtaWRkbGV3YXJlIGNoYWluIHRvIGJlIGFwcGxpZWQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHN0b3JlIGVuaGFuY2VyIGFwcGx5aW5nIHRoZSBtaWRkbGV3YXJlLlxcbiAqL1xcbmZ1bmN0aW9uIGFwcGx5TWlkZGxld2FyZSgpIHtcXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBtaWRkbGV3YXJlcyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICBtaWRkbGV3YXJlc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gIH1cXG5cXG4gIHJldHVybiBmdW5jdGlvbiAoY3JlYXRlU3RvcmUpIHtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpIHtcXG4gICAgICB2YXIgc3RvcmUgPSBjcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpO1xcbiAgICAgIHZhciBfZGlzcGF0Y2ggPSBzdG9yZS5kaXNwYXRjaDtcXG4gICAgICB2YXIgY2hhaW4gPSBbXTtcXG5cXG4gICAgICB2YXIgbWlkZGxld2FyZUFQSSA9IHtcXG4gICAgICAgIGdldFN0YXRlOiBzdG9yZS5nZXRTdGF0ZSxcXG4gICAgICAgIGRpc3BhdGNoOiBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcXG4gICAgICAgICAgcmV0dXJuIF9kaXNwYXRjaChhY3Rpb24pO1xcbiAgICAgICAgfVxcbiAgICAgIH07XFxuICAgICAgY2hhaW4gPSBtaWRkbGV3YXJlcy5tYXAoZnVuY3Rpb24gKG1pZGRsZXdhcmUpIHtcXG4gICAgICAgIHJldHVybiBtaWRkbGV3YXJlKG1pZGRsZXdhcmVBUEkpO1xcbiAgICAgIH0pO1xcbiAgICAgIF9kaXNwYXRjaCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9zZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5hcHBseSh1bmRlZmluZWQsIGNoYWluKShzdG9yZS5kaXNwYXRjaCk7XFxuXFxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdG9yZSwge1xcbiAgICAgICAgZGlzcGF0Y2g6IF9kaXNwYXRjaFxcbiAgICAgIH0pO1xcbiAgICB9O1xcbiAgfTtcXG59XFxuXFxuLyoqKi8gfSksXFxuLyogMjA4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd2hlbk1hcFN0YXRlVG9Qcm9wc0lzRnVuY3Rpb24gKi9cXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZyAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3dyYXBNYXBUb1Byb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2KTtcXG5cXG5cXG5mdW5jdGlvbiB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbihtYXBTdGF0ZVRvUHJvcHMpIHtcXG4gIHJldHVybiB0eXBlb2YgbWFwU3RhdGVUb1Byb3BzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYlxcXCIgLyogd3JhcE1hcFRvUHJvcHNGdW5jICovXSkobWFwU3RhdGVUb1Byb3BzLCAnbWFwU3RhdGVUb1Byb3BzJykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc01pc3NpbmcobWFwU3RhdGVUb1Byb3BzKSB7XFxuICByZXR1cm4gIW1hcFN0YXRlVG9Qcm9wcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoKSB7XFxuICAgIHJldHVybiB7fTtcXG4gIH0pIDogdW5kZWZpbmVkO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChbd2hlbk1hcFN0YXRlVG9Qcm9wc0lzRnVuY3Rpb24sIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc01pc3NpbmddKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihwcm9jZXNzKSB7LyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGRlZmF1bHRNZXJnZVByb3BzICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdyYXBNZXJnZVByb3BzRnVuYyAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWVyZ2VQcm9wc0lzRnVuY3Rpb24gKi9cXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd2hlbk1lcmdlUHJvcHNJc09taXR0ZWQgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc192ZXJpZnlQbGFpbk9iamVjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nyk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5cXG5cXG5mdW5jdGlvbiBkZWZhdWx0TWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcykge1xcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvd25Qcm9wcywgc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcyk7XFxufVxcblxcbmZ1bmN0aW9uIHdyYXBNZXJnZVByb3BzRnVuYyhtZXJnZVByb3BzKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gaW5pdE1lcmdlUHJvcHNQcm94eShkaXNwYXRjaCwgX3JlZikge1xcbiAgICB2YXIgZGlzcGxheU5hbWUgPSBfcmVmLmRpc3BsYXlOYW1lLFxcbiAgICAgICAgcHVyZSA9IF9yZWYucHVyZSxcXG4gICAgICAgIGFyZU1lcmdlZFByb3BzRXF1YWwgPSBfcmVmLmFyZU1lcmdlZFByb3BzRXF1YWw7XFxuXFxuICAgIHZhciBoYXNSdW5PbmNlID0gZmFsc2U7XFxuICAgIHZhciBtZXJnZWRQcm9wcyA9IHZvaWQgMDtcXG5cXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlUHJvcHNQcm94eShzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcykge1xcbiAgICAgIHZhciBuZXh0TWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcXG5cXG4gICAgICBpZiAoaGFzUnVuT25jZSkge1xcbiAgICAgICAgaWYgKCFwdXJlIHx8ICFhcmVNZXJnZWRQcm9wc0VxdWFsKG5leHRNZXJnZWRQcm9wcywgbWVyZ2VkUHJvcHMpKSBtZXJnZWRQcm9wcyA9IG5leHRNZXJnZWRQcm9wcztcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgaGFzUnVuT25jZSA9IHRydWU7XFxuICAgICAgICBtZXJnZWRQcm9wcyA9IG5leHRNZXJnZWRQcm9wcztcXG5cXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc192ZXJpZnlQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkobWVyZ2VkUHJvcHMsIGRpc3BsYXlOYW1lLCAnbWVyZ2VQcm9wcycpO1xcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XFxuICAgIH07XFxuICB9O1xcbn1cXG5cXG5mdW5jdGlvbiB3aGVuTWVyZ2VQcm9wc0lzRnVuY3Rpb24obWVyZ2VQcm9wcykge1xcbiAgcmV0dXJuIHR5cGVvZiBtZXJnZVByb3BzID09PSAnZnVuY3Rpb24nID8gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIDogdW5kZWZpbmVkO1xcbn1cXG5cXG5mdW5jdGlvbiB3aGVuTWVyZ2VQcm9wc0lzT21pdHRlZChtZXJnZVByb3BzKSB7XFxuICByZXR1cm4gIW1lcmdlUHJvcHMgPyBmdW5jdGlvbiAoKSB7XFxuICAgIHJldHVybiBkZWZhdWx0TWVyZ2VQcm9wcztcXG4gIH0gOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFt3aGVuTWVyZ2VQcm9wc0lzRnVuY3Rpb24sIHdoZW5NZXJnZVByb3BzSXNPbWl0dGVkXSk7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDIxMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgaW1wdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeSAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBwdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeSAqL1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IGZpbmFsUHJvcHNTZWxlY3RvckZhY3Rvcnk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fdmVyaWZ5U3Vic2VsZWN0b3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMSk7XFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcbmZ1bmN0aW9uIGltcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIGRpc3BhdGNoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gaW1wdXJlRmluYWxQcm9wc1NlbGVjdG9yKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICByZXR1cm4gbWVyZ2VQcm9wcyhtYXBTdGF0ZVRvUHJvcHMoc3RhdGUsIG93blByb3BzKSwgbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyksIG93blByb3BzKTtcXG4gIH07XFxufVxcblxcbmZ1bmN0aW9uIHB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwYXRjaCwgX3JlZikge1xcbiAgdmFyIGFyZVN0YXRlc0VxdWFsID0gX3JlZi5hcmVTdGF0ZXNFcXVhbCxcXG4gICAgICBhcmVPd25Qcm9wc0VxdWFsID0gX3JlZi5hcmVPd25Qcm9wc0VxdWFsLFxcbiAgICAgIGFyZVN0YXRlUHJvcHNFcXVhbCA9IF9yZWYuYXJlU3RhdGVQcm9wc0VxdWFsO1xcblxcbiAgdmFyIGhhc1J1bkF0TGVhc3RPbmNlID0gZmFsc2U7XFxuICB2YXIgc3RhdGUgPSB2b2lkIDA7XFxuICB2YXIgb3duUHJvcHMgPSB2b2lkIDA7XFxuICB2YXIgc3RhdGVQcm9wcyA9IHZvaWQgMDtcXG4gIHZhciBkaXNwYXRjaFByb3BzID0gdm9pZCAwO1xcbiAgdmFyIG1lcmdlZFByb3BzID0gdm9pZCAwO1xcblxcbiAgZnVuY3Rpb24gaGFuZGxlRmlyc3RDYWxsKGZpcnN0U3RhdGUsIGZpcnN0T3duUHJvcHMpIHtcXG4gICAgc3RhdGUgPSBmaXJzdFN0YXRlO1xcbiAgICBvd25Qcm9wcyA9IGZpcnN0T3duUHJvcHM7XFxuICAgIHN0YXRlUHJvcHMgPSBtYXBTdGF0ZVRvUHJvcHMoc3RhdGUsIG93blByb3BzKTtcXG4gICAgZGlzcGF0Y2hQcm9wcyA9IG1hcERpc3BhdGNoVG9Qcm9wcyhkaXNwYXRjaCwgb3duUHJvcHMpO1xcbiAgICBtZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xcbiAgICBoYXNSdW5BdExlYXN0T25jZSA9IHRydWU7XFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZU5ld1Byb3BzQW5kTmV3U3RhdGUoKSB7XFxuICAgIHN0YXRlUHJvcHMgPSBtYXBTdGF0ZVRvUHJvcHMoc3RhdGUsIG93blByb3BzKTtcXG5cXG4gICAgaWYgKG1hcERpc3BhdGNoVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgZGlzcGF0Y2hQcm9wcyA9IG1hcERpc3BhdGNoVG9Qcm9wcyhkaXNwYXRjaCwgb3duUHJvcHMpO1xcblxcbiAgICBtZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xcbiAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBoYW5kbGVOZXdQcm9wcygpIHtcXG4gICAgaWYgKG1hcFN0YXRlVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcblxcbiAgICBpZiAobWFwRGlzcGF0Y2hUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuXFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZU5ld1N0YXRlKCkge1xcbiAgICB2YXIgbmV4dFN0YXRlUHJvcHMgPSBtYXBTdGF0ZVRvUHJvcHMoc3RhdGUsIG93blByb3BzKTtcXG4gICAgdmFyIHN0YXRlUHJvcHNDaGFuZ2VkID0gIWFyZVN0YXRlUHJvcHNFcXVhbChuZXh0U3RhdGVQcm9wcywgc3RhdGVQcm9wcyk7XFxuICAgIHN0YXRlUHJvcHMgPSBuZXh0U3RhdGVQcm9wcztcXG5cXG4gICAgaWYgKHN0YXRlUHJvcHNDaGFuZ2VkKSBtZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xcblxcbiAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBoYW5kbGVTdWJzZXF1ZW50Q2FsbHMobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpIHtcXG4gICAgdmFyIHByb3BzQ2hhbmdlZCA9ICFhcmVPd25Qcm9wc0VxdWFsKG5leHRPd25Qcm9wcywgb3duUHJvcHMpO1xcbiAgICB2YXIgc3RhdGVDaGFuZ2VkID0gIWFyZVN0YXRlc0VxdWFsKG5leHRTdGF0ZSwgc3RhdGUpO1xcbiAgICBzdGF0ZSA9IG5leHRTdGF0ZTtcXG4gICAgb3duUHJvcHMgPSBuZXh0T3duUHJvcHM7XFxuXFxuICAgIGlmIChwcm9wc0NoYW5nZWQgJiYgc3RhdGVDaGFuZ2VkKSByZXR1cm4gaGFuZGxlTmV3UHJvcHNBbmROZXdTdGF0ZSgpO1xcbiAgICBpZiAocHJvcHNDaGFuZ2VkKSByZXR1cm4gaGFuZGxlTmV3UHJvcHMoKTtcXG4gICAgaWYgKHN0YXRlQ2hhbmdlZCkgcmV0dXJuIGhhbmRsZU5ld1N0YXRlKCk7XFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIHJldHVybiBmdW5jdGlvbiBwdXJlRmluYWxQcm9wc1NlbGVjdG9yKG5leHRTdGF0ZSwgbmV4dE93blByb3BzKSB7XFxuICAgIHJldHVybiBoYXNSdW5BdExlYXN0T25jZSA/IGhhbmRsZVN1YnNlcXVlbnRDYWxscyhuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykgOiBoYW5kbGVGaXJzdENhbGwobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpO1xcbiAgfTtcXG59XFxuXFxuLy8gVE9ETzogQWRkIG1vcmUgY29tbWVudHNcXG5cXG4vLyBJZiBwdXJlIGlzIHRydWUsIHRoZSBzZWxlY3RvciByZXR1cm5lZCBieSBzZWxlY3RvckZhY3Rvcnkgd2lsbCBtZW1vaXplIGl0cyByZXN1bHRzLFxcbi8vIGFsbG93aW5nIGNvbm5lY3RBZHZhbmNlZCdzIHNob3VsZENvbXBvbmVudFVwZGF0ZSB0byByZXR1cm4gZmFsc2UgaWYgZmluYWxcXG4vLyBwcm9wcyBoYXZlIG5vdCBjaGFuZ2VkLiBJZiBmYWxzZSwgdGhlIHNlbGVjdG9yIHdpbGwgYWx3YXlzIHJldHVybiBhIG5ld1xcbi8vIG9iamVjdCBhbmQgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHdpbGwgYWx3YXlzIHJldHVybiB0cnVlLlxcblxcbmZ1bmN0aW9uIGZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkoZGlzcGF0Y2gsIF9yZWYyKSB7XFxuICB2YXIgaW5pdE1hcFN0YXRlVG9Qcm9wcyA9IF9yZWYyLmluaXRNYXBTdGF0ZVRvUHJvcHMsXFxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyA9IF9yZWYyLmluaXRNYXBEaXNwYXRjaFRvUHJvcHMsXFxuICAgICAgaW5pdE1lcmdlUHJvcHMgPSBfcmVmMi5pbml0TWVyZ2VQcm9wcyxcXG4gICAgICBvcHRpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBbJ2luaXRNYXBTdGF0ZVRvUHJvcHMnLCAnaW5pdE1hcERpc3BhdGNoVG9Qcm9wcycsICdpbml0TWVyZ2VQcm9wcyddKTtcXG5cXG4gIHZhciBtYXBTdGF0ZVRvUHJvcHMgPSBpbml0TWFwU3RhdGVUb1Byb3BzKGRpc3BhdGNoLCBvcHRpb25zKTtcXG4gIHZhciBtYXBEaXNwYXRjaFRvUHJvcHMgPSBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvcHRpb25zKTtcXG4gIHZhciBtZXJnZVByb3BzID0gaW5pdE1lcmdlUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcblxcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fdmVyaWZ5U3Vic2VsZWN0b3JzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgb3B0aW9ucy5kaXNwbGF5TmFtZSk7XFxuICB9XFxuXFxuICB2YXIgc2VsZWN0b3JGYWN0b3J5ID0gb3B0aW9ucy5wdXJlID8gcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkgOiBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5O1xcblxcbiAgcmV0dXJuIHNlbGVjdG9yRmFjdG9yeShtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbn1cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMjExICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB2ZXJpZnlTdWJzZWxlY3RvcnM7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fdXRpbHNfd2FybmluZ19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XFxuXFxuXFxuZnVuY3Rpb24gdmVyaWZ5KHNlbGVjdG9yLCBtZXRob2ROYW1lLCBkaXNwbGF5TmFtZSkge1xcbiAgaWYgKCFzZWxlY3Rvcikge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgdmFsdWUgZm9yICcgKyBtZXRob2ROYW1lICsgJyBpbiAnICsgZGlzcGxheU5hbWUgKyAnLicpO1xcbiAgfSBlbHNlIGlmIChtZXRob2ROYW1lID09PSAnbWFwU3RhdGVUb1Byb3BzJyB8fCBtZXRob2ROYW1lID09PSAnbWFwRGlzcGF0Y2hUb1Byb3BzJykge1xcbiAgICBpZiAoIXNlbGVjdG9yLmhhc093blByb3BlcnR5KCdkZXBlbmRzT25Pd25Qcm9wcycpKSB7XFxuICAgICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fdXRpbHNfd2FybmluZ19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoJ1RoZSBzZWxlY3RvciBmb3IgJyArIG1ldGhvZE5hbWUgKyAnIG9mICcgKyBkaXNwbGF5TmFtZSArICcgZGlkIG5vdCBzcGVjaWZ5IGEgdmFsdWUgZm9yIGRlcGVuZHNPbk93blByb3BzLicpO1xcbiAgICB9XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIHZlcmlmeVN1YnNlbGVjdG9ycyhtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgZGlzcGxheU5hbWUpIHtcXG4gIHZlcmlmeShtYXBTdGF0ZVRvUHJvcHMsICdtYXBTdGF0ZVRvUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxuICB2ZXJpZnkobWFwRGlzcGF0Y2hUb1Byb3BzLCAnbWFwRGlzcGF0Y2hUb1Byb3BzJywgZGlzcGxheU5hbWUpO1xcbiAgdmVyaWZ5KG1lcmdlUHJvcHMsICdtZXJnZVByb3BzJywgZGlzcGxheU5hbWUpO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBnZXREaXNwbGF5TmFtZSA9IGZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKENvbXApIHtcXG4gIHJldHVybiBDb21wLmRpc3BsYXlOYW1lIHx8IENvbXAubmFtZSB8fCAnQ29tcG9uZW50JztcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldERpc3BsYXlOYW1lKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19TdWJtaXNzaW9uRXJyb3JfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzkpO1xcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxcblxcblxcblxcblxcbnZhciBoYW5kbGVTdWJtaXQgPSBmdW5jdGlvbiBoYW5kbGVTdWJtaXQoc3VibWl0LCBwcm9wcywgdmFsaWQsIGFzeW5jVmFsaWRhdGUsIGZpZWxkcykge1xcbiAgdmFyIGRpc3BhdGNoID0gcHJvcHMuZGlzcGF0Y2gsXFxuICAgICAgb25TdWJtaXRGYWlsID0gcHJvcHMub25TdWJtaXRGYWlsLFxcbiAgICAgIG9uU3VibWl0U3VjY2VzcyA9IHByb3BzLm9uU3VibWl0U3VjY2VzcyxcXG4gICAgICBzdGFydFN1Ym1pdCA9IHByb3BzLnN0YXJ0U3VibWl0LFxcbiAgICAgIHN0b3BTdWJtaXQgPSBwcm9wcy5zdG9wU3VibWl0LFxcbiAgICAgIHNldFN1Ym1pdEZhaWxlZCA9IHByb3BzLnNldFN1Ym1pdEZhaWxlZCxcXG4gICAgICBzZXRTdWJtaXRTdWNjZWVkZWQgPSBwcm9wcy5zZXRTdWJtaXRTdWNjZWVkZWQsXFxuICAgICAgc3luY0Vycm9ycyA9IHByb3BzLnN5bmNFcnJvcnMsXFxuICAgICAgdG91Y2ggPSBwcm9wcy50b3VjaCxcXG4gICAgICB2YWx1ZXMgPSBwcm9wcy52YWx1ZXMsXFxuICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9ycyA9IHByb3BzLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnM7XFxuXFxuXFxuICB0b3VjaC5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShmaWVsZHMpKTsgLy8gbWFyayBhbGwgZmllbGRzIGFzIHRvdWNoZWRcXG5cXG4gIGlmICh2YWxpZCB8fCBwZXJzaXN0ZW50U3VibWl0RXJyb3JzKSB7XFxuICAgIHZhciBkb1N1Ym1pdCA9IGZ1bmN0aW9uIGRvU3VibWl0KCkge1xcbiAgICAgIHZhciByZXN1bHQgPSB2b2lkIDA7XFxuICAgICAgdHJ5IHtcXG4gICAgICAgIHJlc3VsdCA9IHN1Ym1pdCh2YWx1ZXMsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgfSBjYXRjaCAoc3VibWl0RXJyb3IpIHtcXG4gICAgICAgIHZhciBlcnJvciA9IHN1Ym1pdEVycm9yIGluc3RhbmNlb2YgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19TdWJtaXNzaW9uRXJyb3JfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gPyBzdWJtaXRFcnJvci5lcnJvcnMgOiB1bmRlZmluZWQ7XFxuICAgICAgICBzdG9wU3VibWl0KGVycm9yKTtcXG4gICAgICAgIHNldFN1Ym1pdEZhaWxlZC5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShmaWVsZHMpKTtcXG4gICAgICAgIGlmIChvblN1Ym1pdEZhaWwpIHtcXG4gICAgICAgICAgb25TdWJtaXRGYWlsKGVycm9yLCBkaXNwYXRjaCwgc3VibWl0RXJyb3IsIHByb3BzKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChlcnJvciB8fCBvblN1Ym1pdEZhaWwpIHtcXG4gICAgICAgICAgLy8gaWYgeW91J3ZlIHByb3ZpZGVkIGFuIG9uU3VibWl0RmFpbCBjYWxsYmFjaywgZG9uJ3QgcmUtdGhyb3cgdGhlIGVycm9yXFxuICAgICAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHRocm93IHN1Ym1pdEVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBpZiAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0KCkocmVzdWx0KSkge1xcbiAgICAgICAgc3RhcnRTdWJtaXQoKTtcXG4gICAgICAgIHJldHVybiByZXN1bHQudGhlbihmdW5jdGlvbiAoc3VibWl0UmVzdWx0KSB7XFxuICAgICAgICAgIHN0b3BTdWJtaXQoKTtcXG4gICAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkKCk7XFxuICAgICAgICAgIGlmIChvblN1Ym1pdFN1Y2Nlc3MpIHtcXG4gICAgICAgICAgICBvblN1Ym1pdFN1Y2Nlc3Moc3VibWl0UmVzdWx0LCBkaXNwYXRjaCwgcHJvcHMpO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIHJldHVybiBzdWJtaXRSZXN1bHQ7XFxuICAgICAgICB9LCBmdW5jdGlvbiAoc3VibWl0RXJyb3IpIHtcXG4gICAgICAgICAgdmFyIGVycm9yID0gc3VibWl0RXJyb3IgaW5zdGFuY2VvZiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IHN1Ym1pdEVycm9yLmVycm9ycyA6IHVuZGVmaW5lZDtcXG4gICAgICAgICAgc3RvcFN1Ym1pdChlcnJvcik7XFxuICAgICAgICAgIHNldFN1Ym1pdEZhaWxlZC5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShmaWVsZHMpKTtcXG4gICAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICAgIG9uU3VibWl0RmFpbChlcnJvciwgZGlzcGF0Y2gsIHN1Ym1pdEVycm9yLCBwcm9wcyk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgaWYgKGVycm9yIHx8IG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICAgIC8vIGlmIHlvdSd2ZSBwcm92aWRlZCBhbiBvblN1Ym1pdEZhaWwgY2FsbGJhY2ssIGRvbid0IHJlLXRocm93IHRoZSBlcnJvclxcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB0aHJvdyBzdWJtaXRFcnJvcjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHNldFN1Ym1pdFN1Y2NlZWRlZCgpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0U3VjY2Vzcykge1xcbiAgICAgICAgICBvblN1Ym1pdFN1Y2Nlc3MocmVzdWx0LCBkaXNwYXRjaCwgcHJvcHMpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9O1xcblxcbiAgICB2YXIgYXN5bmNWYWxpZGF0ZVJlc3VsdCA9IGFzeW5jVmFsaWRhdGUgJiYgYXN5bmNWYWxpZGF0ZSgpO1xcbiAgICBpZiAoYXN5bmNWYWxpZGF0ZVJlc3VsdCkge1xcbiAgICAgIHJldHVybiBhc3luY1ZhbGlkYXRlUmVzdWx0LnRoZW4oZnVuY3Rpb24gKGFzeW5jRXJyb3JzKSB7XFxuICAgICAgICBpZiAoYXN5bmNFcnJvcnMpIHtcXG4gICAgICAgICAgdGhyb3cgYXN5bmNFcnJvcnM7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZG9TdWJtaXQoKTtcXG4gICAgICB9KS5jYXRjaChmdW5jdGlvbiAoYXN5bmNFcnJvcnMpIHtcXG4gICAgICAgIHNldFN1Ym1pdEZhaWxlZC5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShmaWVsZHMpKTtcXG4gICAgICAgIGlmIChvblN1Ym1pdEZhaWwpIHtcXG4gICAgICAgICAgb25TdWJtaXRGYWlsKGFzeW5jRXJyb3JzLCBkaXNwYXRjaCwgbnVsbCwgcHJvcHMpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGFzeW5jRXJyb3JzKTtcXG4gICAgICB9KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXR1cm4gZG9TdWJtaXQoKTtcXG4gICAgfVxcbiAgfSBlbHNlIHtcXG4gICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICBpZiAob25TdWJtaXRGYWlsKSB7XFxuICAgICAgb25TdWJtaXRGYWlsKHN5bmNFcnJvcnMsIGRpc3BhdGNoLCBudWxsLCBwcm9wcyk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHN5bmNFcnJvcnM7XFxuICB9XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYW5kbGVTdWJtaXQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5mdW5jdGlvbiBfZXh0ZW5kYWJsZUJ1aWx0aW4oY2xzKSB7XFxuICBmdW5jdGlvbiBFeHRlbmRhYmxlQnVpbHRpbigpIHtcXG4gICAgY2xzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XFxuICB9XFxuXFxuICBFeHRlbmRhYmxlQnVpbHRpbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNscy5wcm90b3R5cGUsIHtcXG4gICAgY29uc3RydWN0b3I6IHtcXG4gICAgICB2YWx1ZTogY2xzLFxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxcbiAgICB9XFxuICB9KTtcXG5cXG4gIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKEV4dGVuZGFibGVCdWlsdGluLCBjbHMpO1xcbiAgfSBlbHNlIHtcXG4gICAgRXh0ZW5kYWJsZUJ1aWx0aW4uX19wcm90b19fID0gY2xzO1xcbiAgfVxcblxcbiAgcmV0dXJuIEV4dGVuZGFibGVCdWlsdGluO1xcbn1cXG5cXG52YXIgRXh0ZW5kYWJsZUVycm9yID0gZnVuY3Rpb24gKF9leHRlbmRhYmxlQnVpbHRpbjIpIHtcXG4gIF9pbmhlcml0cyhFeHRlbmRhYmxlRXJyb3IsIF9leHRlbmRhYmxlQnVpbHRpbjIpO1xcblxcbiAgZnVuY3Rpb24gRXh0ZW5kYWJsZUVycm9yKCkge1xcbiAgICB2YXIgbWVzc2FnZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJyc7XFxuXFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFeHRlbmRhYmxlRXJyb3IpO1xcblxcbiAgICAvLyBleHRlbmRpbmcgRXJyb3IgaXMgd2VpcmQgYW5kIGRvZXMgbm90IHByb3BhZ2F0ZSBgbWVzc2FnZWBcXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEV4dGVuZGFibGVFcnJvci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEV4dGVuZGFibGVFcnJvcikpLmNhbGwodGhpcywgbWVzc2FnZSkpO1xcblxcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICdtZXNzYWdlJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogbWVzc2FnZSxcXG4gICAgICB3cml0YWJsZTogdHJ1ZVxcbiAgICB9KTtcXG5cXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXFxuICAgICAgdmFsdWU6IF90aGlzLmNvbnN0cnVjdG9yLm5hbWUsXFxuICAgICAgd3JpdGFibGU6IHRydWVcXG4gICAgfSk7XFxuXFxuICAgIGlmIChFcnJvci5oYXNPd25Qcm9wZXJ0eSgnY2FwdHVyZVN0YWNrVHJhY2UnKSkge1xcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKF90aGlzLCBfdGhpcy5jb25zdHJ1Y3Rvcik7XFxuICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzKTtcXG4gICAgfVxcblxcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICdzdGFjaycsIHtcXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXFxuICAgICAgdmFsdWU6IG5ldyBFcnJvcihtZXNzYWdlKS5zdGFjayxcXG4gICAgICB3cml0YWJsZTogdHJ1ZVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIF90aGlzO1xcbiAgfVxcblxcbiAgcmV0dXJuIEV4dGVuZGFibGVFcnJvcjtcXG59KF9leHRlbmRhYmxlQnVpbHRpbihFcnJvcikpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKEV4dGVuZGFibGVFcnJvcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjE1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zaWxlbmNlRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODApO1xcblxcblxcbnZhciBzaWxlbmNlRXZlbnRzID0gZnVuY3Rpb24gc2lsZW5jZUV2ZW50cyhmbikge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc2lsZW5jZUV2ZW50X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCkgPyBmbi5hcHBseSh1bmRlZmluZWQsIGFyZ3MpIDogZm4uYXBwbHkodW5kZWZpbmVkLCBbZXZlbnRdLmNvbmNhdChhcmdzKSk7XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2lsZW5jZUV2ZW50cyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfXyk7XFxuXFxuXFxudmFyIGFzeW5jVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIGFzeW5jVmFsaWRhdGlvbihmbiwgc3RhcnQsIHN0b3AsIGZpZWxkKSB7XFxuICBzdGFydChmaWVsZCk7XFxuICB2YXIgcHJvbWlzZSA9IGZuKCk7XFxuICBpZiAoIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX19fZGVmYXVsdCgpKHByb21pc2UpKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignYXN5bmNWYWxpZGF0ZSBmdW5jdGlvbiBwYXNzZWQgdG8gcmVkdXhGb3JtIG11c3QgcmV0dXJuIGEgcHJvbWlzZScpO1xcbiAgfVxcbiAgdmFyIGhhbmRsZUVycm9ycyA9IGZ1bmN0aW9uIGhhbmRsZUVycm9ycyhyZWplY3RlZCkge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGVycm9ycykge1xcbiAgICAgIGlmIChlcnJvcnMgJiYgT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICAgIHN0b3AoZXJyb3JzKTtcXG4gICAgICAgIHJldHVybiBlcnJvcnM7XFxuICAgICAgfSBlbHNlIGlmIChyZWplY3RlZCkge1xcbiAgICAgICAgc3RvcCgpO1xcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc3luY2hyb25vdXMgdmFsaWRhdGlvbiBwcm9taXNlIHdhcyByZWplY3RlZCB3aXRob3V0IGVycm9ycy4nKTtcXG4gICAgICB9XFxuICAgICAgc3RvcCgpO1xcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcXG4gICAgfTtcXG4gIH07XFxuICByZXR1cm4gcHJvbWlzZS50aGVuKGhhbmRsZUVycm9ycyhmYWxzZSksIGhhbmRsZUVycm9ycyh0cnVlKSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3luY1ZhbGlkYXRpb24pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGRlZmF1bHRTaG91bGRBc3luY1ZhbGlkYXRlID0gZnVuY3Rpb24gZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUoX3JlZikge1xcbiAgdmFyIGluaXRpYWxpemVkID0gX3JlZi5pbml0aWFsaXplZCxcXG4gICAgICB0cmlnZ2VyID0gX3JlZi50cmlnZ2VyLFxcbiAgICAgIHByaXN0aW5lID0gX3JlZi5wcmlzdGluZSxcXG4gICAgICBzeW5jVmFsaWRhdGlvblBhc3NlcyA9IF9yZWYuc3luY1ZhbGlkYXRpb25QYXNzZXM7XFxuXFxuICBpZiAoIXN5bmNWYWxpZGF0aW9uUGFzc2VzKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHN3aXRjaCAodHJpZ2dlcikge1xcbiAgICBjYXNlICdibHVyJzpcXG4gICAgICAvLyBibHVycmluZ1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICBjYXNlICdzdWJtaXQnOlxcbiAgICAgIC8vIHN1Ym1pdHRpbmcsIHNvIG9ubHkgYXN5bmMgdmFsaWRhdGUgaWYgZm9ybSBpcyBkaXJ0eSBvciB3YXMgbmV2ZXIgaW5pdGlhbGl6ZWRcXG4gICAgICAvLyBjb252ZXJzZWx5LCBET04nVCBhc3luYyB2YWxpZGF0ZSBpZiB0aGUgZm9ybSBpcyBwcmlzdGluZSBqdXN0IGFzIGl0IHdhcyBpbml0aWFsaXplZFxcbiAgICAgIHJldHVybiAhcHJpc3RpbmUgfHwgIWluaXRpYWxpemVkO1xcbiAgICBkZWZhdWx0OlxcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGRlZmF1bHRTaG91bGRBc3luY1ZhbGlkYXRlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBkZWZhdWx0U2hvdWxkVmFsaWRhdGUgPSBmdW5jdGlvbiBkZWZhdWx0U2hvdWxkVmFsaWRhdGUoX3JlZikge1xcbiAgdmFyIHZhbHVlcyA9IF9yZWYudmFsdWVzLFxcbiAgICAgIG5leHRQcm9wcyA9IF9yZWYubmV4dFByb3BzLFxcbiAgICAgIGluaXRpYWxSZW5kZXIgPSBfcmVmLmluaXRpYWxSZW5kZXIsXFxuICAgICAgbGFzdEZpZWxkVmFsaWRhdG9yS2V5cyA9IF9yZWYubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyxcXG4gICAgICBmaWVsZFZhbGlkYXRvcktleXMgPSBfcmVmLmZpZWxkVmFsaWRhdG9yS2V5cyxcXG4gICAgICBzdHJ1Y3R1cmUgPSBfcmVmLnN0cnVjdHVyZTtcXG5cXG4gIGlmIChpbml0aWFsUmVuZGVyKSB7XFxuICAgIHJldHVybiB0cnVlO1xcbiAgfVxcbiAgcmV0dXJuICFzdHJ1Y3R1cmUuZGVlcEVxdWFsKHZhbHVlcywgbmV4dFByb3BzLnZhbHVlcykgfHwgIXN0cnVjdHVyZS5kZWVwRXF1YWwobGFzdEZpZWxkVmFsaWRhdG9yS2V5cywgZmllbGRWYWxpZGF0b3JLZXlzKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGRlZmF1bHRTaG91bGRWYWxpZGF0ZSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH1cXG5cXG52YXIgc3BsaWNlID0gZnVuY3Rpb24gc3BsaWNlKGFycmF5LCBpbmRleCwgcmVtb3ZlTnVtLCB2YWx1ZSkge1xcbiAgYXJyYXkgPSBhcnJheSB8fCBbXTtcXG5cXG4gIGlmIChpbmRleCA8IGFycmF5Lmxlbmd0aCkge1xcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhcmVtb3ZlTnVtKSB7XFxuICAgICAgLy8gaW5zZXJ0aW5nIHVuZGVmaW5lZFxcbiAgICAgIHZhciBfY29weTIgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICAgICAgX2NvcHkyLnNwbGljZShpbmRleCwgMCwgbnVsbCk7XFxuICAgICAgX2NvcHkyW2luZGV4XSA9IHVuZGVmaW5lZDtcXG4gICAgICByZXR1cm4gX2NvcHkyO1xcbiAgICB9XFxuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XFxuICAgICAgdmFyIF9jb3B5MyA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTtcXG4gICAgICBfY29weTMuc3BsaWNlKGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKTsgLy8gcmVtb3ZpbmcgYW5kIGFkZGluZ1xcbiAgICAgIHJldHVybiBfY29weTM7XFxuICAgIH1cXG4gICAgdmFyIF9jb3B5ID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhcnJheSkpO1xcbiAgICBfY29weS5zcGxpY2UoaW5kZXgsIHJlbW92ZU51bSk7IC8vIHJlbW92aW5nXFxuICAgIHJldHVybiBfY29weTtcXG4gIH1cXG4gIGlmIChyZW1vdmVOdW0pIHtcXG4gICAgLy8gdHJ5aW5nIHRvIHJlbW92ZSBub24tZXhpc3RhbnQgaXRlbTogcmV0dXJuIG9yaWdpbmFsIGFycmF5XFxuICAgIHJldHVybiBhcnJheTtcXG4gIH1cXG4gIC8vIHRyeWluZyB0byBhZGQgb3V0c2lkZSBvZiByYW5nZToganVzdCBzZXQgdmFsdWVcXG4gIHZhciBjb3B5ID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhcnJheSkpO1xcbiAgY29weVtpbmRleF0gPSB2YWx1ZTtcXG4gIHJldHVybiBjb3B5O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3BsaWNlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XFxuXFxuXFxuXFxudmFyIGdldEluID0gZnVuY3Rpb24gZ2V0SW4oc3RhdGUsIGZpZWxkKSB7XFxuICBpZiAoIXN0YXRlKSB7XFxuICAgIHJldHVybiBzdGF0ZTtcXG4gIH1cXG5cXG4gIHZhciBwYXRoID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmaWVsZCk7XFxuICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XFxuICBpZiAoIWxlbmd0aCkge1xcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xcbiAgfVxcblxcbiAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggJiYgISFyZXN1bHQ7ICsraSkge1xcbiAgICByZXN1bHQgPSByZXN1bHRbcGF0aFtpXV07XFxuICB9XFxuXFxuICByZXR1cm4gcmVzdWx0O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0SW4pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxudmFyIHNldEluV2l0aFBhdGggPSBmdW5jdGlvbiBzZXRJbldpdGhQYXRoKHN0YXRlLCB2YWx1ZSwgcGF0aCwgcGF0aEluZGV4KSB7XFxuICBpZiAocGF0aEluZGV4ID49IHBhdGgubGVuZ3RoKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG5cXG4gIHZhciBmaXJzdCA9IHBhdGhbcGF0aEluZGV4XTtcXG4gIHZhciBuZXh0ID0gc2V0SW5XaXRoUGF0aChzdGF0ZSAmJiBzdGF0ZVtmaXJzdF0sIHZhbHVlLCBwYXRoLCBwYXRoSW5kZXggKyAxKTtcXG5cXG4gIGlmICghc3RhdGUpIHtcXG4gICAgdmFyIGluaXRpYWxpemVkID0gaXNOYU4oZmlyc3QpID8ge30gOiBbXTtcXG4gICAgaW5pdGlhbGl6ZWRbZmlyc3RdID0gbmV4dDtcXG4gICAgcmV0dXJuIGluaXRpYWxpemVkO1xcbiAgfVxcblxcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgIHZhciBjb3B5ID0gW10uY29uY2F0KHN0YXRlKTtcXG4gICAgY29weVtmaXJzdF0gPSBuZXh0O1xcbiAgICByZXR1cm4gY29weTtcXG4gIH1cXG5cXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgZmlyc3QsIG5leHQpKTtcXG59O1xcblxcbnZhciBzZXRJbiA9IGZ1bmN0aW9uIHNldEluKHN0YXRlLCBmaWVsZCwgdmFsdWUpIHtcXG4gIHJldHVybiBzZXRJbldpdGhQYXRoKHN0YXRlLCB2YWx1ZSwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmaWVsZCksIDApO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2V0SW4pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODIpO1xcblxcblxcblxcbnZhciBjdXN0b21pemVyID0gZnVuY3Rpb24gY3VzdG9taXplcihvYmosIG90aGVyKSB7XFxuICBpZiAob2JqID09PSBvdGhlcikgcmV0dXJuIHRydWU7XFxuICBpZiAoKG9iaiA9PSBudWxsIHx8IG9iaiA9PT0gJycgfHwgb2JqID09PSBmYWxzZSkgJiYgKG90aGVyID09IG51bGwgfHwgb3RoZXIgPT09ICcnIHx8IG90aGVyID09PSBmYWxzZSkpIHJldHVybiB0cnVlO1xcblxcbiAgaWYgKG9iaiAmJiBvdGhlciAmJiBvYmouX2Vycm9yICE9PSBvdGhlci5fZXJyb3IpIHJldHVybiBmYWxzZTtcXG4gIGlmIChvYmogJiYgb3RoZXIgJiYgb2JqLl93YXJuaW5nICE9PSBvdGhlci5fd2FybmluZykgcmV0dXJuIGZhbHNlO1xcbn07XFxuXFxudmFyIGRlZXBFcXVhbCA9IGZ1bmN0aW9uIGRlZXBFcXVhbChhLCBiKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGEsIGIsIGN1c3RvbWl6ZXIpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVlcEVxdWFsKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XFxuXFxuXFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxcblxcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxcblxcbnZhciBkZWxldGVJbldpdGhQYXRoID0gZnVuY3Rpb24gZGVsZXRlSW5XaXRoUGF0aChzdGF0ZSwgZmlyc3QpIHtcXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICByZXN0W19rZXkgLSAyXSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gIH1cXG5cXG4gIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkIHx8IGZpcnN0ID09PSB1bmRlZmluZWQpIHtcXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcbiAgaWYgKHJlc3QubGVuZ3RoKSB7XFxuICAgIGlmIChBcnJheS5pc0FycmF5KHN0YXRlKSkge1xcbiAgICAgIGlmIChmaXJzdCA8IHN0YXRlLmxlbmd0aCkge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGRlbGV0ZUluV2l0aFBhdGguYXBwbHkodW5kZWZpbmVkLCBbc3RhdGUgJiYgc3RhdGVbZmlyc3RdXS5jb25jYXQocmVzdCkpO1xcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gc3RhdGVbZmlyc3RdKSB7XFxuICAgICAgICAgIHZhciBjb3B5ID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShzdGF0ZSkpO1xcbiAgICAgICAgICBjb3B5W2ZpcnN0XSA9IHJlc3VsdDtcXG4gICAgICAgICAgcmV0dXJuIGNvcHk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBzdGF0ZTtcXG4gICAgfVxcbiAgICBpZiAoZmlyc3QgaW4gc3RhdGUpIHtcXG4gICAgICB2YXIgX3Jlc3VsdCA9IGRlbGV0ZUluV2l0aFBhdGguYXBwbHkodW5kZWZpbmVkLCBbc3RhdGUgJiYgc3RhdGVbZmlyc3RdXS5jb25jYXQocmVzdCkpO1xcbiAgICAgIHJldHVybiBzdGF0ZVtmaXJzdF0gPT09IF9yZXN1bHQgPyBzdGF0ZSA6IF9leHRlbmRzKHt9LCBzdGF0ZSwgX2RlZmluZVByb3BlcnR5KHt9LCBmaXJzdCwgX3Jlc3VsdCkpO1xcbiAgICB9XFxuICAgIHJldHVybiBzdGF0ZTtcXG4gIH1cXG4gIGlmIChBcnJheS5pc0FycmF5KHN0YXRlKSkge1xcbiAgICBpZiAoaXNOYU4oZmlyc3QpKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGVsZXRlIG5vbi1udW1lcmljYWwgaW5kZXggZnJvbSBhbiBhcnJheScpO1xcbiAgICB9XFxuICAgIGlmIChmaXJzdCA8IHN0YXRlLmxlbmd0aCkge1xcbiAgICAgIHZhciBfY29weSA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoc3RhdGUpKTtcXG4gICAgICBfY29weS5zcGxpY2UoZmlyc3QsIDEpO1xcbiAgICAgIHJldHVybiBfY29weTtcXG4gICAgfVxcbiAgICByZXR1cm4gc3RhdGU7XFxuICB9XFxuICBpZiAoZmlyc3QgaW4gc3RhdGUpIHtcXG4gICAgdmFyIF9jb3B5MiA9IF9leHRlbmRzKHt9LCBzdGF0ZSk7XFxuICAgIGRlbGV0ZSBfY29weTJbZmlyc3RdO1xcbiAgICByZXR1cm4gX2NvcHkyO1xcbiAgfVxcbiAgcmV0dXJuIHN0YXRlO1xcbn07XFxuXFxudmFyIGRlbGV0ZUluID0gZnVuY3Rpb24gZGVsZXRlSW4oc3RhdGUsIGZpZWxkKSB7XFxuICByZXR1cm4gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKSkpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGRlbGV0ZUluKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBrZXlzID0gZnVuY3Rpb24ga2V5cyh2YWx1ZSkge1xcbiAgcmV0dXJuIHZhbHVlID8gT2JqZWN0LmtleXModmFsdWUpIDogW107XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChrZXlzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMjUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG5cXG5cXG52YXIgdG9BcnJheSA9IGZ1bmN0aW9uIHRvQXJyYXkodmFsdWUpIHtcXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcXG59O1xcblxcbnZhciBnZXRFcnJvciA9IGZ1bmN0aW9uIGdldEVycm9yKHZhbHVlLCB2YWx1ZXMsIHByb3BzLCB2YWxpZGF0b3JzKSB7XFxuICB2YXIgYXJyYXkgPSB0b0FycmF5KHZhbGlkYXRvcnMpO1xcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xcbiAgICB2YXIgZXJyb3IgPSBhcnJheVtpXSh2YWx1ZSwgdmFsdWVzLCBwcm9wcyk7XFxuICAgIGlmIChlcnJvcikge1xcbiAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgfVxcbiAgfVxcbn07XFxuXFxudmFyIGdlbmVyYXRlVmFsaWRhdG9yID0gZnVuY3Rpb24gZ2VuZXJhdGVWYWxpZGF0b3IodmFsaWRhdG9ycywgX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWVzLCBwcm9wcykge1xcbiAgICB2YXIgZXJyb3JzID0ge307XFxuICAgIE9iamVjdC5rZXlzKHZhbGlkYXRvcnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICB2YXIgdmFsdWUgPSBnZXRJbih2YWx1ZXMsIG5hbWUpO1xcbiAgICAgIHZhciBlcnJvciA9IGdldEVycm9yKHZhbHVlLCB2YWx1ZXMsIHByb3BzLCB2YWxpZGF0b3JzW25hbWVdKTtcXG4gICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgIGVycm9ycyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGVycm9ycywgbmFtZSwgZXJyb3IpO1xcbiAgICAgIH1cXG4gICAgfSk7XFxuICAgIHJldHVybiBlcnJvcnM7XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2VuZXJhdGVWYWxpZGF0b3IpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGdldEVycm9yS2V5cyA9IGZ1bmN0aW9uIGdldEVycm9yS2V5cyhuYW1lLCB0eXBlKSB7XFxuICBzd2l0Y2ggKHR5cGUpIHtcXG4gICAgY2FzZSAnRmllbGQnOlxcbiAgICAgIHJldHVybiBbbmFtZSwgbmFtZSArICcuX2Vycm9yJ107XFxuICAgIGNhc2UgJ0ZpZWxkQXJyYXknOlxcbiAgICAgIHJldHVybiBbbmFtZSArICcuX2Vycm9yJ107XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGZpZWxkIHR5cGUnKTtcXG4gIH1cXG59O1xcblxcbnZhciBjcmVhdGVIYXNFcnJvciA9IGZ1bmN0aW9uIGNyZWF0ZUhhc0Vycm9yKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuXFxuICB2YXIgaGFzRXJyb3IgPSBmdW5jdGlvbiBoYXNFcnJvcihmaWVsZCwgc3luY0Vycm9ycywgYXN5bmNFcnJvcnMsIHN1Ym1pdEVycm9ycykge1xcbiAgICBpZiAoIXN5bmNFcnJvcnMgJiYgIWFzeW5jRXJyb3JzICYmICFzdWJtaXRFcnJvcnMpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG5cXG4gICAgdmFyIG5hbWUgPSBnZXRJbihmaWVsZCwgJ25hbWUnKTtcXG4gICAgdmFyIHR5cGUgPSBnZXRJbihmaWVsZCwgJ3R5cGUnKTtcXG4gICAgcmV0dXJuIGdldEVycm9yS2V5cyhuYW1lLCB0eXBlKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3luY0Vycm9ycywga2V5KSB8fCBnZXRJbihhc3luY0Vycm9ycywga2V5KSB8fCBnZXRJbihzdWJtaXRFcnJvcnMsIGtleSk7XFxuICAgIH0pO1xcbiAgfTtcXG4gIHJldHVybiBoYXNFcnJvcjtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUhhc0Vycm9yKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Db25uZWN0ZWRGaWVsZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcbnZhciBjcmVhdGVGaWVsZCA9IGZ1bmN0aW9uIGNyZWF0ZUZpZWxkKF9yZWYpIHtcXG4gIHZhciBkZWVwRXF1YWwgPSBfcmVmLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYuZ2V0SW4sXFxuICAgICAgc2V0SW4gPSBfcmVmLnNldEluLFxcbiAgICAgIHRvSlMgPSBfcmVmLnRvSlM7XFxuXFxuXFxuICB2YXIgQ29ubmVjdGVkRmllbGQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Db25uZWN0ZWRGaWVsZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoe1xcbiAgICBkZWVwRXF1YWw6IGRlZXBFcXVhbCxcXG4gICAgZ2V0SW46IGdldEluLFxcbiAgICB0b0pTOiB0b0pTXFxuICB9KTtcXG5cXG4gIHZhciBGaWVsZCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZCwgX0NvbXBvbmVudCk7XFxuXFxuICAgIGZ1bmN0aW9uIEZpZWxkKHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEZpZWxkKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGaWVsZCkpLmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWVsZCBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG5cXG4gICAgICBfdGhpcy5ub3JtYWxpemUgPSBfdGhpcy5ub3JtYWxpemUuYmluZChfdGhpcyk7XFxuICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuXFxuICAgIF9jcmVhdGVDbGFzcyhGaWVsZCwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsX3NoYWxsb3dDb21wYXJlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBuZXh0UHJvcHMsIG5leHRTdGF0ZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3Rlcih0aGlzLm5hbWUsICdGaWVsZCcsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5wcm9wcy52YWxpZGF0ZTtcXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5wcm9wcy53YXJuO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XFxuICAgICAgICBpZiAodGhpcy5wcm9wcy5uYW1lICE9PSBuZXh0UHJvcHMubmFtZSkge1xcbiAgICAgICAgICAvLyB1bnJlZ2lzdGVyIG9sZCBuYW1lXFxuICAgICAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXIodGhpcy5uYW1lKTtcXG4gICAgICAgICAgLy8gcmVnaXN0ZXIgbmV3IG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0ucmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLmNvbnRleHQsIG5leHRQcm9wcy5uYW1lKSwgJ0ZpZWxkJyk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcXG4gICAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXIodGhpcy5uYW1lKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh0aGlzLnByb3BzLndpdGhSZWYsICdJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZ2V0UmVuZGVyZWRDb21wb25lbnQoKSwgJyArICd5b3UgbXVzdCBzcGVjaWZ5IGEgd2l0aFJlZiBwcm9wIHRvIEZpZWxkJyk7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRSZW5kZXJlZENvbXBvbmVudCgpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ25vcm1hbGl6ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIG5vcm1hbGl6ZShuYW1lLCB2YWx1ZSkge1xcbiAgICAgICAgdmFyIG5vcm1hbGl6ZSA9IHRoaXMucHJvcHMubm9ybWFsaXplO1xcblxcbiAgICAgICAgaWYgKCFub3JtYWxpemUpIHtcXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIHByZXZpb3VzVmFsdWVzID0gdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0uZ2V0VmFsdWVzKCk7XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IHRoaXMudmFsdWU7XFxuICAgICAgICB2YXIgbmV4dFZhbHVlcyA9IHNldEluKHByZXZpb3VzVmFsdWVzLCBuYW1lLCB2YWx1ZSk7XFxuICAgICAgICByZXR1cm4gbm9ybWFsaXplKHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBuZXh0VmFsdWVzLCBwcmV2aW91c1ZhbHVlcyk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShDb25uZWN0ZWRGaWVsZCwgX2V4dGVuZHMoe30sIHRoaXMucHJvcHMsIHtcXG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxcbiAgICAgICAgICBub3JtYWxpemU6IHRoaXMubm9ybWFsaXplLFxcbiAgICAgICAgICBfcmVkdXhGb3JtOiB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgcmVmOiAnY29ubmVjdGVkJ1xcbiAgICAgICAgfSkpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ25hbWUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcy5jb250ZXh0LCB0aGlzLnByb3BzLm5hbWUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2RpcnR5JyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiAhdGhpcy5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5pc1ByaXN0aW5lKCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAndmFsdWUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQgJiYgdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRWYWx1ZSgpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gRmllbGQ7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBGaWVsZC5wcm9wVHlwZXMgPSB7XFxuICAgIG5hbWU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIGZvcm1hdDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIG5vcm1hbGl6ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIG9uQmx1cjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIG9uQ2hhbmdlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25Gb2N1czogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIG9uRHJhZ1N0YXJ0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25Ecm9wOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgcGFyc2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwcm9wczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdCxcXG4gICAgdmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUoW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYXJyYXlPZihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyldKSxcXG4gICAgd2FybjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5hcnJheU9mKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jKV0pLFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkLmNvbnRleHRUeXBlcyA9IHtcXG4gICAgX3JlZHV4Rm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdFxcbiAgfTtcXG5cXG4gIHJldHVybiBGaWVsZDtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUZpZWxkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMjggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2V2ZW50c19vbkNoYW5nZVZhbHVlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX2V2ZW50Q29uc3RzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgcHJvcHNUb05vdFVwZGF0ZUZvciA9IFsnX3JlZHV4Rm9ybSddO1xcblxcbnZhciBjcmVhdGVDb25uZWN0ZWRGaWVsZCA9IGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3RlZEZpZWxkKF9yZWYpIHtcXG4gIHZhciBkZWVwRXF1YWwgPSBfcmVmLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYuZ2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYudG9KUztcXG5cXG5cXG4gIHZhciBnZXRTeW5jRXJyb3IgPSBmdW5jdGlvbiBnZXRTeW5jRXJyb3Ioc3luY0Vycm9ycywgbmFtZSkge1xcbiAgICB2YXIgZXJyb3IgPSBnZXRJbihzeW5jRXJyb3JzLCBuYW1lKTtcXG4gICAgLy8gQmVjYXVzZSB0aGUgZXJyb3IgZm9yIHRoaXMgZmllbGQgbWlnaHQgbm90IGJlIGF0IGEgbGV2ZWwgaW4gdGhlIGVycm9yIHN0cnVjdHVyZSB3aGVyZVxcbiAgICAvLyBpdCBjYW4gYmUgc2V0IGRpcmVjdGx5LCBpdCBtaWdodCBuZWVkIHRvIGJlIHVud3JhcHBlZCBmcm9tIHRoZSBfZXJyb3IgcHJvcGVydHlcXG4gICAgcmV0dXJuIGVycm9yICYmIGVycm9yLl9lcnJvciA/IGVycm9yLl9lcnJvciA6IGVycm9yO1xcbiAgfTtcXG5cXG4gIHZhciBnZXRTeW5jV2FybmluZyA9IGZ1bmN0aW9uIGdldFN5bmNXYXJuaW5nKHN5bmNXYXJuaW5ncywgbmFtZSkge1xcbiAgICB2YXIgd2FybmluZyA9IGdldEluKHN5bmNXYXJuaW5ncywgbmFtZSk7XFxuICAgIC8vIEJlY2F1c2UgdGhlIHdhcm5pbmcgZm9yIHRoaXMgZmllbGQgbWlnaHQgbm90IGJlIGF0IGEgbGV2ZWwgaW4gdGhlIHdhcm5pbmcgc3RydWN0dXJlIHdoZXJlXFxuICAgIC8vIGl0IGNhbiBiZSBzZXQgZGlyZWN0bHksIGl0IG1pZ2h0IG5lZWQgdG8gYmUgdW53cmFwcGVkIGZyb20gdGhlIF93YXJuaW5nIHByb3BlcnR5XFxuICAgIHJldHVybiB3YXJuaW5nICYmIHdhcm5pbmcuX3dhcm5pbmcgPyB3YXJuaW5nLl93YXJuaW5nIDogd2FybmluZztcXG4gIH07XFxuXFxuICB2YXIgQ29ubmVjdGVkRmllbGQgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICBfaW5oZXJpdHMoQ29ubmVjdGVkRmllbGQsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZChwcm9wcykge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb25uZWN0ZWRGaWVsZCk7XFxuXFxuICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKENvbm5lY3RlZEZpZWxkLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ29ubmVjdGVkRmllbGQpKS5jYWxsKHRoaXMsIHByb3BzKSk7XFxuXFxuICAgICAgX3RoaXMuaGFuZGxlQ2hhbmdlID0gX3RoaXMuaGFuZGxlQ2hhbmdlLmJpbmQoX3RoaXMpO1xcbiAgICAgIF90aGlzLmhhbmRsZUZvY3VzID0gX3RoaXMuaGFuZGxlRm9jdXMuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlQmx1ciA9IF90aGlzLmhhbmRsZUJsdXIuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRHJhZ1N0YXJ0ID0gX3RoaXMuaGFuZGxlRHJhZ1N0YXJ0LmJpbmQoX3RoaXMpO1xcbiAgICAgIF90aGlzLmhhbmRsZURyb3AgPSBfdGhpcy5oYW5kbGVEcm9wLmJpbmQoX3RoaXMpO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGQsIFt7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICB2YXIgbmV4dFByb3BzS2V5cyA9IE9iamVjdC5rZXlzKG5leHRQcm9wcyk7XFxuICAgICAgICB2YXIgdGhpc1Byb3BzS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucHJvcHMpO1xcbiAgICAgICAgcmV0dXJuIG5leHRQcm9wc0tleXMubGVuZ3RoICE9PSB0aGlzUHJvcHNLZXlzLmxlbmd0aCB8fCBuZXh0UHJvcHNLZXlzLnNvbWUoZnVuY3Rpb24gKHByb3ApIHtcXG4gICAgICAgICAgcmV0dXJuICF+cHJvcHNUb05vdFVwZGF0ZUZvci5pbmRleE9mKHByb3ApICYmICFkZWVwRXF1YWwoX3RoaXMyLnByb3BzW3Byb3BdLCBuZXh0UHJvcHNbcHJvcF0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaXNQcmlzdGluZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzUHJpc3RpbmUoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRWYWx1ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudmFsdWU7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0UmVuZGVyZWRDb21wb25lbnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZW5kZXJlZENvbXBvbmVudCgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMucmVuZGVyZWRDb21wb25lbnQ7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlQ2hhbmdlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICBuYW1lID0gX3Byb3BzLm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgcGFyc2UgPSBfcHJvcHMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBvbkNoYW5nZSA9IF9wcm9wcy5vbkNoYW5nZSxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzLl9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IF9wcm9wcy52YWx1ZTtcXG5cXG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2V2ZW50c19vbkNoYW5nZVZhbHVlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCwgeyBuYW1lOiBuYW1lLCBwYXJzZTogcGFyc2UsIG5vcm1hbGl6ZTogbm9ybWFsaXplIH0pO1xcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkNoYW5nZSkge1xcbiAgICAgICAgICBvbkNoYW5nZShfZXh0ZW5kcyh7fSwgZXZlbnQsIHtcXG4gICAgICAgICAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gcHJldmVudERlZmF1bHQoKSB7XFxuICAgICAgICAgICAgICBkZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcXG4gICAgICAgICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfSksIG5ld1ZhbHVlLCBwcmV2aW91c1ZhbHVlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCkge1xcbiAgICAgICAgICAvLyBkaXNwYXRjaCBjaGFuZ2UgYWN0aW9uXFxuICAgICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uY2hhbmdlKG5hbWUsIG5ld1ZhbHVlKSk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRm9jdXMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMyLm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMyLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIG9uRm9jdXMgPSBfcHJvcHMyLm9uRm9jdXMsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczIuX3JlZHV4Rm9ybTtcXG5cXG5cXG4gICAgICAgIHZhciBkZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XFxuICAgICAgICBpZiAob25Gb2N1cykge1xcbiAgICAgICAgICBvbkZvY3VzKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoIWRlZmF1bHRQcmV2ZW50ZWQpIHtcXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5mb2N1cyhuYW1lKSk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlQmx1cicsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUJsdXIoZXZlbnQpIHtcXG4gICAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICBuYW1lID0gX3Byb3BzMy5uYW1lLFxcbiAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzMy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wczMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzMy5ub3JtYWxpemUsXFxuICAgICAgICAgICAgb25CbHVyID0gX3Byb3BzMy5vbkJsdXIsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICBfdmFsdWUgPSBfcHJvcHMzLl92YWx1ZSxcXG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlID0gX3Byb3BzMy52YWx1ZTtcXG5cXG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2V2ZW50c19vbkNoYW5nZVZhbHVlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCwgeyBuYW1lOiBuYW1lLCBwYXJzZTogcGFyc2UsIG5vcm1hbGl6ZTogbm9ybWFsaXplIH0pO1xcblxcbiAgICAgICAgLy8gZm9yIGNoZWNrYm94IGFuZCByYWRpbywgaWYgdGhlIHZhbHVlIHByb3BlcnR5IG9mIGNoZWNrYm94IG9yIHJhZGlvIGVxdWFsc1xcbiAgICAgICAgLy8gdGhlIHZhbHVlIHBhc3NlZCBieSBibHVyIGV2ZW50LCB0aGVuIGZpcmUgYmx1ciBhY3Rpb24gd2l0aCBwcmV2aW91c1ZhbHVlLlxcbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBfdmFsdWUgJiYgX3ZhbHVlICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgbmV3VmFsdWUgPSBwcmV2aW91c1ZhbHVlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkJsdXIpIHtcXG4gICAgICAgICAgb25CbHVyKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGJsdXIgYWN0aW9uXFxuICAgICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uYmx1cihuYW1lLCBuZXdWYWx1ZSkpO1xcblxcbiAgICAgICAgICAvLyBjYWxsIHBvc3QtYmx1ciBjYWxsYmFja1xcbiAgICAgICAgICBpZiAoX3JlZHV4Rm9ybS5hc3luY1ZhbGlkYXRlKSB7XFxuICAgICAgICAgICAgX3JlZHV4Rm9ybS5hc3luY1ZhbGlkYXRlKG5hbWUsIG5ld1ZhbHVlKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2hhbmRsZURyYWdTdGFydCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZURyYWdTdGFydChldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczQgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG9uRHJhZ1N0YXJ0ID0gX3Byb3BzNC5vbkRyYWdTdGFydCxcXG4gICAgICAgICAgICB2YWx1ZSA9IF9wcm9wczQudmFsdWU7XFxuXFxuICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfX1tcXFwiYVxcXCIgLyogZGF0YUtleSAqL10sIHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlKTtcXG5cXG4gICAgICAgIGlmIChvbkRyYWdTdGFydCkge1xcbiAgICAgICAgICBvbkRyYWdTdGFydChldmVudCk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRHJvcCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZURyb3AoZXZlbnQpIHtcXG4gICAgICAgIHZhciBfcHJvcHM1ID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICBuYW1lID0gX3Byb3BzNS5uYW1lLFxcbiAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzNS5kaXNwYXRjaCxcXG4gICAgICAgICAgICBvbkRyb3AgPSBfcHJvcHM1Lm9uRHJvcCxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzNS5fcmVkdXhGb3JtLFxcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSBfcHJvcHM1LnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX2V2ZW50Q29uc3RzX19bXFxcImFcXFwiIC8qIGRhdGFLZXkgKi9dKTtcXG5cXG4gICAgICAgIHZhciBkZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XFxuICAgICAgICBpZiAob25Ecm9wKSB7XFxuICAgICAgICAgIG9uRHJvcChfZXh0ZW5kcyh7fSwgZXZlbnQsIHtcXG4gICAgICAgICAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gcHJldmVudERlZmF1bHQoKSB7XFxuICAgICAgICAgICAgICBkZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcXG4gICAgICAgICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfSksIG5ld1ZhbHVlLCBwcmV2aW91c1ZhbHVlKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCkge1xcbiAgICAgICAgICAvLyBkaXNwYXRjaCBjaGFuZ2UgYWN0aW9uXFxuICAgICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uY2hhbmdlKG5hbWUsIG5ld1ZhbHVlKSk7XFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIF9wcm9wczYgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIGNvbXBvbmVudCA9IF9wcm9wczYuY29tcG9uZW50LFxcbiAgICAgICAgICAgIHdpdGhSZWYgPSBfcHJvcHM2LndpdGhSZWYsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wczYubmFtZSxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzNi5fcmVkdXhGb3JtLFxcbiAgICAgICAgICAgIG5vcm1hbGl6ZSA9IF9wcm9wczYubm9ybWFsaXplLFxcbiAgICAgICAgICAgIG9uQmx1ciA9IF9wcm9wczYub25CbHVyLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlID0gX3Byb3BzNi5vbkNoYW5nZSxcXG4gICAgICAgICAgICBvbkZvY3VzID0gX3Byb3BzNi5vbkZvY3VzLFxcbiAgICAgICAgICAgIG9uRHJhZ1N0YXJ0ID0gX3Byb3BzNi5vbkRyYWdTdGFydCxcXG4gICAgICAgICAgICBvbkRyb3AgPSBfcHJvcHM2Lm9uRHJvcCxcXG4gICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczYsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnbmFtZScsICdfcmVkdXhGb3JtJywgJ25vcm1hbGl6ZScsICdvbkJsdXInLCAnb25DaGFuZ2UnLCAnb25Gb2N1cycsICdvbkRyYWdTdGFydCcsICdvbkRyb3AnXSk7XFxuXFxuICAgICAgICB2YXIgX2NyZWF0ZUZpZWxkUHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jcmVhdGVGaWVsZFByb3BzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7IGdldEluOiBnZXRJbiwgdG9KUzogdG9KUyB9LCBuYW1lLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgICBmb3JtOiBfcmVkdXhGb3JtLmZvcm0sXFxuICAgICAgICAgIG9uQmx1cjogdGhpcy5oYW5kbGVCbHVyLFxcbiAgICAgICAgICBvbkNoYW5nZTogdGhpcy5oYW5kbGVDaGFuZ2UsXFxuICAgICAgICAgIG9uRHJvcDogdGhpcy5oYW5kbGVEcm9wLFxcbiAgICAgICAgICBvbkRyYWdTdGFydDogdGhpcy5oYW5kbGVEcmFnU3RhcnQsXFxuICAgICAgICAgIG9uRm9jdXM6IHRoaXMuaGFuZGxlRm9jdXNcXG4gICAgICAgIH0pKSxcXG4gICAgICAgICAgICBjdXN0b20gPSBfY3JlYXRlRmllbGRQcm9wcy5jdXN0b20sXFxuICAgICAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX2NyZWF0ZUZpZWxkUHJvcHMsIFsnY3VzdG9tJ10pO1xcblxcbiAgICAgICAgaWYgKHdpdGhSZWYpIHtcXG4gICAgICAgICAgY3VzdG9tLnJlZiA9ICdyZW5kZXJlZENvbXBvbmVudCc7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudCA9PT0gJ3N0cmluZycpIHtcXG4gICAgICAgICAgdmFyIGlucHV0ID0gcHJvcHMuaW5wdXQsXFxuICAgICAgICAgICAgICBtZXRhID0gcHJvcHMubWV0YTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xcbiAgICAgICAgICAvLyBmbGF0dGVuIGlucHV0IGludG8gb3RoZXIgcHJvcHNcXG5cXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShjb21wb25lbnQsIF9leHRlbmRzKHt9LCBpbnB1dCwgY3VzdG9tKSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKGNvbXBvbmVudCwgX2V4dGVuZHMoe30sIHByb3BzLCBjdXN0b20pKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIENvbm5lY3RlZEZpZWxkO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgQ29ubmVjdGVkRmllbGQucHJvcFR5cGVzID0ge1xcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUoW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nXSkuaXNSZXF1aXJlZCxcXG4gICAgcHJvcHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZSA9IG93blByb3BzLm5hbWUsXFxuICAgICAgICBfb3duUHJvcHMkX3JlZHV4Rm9ybSA9IG93blByb3BzLl9yZWR1eEZvcm0sXFxuICAgICAgICBpbml0aWFsVmFsdWVzID0gX293blByb3BzJF9yZWR1eEZvcm0uaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9vd25Qcm9wcyRfcmVkdXhGb3JtLmdldEZvcm1TdGF0ZTtcXG5cXG4gICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgIHZhciBpbml0aWFsU3RhdGUgPSBnZXRJbihmb3JtU3RhdGUsICdpbml0aWFsLicgKyBuYW1lKTtcXG4gICAgdmFyIGluaXRpYWwgPSBpbml0aWFsU3RhdGUgIT09IHVuZGVmaW5lZCA/IGluaXRpYWxTdGF0ZSA6IGluaXRpYWxWYWx1ZXMgJiYgZ2V0SW4oaW5pdGlhbFZhbHVlcywgbmFtZSk7XFxuICAgIHZhciB2YWx1ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ3ZhbHVlcy4nICsgbmFtZSk7XFxuICAgIHZhciBzdWJtaXR0aW5nID0gZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0dGluZycpO1xcbiAgICB2YXIgc3luY0Vycm9yID0gZ2V0U3luY0Vycm9yKGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNFcnJvcnMnKSwgbmFtZSk7XFxuICAgIHZhciBzeW5jV2FybmluZyA9IGdldFN5bmNXYXJuaW5nKGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNXYXJuaW5ncycpLCBuYW1lKTtcXG4gICAgdmFyIHByaXN0aW5lID0gZGVlcEVxdWFsKHZhbHVlLCBpbml0aWFsKTtcXG4gICAgcmV0dXJuIHtcXG4gICAgICBhc3luY0Vycm9yOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY0Vycm9ycy4nICsgbmFtZSksXFxuICAgICAgYXN5bmNWYWxpZGF0aW5nOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY1ZhbGlkYXRpbmcnKSA9PT0gbmFtZSxcXG4gICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICBzdWJtaXRFcnJvcjogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEZhaWxlZCcpLFxcbiAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgc3luY0Vycm9yOiBzeW5jRXJyb3IsXFxuICAgICAgc3luY1dhcm5pbmc6IHN5bmNXYXJuaW5nLFxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICBfdmFsdWU6IG93blByb3BzLnZhbHVlIC8vIHNhdmUgdmFsdWUgcGFzc2VkIGluIChmb3IgY2hlY2tib3hlcylcXG4gICAgfTtcXG4gIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICByZXR1cm4gY29ubmVjdG9yKENvbm5lY3RlZEZpZWxkKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUNvbm5lY3RlZEZpZWxkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODEpO1xcblxcblxcbnZhciBnZXRTZWxlY3RlZFZhbHVlcyA9IGZ1bmN0aW9uIGdldFNlbGVjdGVkVmFsdWVzKG9wdGlvbnMpIHtcXG4gIHZhciByZXN1bHQgPSBbXTtcXG4gIGlmIChvcHRpb25zKSB7XFxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBvcHRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xcbiAgICAgIHZhciBvcHRpb24gPSBvcHRpb25zW2luZGV4XTtcXG4gICAgICBpZiAob3B0aW9uLnNlbGVjdGVkKSB7XFxuICAgICAgICByZXN1bHQucHVzaChvcHRpb24udmFsdWUpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59O1xcblxcbnZhciBnZXRWYWx1ZSA9IGZ1bmN0aW9uIGdldFZhbHVlKGV2ZW50LCBpc1JlYWN0TmF0aXZlKSB7XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNFdmVudF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQpKSB7XFxuICAgIGlmICghaXNSZWFjdE5hdGl2ZSAmJiBldmVudC5uYXRpdmVFdmVudCAmJiBldmVudC5uYXRpdmVFdmVudC50ZXh0ICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICByZXR1cm4gZXZlbnQubmF0aXZlRXZlbnQudGV4dDtcXG4gICAgfVxcbiAgICBpZiAoaXNSZWFjdE5hdGl2ZSAmJiBldmVudC5uYXRpdmVFdmVudCAhPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgcmV0dXJuIGV2ZW50Lm5hdGl2ZUV2ZW50LnRleHQ7XFxuICAgIH1cXG4gICAgdmFyIF9ldmVudCR0YXJnZXQgPSBldmVudC50YXJnZXQsXFxuICAgICAgICB0eXBlID0gX2V2ZW50JHRhcmdldC50eXBlLFxcbiAgICAgICAgdmFsdWUgPSBfZXZlbnQkdGFyZ2V0LnZhbHVlLFxcbiAgICAgICAgY2hlY2tlZCA9IF9ldmVudCR0YXJnZXQuY2hlY2tlZCxcXG4gICAgICAgIGZpbGVzID0gX2V2ZW50JHRhcmdldC5maWxlcyxcXG4gICAgICAgIGRhdGFUcmFuc2ZlciA9IGV2ZW50LmRhdGFUcmFuc2ZlcjtcXG5cXG4gICAgaWYgKHR5cGUgPT09ICdjaGVja2JveCcpIHtcXG4gICAgICByZXR1cm4gY2hlY2tlZDtcXG4gICAgfVxcbiAgICBpZiAodHlwZSA9PT0gJ2ZpbGUnKSB7XFxuICAgICAgcmV0dXJuIGZpbGVzIHx8IGRhdGFUcmFuc2ZlciAmJiBkYXRhVHJhbnNmZXIuZmlsZXM7XFxuICAgIH1cXG4gICAgaWYgKHR5cGUgPT09ICdzZWxlY3QtbXVsdGlwbGUnKSB7XFxuICAgICAgcmV0dXJuIGdldFNlbGVjdGVkVmFsdWVzKGV2ZW50LnRhcmdldC5vcHRpb25zKTtcXG4gICAgfVxcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9XFxuICByZXR1cm4gZXZlbnQ7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRWYWx1ZSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjMwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgaXNSZWFjdE5hdGl2ZSA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci5wcm9kdWN0ICYmIHdpbmRvdy5uYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJztcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1JlYWN0TmF0aXZlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGRhdGFLZXk7IH0pO1xcbnZhciBkYXRhS2V5ID0gJ3RleHQnO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X191dGlsX3ByZWZpeE5hbWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgdmFsaWRhdGVOYW1lUHJvcCA9IGZ1bmN0aW9uIHZhbGlkYXRlTmFtZVByb3AocHJvcCkge1xcbiAgaWYgKCFwcm9wKSB7XFxuICAgIHJldHVybiBuZXcgRXJyb3IoJ05vIFxcXCJuYW1lc1xcXCIgcHJvcCB3YXMgc3BlY2lmaWVkIDxGaWVsZHMvPicpO1xcbiAgfVxcbiAgaWYgKCFBcnJheS5pc0FycmF5KHByb3ApICYmICFwcm9wLl9pc0ZpZWxkQXJyYXkpIHtcXG4gICAgcmV0dXJuIG5ldyBFcnJvcignSW52YWxpZCBwcm9wIFxcXCJuYW1lc1xcXCIgc3VwcGxpZWQgdG8gPEZpZWxkcy8+LiBNdXN0IGJlIGVpdGhlciBhbiBhcnJheSBvZiBzdHJpbmdzIG9yIHRoZSBmaWVsZHMgYXJyYXkgZ2VuZXJhdGVkIGJ5IEZpZWxkQXJyYXkuJyk7XFxuICB9XFxufTtcXG5cXG52YXIgY3JlYXRlRmllbGRzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRzKF9yZWYpIHtcXG4gIHZhciBkZWVwRXF1YWwgPSBfcmVmLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYuZ2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYudG9KUyxcXG4gICAgICBzaXplID0gX3JlZi5zaXplO1xcblxcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoe1xcbiAgICBkZWVwRXF1YWw6IGRlZXBFcXVhbCxcXG4gICAgZ2V0SW46IGdldEluLFxcbiAgICB0b0pTOiB0b0pTLFxcbiAgICBzaXplOiBzaXplXFxuICB9KTtcXG5cXG4gIHZhciBGaWVsZHMgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICBfaW5oZXJpdHMoRmllbGRzLCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGRzKHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEZpZWxkcyk7XFxuXFxuICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZpZWxkcy5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkcykpLmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWVsZHMgbXVzdCBiZSBpbnNpZGUgYSBjb21wb25lbnQgZGVjb3JhdGVkIHdpdGggcmVkdXhGb3JtKCknKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuXFxuICAgIF9jcmVhdGVDbGFzcyhGaWVsZHMsIFt7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywgbmV4dFByb3BzLCBuZXh0U3RhdGUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxNb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgIHZhciBlcnJvciA9IHZhbGlkYXRlTmFtZVByb3AodGhpcy5wcm9wcy5uYW1lcyk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgIHZhciByZWdpc3RlciA9IGNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcjtcXG5cXG4gICAgICAgIHRoaXMubmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICByZXR1cm4gcmVnaXN0ZXIobmFtZSwgJ0ZpZWxkJyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKHRoaXMucHJvcHMubmFtZXMsIG5leHRQcm9wcy5uYW1lcykpIHtcXG4gICAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XFxuICAgICAgICAgIHZhciBfY29udGV4dCRfcmVkdXhGb3JtID0gY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICAgICAgcmVnaXN0ZXIgPSBfY29udGV4dCRfcmVkdXhGb3JtLnJlZ2lzdGVyLFxcbiAgICAgICAgICAgICAgdW5yZWdpc3RlciA9IF9jb250ZXh0JF9yZWR1eEZvcm0udW5yZWdpc3RlcjtcXG4gICAgICAgICAgLy8gdW5yZWdpc3RlciBvbGQgbmFtZVxcblxcbiAgICAgICAgICB0aGlzLnByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gdW5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGNvbnRleHQsIG5hbWUpKTtcXG4gICAgICAgICAgfSk7XFxuICAgICAgICAgIC8vIHJlZ2lzdGVyIG5ldyBuYW1lXFxuICAgICAgICAgIG5leHRQcm9wcy5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSksICdGaWVsZCcpO1xcbiAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XFxuICAgICAgICB2YXIgdW5yZWdpc3RlciA9IGNvbnRleHQuX3JlZHV4Rm9ybS51bnJlZ2lzdGVyO1xcblxcbiAgICAgICAgdGhpcy5wcm9wcy5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiB1bnJlZ2lzdGVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSkpO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0UmVuZGVyZWRDb21wb25lbnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZW5kZXJlZENvbXBvbmVudCgpIHtcXG4gICAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0KCkodGhpcy5wcm9wcy53aXRoUmVmLCAnSWYgeW91IHdhbnQgdG8gYWNjZXNzIGdldFJlbmRlcmVkQ29tcG9uZW50KCksICcgKyAneW91IG11c3Qgc3BlY2lmeSBhIHdpdGhSZWYgcHJvcCB0byBGaWVsZHMnKTtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFJlbmRlcmVkQ29tcG9uZW50KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XFxuXFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKENvbm5lY3RlZEZpZWxkcywgX2V4dGVuZHMoe30sIHRoaXMucHJvcHMsIHtcXG4gICAgICAgICAgbmFtZXM6IHRoaXMucHJvcHMubmFtZXMubWFwKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSk7XFxuICAgICAgICAgIH0pLFxcbiAgICAgICAgICBfcmVkdXhGb3JtOiB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgcmVmOiAnY29ubmVjdGVkJ1xcbiAgICAgICAgfSkpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ25hbWVzJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xcblxcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMubmFtZXMubWFwKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGNvbnRleHQsIG5hbWUpO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZGlydHknLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuaXNEaXJ0eSgpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiAhdGhpcy5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZXMnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQgJiYgdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRWYWx1ZXMoKTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIEZpZWxkcztcXG4gIH0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG4gIEZpZWxkcy5wcm9wVHlwZXMgPSB7XFxuICAgIG5hbWVzOiBmdW5jdGlvbiBuYW1lcyhwcm9wcywgcHJvcE5hbWUpIHtcXG4gICAgICByZXR1cm4gdmFsaWRhdGVOYW1lUHJvcChwcm9wc1twcm9wTmFtZV0pO1xcbiAgICB9LFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUoW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nXSkuaXNSZXF1aXJlZCxcXG4gICAgZm9ybWF0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgcGFyc2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwcm9wczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdCxcXG4gICAgd2l0aFJlZjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2xcXG4gIH07XFxuICBGaWVsZHMuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkcztcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUZpZWxkcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjMzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jcmVhdGVGaWVsZFByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdHJ1Y3R1cmVfcGxhaW5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fZXZlbnRzX29uQ2hhbmdlVmFsdWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODQpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHByb3BzVG9Ob3RVcGRhdGVGb3IgPSBbJ19yZWR1eEZvcm0nXTtcXG5cXG52YXIgY3JlYXRlQ29ubmVjdGVkRmllbGRzID0gZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGVkRmllbGRzKF9yZWYpIHtcXG4gIHZhciBkZWVwRXF1YWwgPSBfcmVmLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYuZ2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYudG9KUyxcXG4gICAgICBzaXplID0gX3JlZi5zaXplO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIHZhciBlcnJvciA9IGdldEluKHN5bmNFcnJvcnMsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSBlcnJvciBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgZXJyb3Igc3RydWN0dXJlIHdoZXJlXFxuICAgIC8vIGl0IGNhbiBiZSBzZXQgZGlyZWN0bHksIGl0IG1pZ2h0IG5lZWQgdG8gYmUgdW53cmFwcGVkIGZyb20gdGhlIF9lcnJvciBwcm9wZXJ0eVxcbiAgICByZXR1cm4gZXJyb3IgJiYgZXJyb3IuX2Vycm9yID8gZXJyb3IuX2Vycm9yIDogZXJyb3I7XFxuICB9O1xcblxcbiAgdmFyIGdldFN5bmNXYXJuaW5nID0gZnVuY3Rpb24gZ2V0U3luY1dhcm5pbmcoc3luY1dhcm5pbmdzLCBuYW1lKSB7XFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lKTtcXG4gICAgLy8gQmVjYXVzZSB0aGUgd2FybmluZyBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgd2FybmluZyBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX3dhcm5pbmcgcHJvcGVydHlcXG4gICAgcmV0dXJuIHdhcm5pbmcgJiYgd2FybmluZy5fd2FybmluZyA/IHdhcm5pbmcuX3dhcm5pbmcgOiB3YXJuaW5nO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZHMgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICBfaW5oZXJpdHMoQ29ubmVjdGVkRmllbGRzLCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gQ29ubmVjdGVkRmllbGRzKHByb3BzKSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbm5lY3RlZEZpZWxkcyk7XFxuXFxuICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKENvbm5lY3RlZEZpZWxkcy5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKENvbm5lY3RlZEZpZWxkcykpLmNhbGwodGhpcywgcHJvcHMpKTtcXG5cXG4gICAgICBfdGhpcy5oYW5kbGVDaGFuZ2UgPSBfdGhpcy5oYW5kbGVDaGFuZ2UuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRm9jdXMgPSBfdGhpcy5oYW5kbGVGb2N1cy5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVCbHVyID0gX3RoaXMuaGFuZGxlQmx1ci5iaW5kKF90aGlzKTtcXG5cXG4gICAgICBfdGhpcy5vbkNoYW5nZUZucyA9IHByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUNoYW5nZShuYW1lLCBldmVudCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIGFjYztcXG4gICAgICB9LCB7fSk7XFxuXFxuICAgICAgX3RoaXMub25Gb2N1c0ZucyA9IHByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVGb2N1cyhuYW1lKTtcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgIH0sIHt9KTtcXG5cXG4gICAgICBfdGhpcy5vbkJsdXJGbnMgPSBwcm9wcy5uYW1lcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbmFtZSkge1xcbiAgICAgICAgYWNjW25hbWVdID0gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICAgICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVCbHVyKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgIH0sIHt9KTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKENvbm5lY3RlZEZpZWxkcywgW3tcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xcblxcbiAgICAgICAgaWYgKHRoaXMucHJvcHMubmFtZXMgIT09IG5leHRQcm9wcy5uYW1lcyAmJiAoc2l6ZSh0aGlzLnByb3BzLm5hbWVzKSAhPT0gc2l6ZShuZXh0UHJvcHMubmFtZXMpIHx8IG5leHRQcm9wcy5uYW1lcy5zb21lKGZ1bmN0aW9uIChuZXh0TmFtZSkge1xcbiAgICAgICAgICByZXR1cm4gIV90aGlzMi5wcm9wcy5fZmllbGRzW25leHROYW1lXTtcXG4gICAgICAgIH0pKSkge1xcblxcbiAgICAgICAgICAvLyBuYW1lcyBpcyBjaGFuZ2VkLiBUaGUgY2FjaGVkIGV2ZW50IGhhbmRsZXJzIG5lZWQgdG8gYmUgdXBkYXRlZFxcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlRm5zID0gbmV4dFByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICAgICAgYWNjW25hbWVdID0gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLmhhbmRsZUNoYW5nZShuYW1lLCBldmVudCk7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgICAgICB9LCB7fSk7XFxuXFxuICAgICAgICAgIHRoaXMub25Gb2N1c0ZucyA9IG5leHRQcm9wcy5uYW1lcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbmFtZSkge1xcbiAgICAgICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlRm9jdXMobmFtZSk7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgICAgICB9LCB7fSk7XFxuXFxuICAgICAgICAgIHRoaXMub25CbHVyRm5zID0gbmV4dFByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICAgICAgYWNjW25hbWVdID0gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLmhhbmRsZUJsdXIobmFtZSwgZXZlbnQpO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgcmV0dXJuIGFjYztcXG4gICAgICAgICAgfSwge30pO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3Nob3VsZENvbXBvbmVudFVwZGF0ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMpIHtcXG4gICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xcblxcbiAgICAgICAgdmFyIG5leHRQcm9wc0tleXMgPSBPYmplY3Qua2V5cyhuZXh0UHJvcHMpO1xcbiAgICAgICAgdmFyIHRoaXNQcm9wc0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BzKTtcXG4gICAgICAgIHJldHVybiBuZXh0UHJvcHNLZXlzLmxlbmd0aCAhPT0gdGhpc1Byb3BzS2V5cy5sZW5ndGggfHwgbmV4dFByb3BzS2V5cy5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgIHJldHVybiAhfnByb3BzVG9Ob3RVcGRhdGVGb3IuaW5kZXhPZihwcm9wKSAmJiAhZGVlcEVxdWFsKF90aGlzMy5wcm9wc1twcm9wXSwgbmV4dFByb3BzW3Byb3BdKTtcXG4gICAgICAgIH0pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2lzRGlydHknLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc0RpcnR5KCkge1xcbiAgICAgICAgdmFyIF9maWVsZHMgPSB0aGlzLnByb3BzLl9maWVsZHM7XFxuXFxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX2ZpZWxkcykuc29tZShmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICByZXR1cm4gX2ZpZWxkc1tuYW1lXS5kaXJ0eTtcXG4gICAgICAgIH0pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFZhbHVlcycsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlcygpIHtcXG4gICAgICAgIHZhciBfZmllbGRzID0gdGhpcy5wcm9wcy5fZmllbGRzO1xcblxcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKF9maWVsZHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBuYW1lLCBfZmllbGRzW25hbWVdLnZhbHVlKTtcXG4gICAgICAgIH0sIHt9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVDaGFuZ2UnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UobmFtZSwgZXZlbnQpIHtcXG4gICAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIHBhcnNlID0gX3Byb3BzLnBhcnNlLFxcbiAgICAgICAgICAgIG5vcm1hbGl6ZSA9IF9wcm9wcy5ub3JtYWxpemUsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wcy5fcmVkdXhGb3JtO1xcblxcbiAgICAgICAgdmFyIHZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmNoYW5nZShuYW1lLCB2YWx1ZSkpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2hhbmRsZUZvY3VzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRm9jdXMobmFtZSkge1xcbiAgICAgICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzMi5kaXNwYXRjaCxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMi5fcmVkdXhGb3JtO1xcblxcbiAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5mb2N1cyhuYW1lKSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlQmx1cicsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUJsdXIobmFtZSwgZXZlbnQpIHtcXG4gICAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wczMuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgcGFyc2UgPSBfcHJvcHMzLnBhcnNlLFxcbiAgICAgICAgICAgIG5vcm1hbGl6ZSA9IF9wcm9wczMubm9ybWFsaXplLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMzLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIHsgbmFtZTogbmFtZSwgcGFyc2U6IHBhcnNlLCBub3JtYWxpemU6IG5vcm1hbGl6ZSB9KTtcXG5cXG4gICAgICAgIC8vIGRpc3BhdGNoIGJsdXIgYWN0aW9uXFxuICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmJsdXIobmFtZSwgdmFsdWUpKTtcXG5cXG4gICAgICAgIC8vIGNhbGwgcG9zdC1ibHVyIGNhbGxiYWNrXFxuICAgICAgICBpZiAoX3JlZHV4Rm9ybS5hc3luY1ZhbGlkYXRlKSB7XFxuICAgICAgICAgIF9yZWR1eEZvcm0uYXN5bmNWYWxpZGF0ZShuYW1lLCB2YWx1ZSk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XFxuXFxuICAgICAgICB2YXIgX3Byb3BzNCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzNC5jb21wb25lbnQsXFxuICAgICAgICAgICAgd2l0aFJlZiA9IF9wcm9wczQud2l0aFJlZixcXG4gICAgICAgICAgICBfZmllbGRzID0gX3Byb3BzNC5fZmllbGRzLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHM0LCBbJ2NvbXBvbmVudCcsICd3aXRoUmVmJywgJ19maWVsZHMnLCAnX3JlZHV4Rm9ybSddKTtcXG5cXG4gICAgICAgIHZhciBzZWN0aW9uUHJlZml4ID0gX3JlZHV4Rm9ybS5zZWN0aW9uUHJlZml4O1xcblxcbiAgICAgICAgdmFyIF9PYmplY3Qka2V5cyRyZWR1Y2UgPSBPYmplY3Qua2V5cyhfZmllbGRzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBuYW1lKSB7XFxuICAgICAgICAgIHZhciBjb25uZWN0ZWRQcm9wcyA9IF9maWVsZHNbbmFtZV07XFxuXFxuICAgICAgICAgIHZhciBfY3JlYXRlRmllbGRQcm9wcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHsgZ2V0SW46IGdldEluLCB0b0pTOiB0b0pTIH0sIG5hbWUsIF9leHRlbmRzKHt9LCBjb25uZWN0ZWRQcm9wcywgcmVzdCwge1xcbiAgICAgICAgICAgIG9uQmx1cjogX3RoaXM0Lm9uQmx1ckZuc1tuYW1lXSxcXG4gICAgICAgICAgICBvbkNoYW5nZTogX3RoaXM0Lm9uQ2hhbmdlRm5zW25hbWVdLFxcbiAgICAgICAgICAgIG9uRm9jdXM6IF90aGlzNC5vbkZvY3VzRm5zW25hbWVdXFxuICAgICAgICAgIH0pKSxcXG4gICAgICAgICAgICAgIGN1c3RvbSA9IF9jcmVhdGVGaWVsZFByb3BzLmN1c3RvbSxcXG4gICAgICAgICAgICAgIGZpZWxkUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX2NyZWF0ZUZpZWxkUHJvcHMsIFsnY3VzdG9tJ10pO1xcblxcbiAgICAgICAgICBhY2N1bXVsYXRvci5jdXN0b20gPSBjdXN0b207XFxuICAgICAgICAgIHZhciBmaWVsZE5hbWUgPSBzZWN0aW9uUHJlZml4ID8gbmFtZS5yZXBsYWNlKHNlY3Rpb25QcmVmaXggKyAnLicsICcnKSA6IG5hbWU7XFxuICAgICAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5zZXRJbihhY2N1bXVsYXRvciwgZmllbGROYW1lLCBmaWVsZFByb3BzKTtcXG4gICAgICAgIH0sIHt9KSxcXG4gICAgICAgICAgICBjdXN0b20gPSBfT2JqZWN0JGtleXMkcmVkdWNlLmN1c3RvbSxcXG4gICAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfT2JqZWN0JGtleXMkcmVkdWNlLCBbJ2N1c3RvbSddKTtcXG5cXG4gICAgICAgIGlmICh3aXRoUmVmKSB7XFxuICAgICAgICAgIHByb3BzLnJlZiA9ICdyZW5kZXJlZENvbXBvbmVudCc7XFxuICAgICAgICB9XFxuXFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKGNvbXBvbmVudCwgX2V4dGVuZHMoe30sIHByb3BzLCBjdXN0b20pKTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIENvbm5lY3RlZEZpZWxkcztcXG4gIH0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG4gIENvbm5lY3RlZEZpZWxkcy5wcm9wVHlwZXMgPSB7XFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBfZmllbGRzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgdmFyIGNvbm5lY3RvciA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfcmVkdXhfX1tcXFwiYVxcXCIgLyogY29ubmVjdCAqL10pKGZ1bmN0aW9uIChzdGF0ZSwgb3duUHJvcHMpIHtcXG4gICAgdmFyIG5hbWVzID0gb3duUHJvcHMubmFtZXMsXFxuICAgICAgICBfb3duUHJvcHMkX3JlZHV4Rm9ybSA9IG93blByb3BzLl9yZWR1eEZvcm0sXFxuICAgICAgICBpbml0aWFsVmFsdWVzID0gX293blByb3BzJF9yZWR1eEZvcm0uaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9vd25Qcm9wcyRfcmVkdXhGb3JtLmdldEZvcm1TdGF0ZTtcXG5cXG4gICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgIHJldHVybiB7XFxuICAgICAgX2ZpZWxkczogbmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgbmFtZSkge1xcbiAgICAgICAgdmFyIGluaXRpYWxTdGF0ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ2luaXRpYWwuJyArIG5hbWUpO1xcbiAgICAgICAgdmFyIGluaXRpYWwgPSBpbml0aWFsU3RhdGUgIT09IHVuZGVmaW5lZCA/IGluaXRpYWxTdGF0ZSA6IGluaXRpYWxWYWx1ZXMgJiYgZ2V0SW4oaW5pdGlhbFZhbHVlcywgbmFtZSk7XFxuICAgICAgICB2YXIgdmFsdWUgPSBnZXRJbihmb3JtU3RhdGUsICd2YWx1ZXMuJyArIG5hbWUpO1xcbiAgICAgICAgdmFyIHN5bmNFcnJvciA9IGdldFN5bmNFcnJvcihnZXRJbihmb3JtU3RhdGUsICdzeW5jRXJyb3JzJyksIG5hbWUpO1xcbiAgICAgICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgICAgICB2YXIgcHJpc3RpbmUgPSB2YWx1ZSA9PT0gaW5pdGlhbDtcXG4gICAgICAgIGFjY3VtdWxhdG9yW25hbWVdID0ge1xcbiAgICAgICAgICBhc3luY0Vycm9yOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY0Vycm9ycy4nICsgbmFtZSksXFxuICAgICAgICAgIGFzeW5jVmFsaWRhdGluZzogZ2V0SW4oZm9ybVN0YXRlLCAnYXN5bmNWYWxpZGF0aW5nJykgPT09IG5hbWUsXFxuICAgICAgICAgIGRpcnR5OiAhcHJpc3RpbmUsXFxuICAgICAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICAgICAgc3RhdGU6IGdldEluKGZvcm1TdGF0ZSwgJ2ZpZWxkcy4nICsgbmFtZSksXFxuICAgICAgICAgIHN1Ym1pdEVycm9yOiBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRFcnJvcnMuJyArIG5hbWUpLFxcbiAgICAgICAgICBzdWJtaXRGYWlsZWQ6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEZhaWxlZCcpLFxcbiAgICAgICAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxcbiAgICAgICAgICBzeW5jRXJyb3I6IHN5bmNFcnJvcixcXG4gICAgICAgICAgc3luY1dhcm5pbmc6IHN5bmNXYXJuaW5nLFxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXFxuICAgICAgICAgIF92YWx1ZTogb3duUHJvcHMudmFsdWUgLy8gc2F2ZSB2YWx1ZSBwYXNzZWQgaW4gKGZvciBjaGVja2JveGVzKVxcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcXG4gICAgICB9LCB7fSlcXG4gICAgfTtcXG4gIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICByZXR1cm4gY29ubmVjdG9yKENvbm5lY3RlZEZpZWxkcyk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVDb25uZWN0ZWRGaWVsZHMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkQXJyYXlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjM1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsX3NoYWxsb3dDb21wYXJlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxcblxcblxcblxcblxcblxcblxcblxcbnZhciB0b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xcbn07XFxuXFxudmFyIHdyYXBFcnJvciA9IGZ1bmN0aW9uIHdyYXBFcnJvcihmbiwga2V5KSB7XFxuICByZXR1cm4gZm4gJiYgZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgdmFsaWRhdG9ycyA9IHRvQXJyYXkoZm4pO1xcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHtcXG4gICAgICB2YXIgcmVzdWx0ID0gdmFsaWRhdG9yc1tpXS5hcHBseSh2YWxpZGF0b3JzLCBhcmd1bWVudHMpO1xcbiAgICAgIGlmIChyZXN1bHQpIHtcXG4gICAgICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe30sIGtleSwgcmVzdWx0KTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH07XFxufTtcXG5cXG52YXIgY3JlYXRlRmllbGRBcnJheSA9IGZ1bmN0aW9uIGNyZWF0ZUZpZWxkQXJyYXkoX3JlZjIpIHtcXG4gIHZhciBkZWVwRXF1YWwgPSBfcmVmMi5kZWVwRXF1YWwsXFxuICAgICAgZ2V0SW4gPSBfcmVmMi5nZXRJbixcXG4gICAgICBzaXplID0gX3JlZjIuc2l6ZTtcXG5cXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZEFycmF5ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRBcnJheV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoeyBkZWVwRXF1YWw6IGRlZXBFcXVhbCwgZ2V0SW46IGdldEluLCBzaXplOiBzaXplIH0pO1xcblxcbiAgdmFyIEZpZWxkQXJyYXkgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICBfaW5oZXJpdHMoRmllbGRBcnJheSwgX0NvbXBvbmVudCk7XFxuXFxuICAgIGZ1bmN0aW9uIEZpZWxkQXJyYXkocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGRBcnJheSk7XFxuXFxuICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZpZWxkQXJyYXkuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGaWVsZEFycmF5KSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkQXJyYXkgbXVzdCBiZSBpbnNpZGUgYSBjb21wb25lbnQgZGVjb3JhdGVkIHdpdGggcmVkdXhGb3JtKCknKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuXFxuICAgIF9jcmVhdGVDbGFzcyhGaWVsZEFycmF5LCBbe1xcbiAgICAgIGtleTogJ3Nob3VsZENvbXBvbmVudFVwZGF0ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIG5leHRQcm9wcywgbmV4dFN0YXRlKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyKHRoaXMubmFtZSwgJ0ZpZWxkQXJyYXknLCBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgIHJldHVybiB3cmFwRXJyb3IoX3RoaXMyLnByb3BzLnZhbGlkYXRlLCAnX2Vycm9yJyk7XFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgIHJldHVybiB3cmFwRXJyb3IoX3RoaXMyLnByb3BzLndhcm4sICdfd2FybmluZycpO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XFxuICAgICAgICBpZiAodGhpcy5wcm9wcy5uYW1lICE9PSBuZXh0UHJvcHMubmFtZSkge1xcbiAgICAgICAgICAvLyB1bnJlZ2lzdGVyIG9sZCBuYW1lXFxuICAgICAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXIodGhpcy5uYW1lKTtcXG4gICAgICAgICAgLy8gcmVnaXN0ZXIgbmV3IG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0ucmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLmNvbnRleHQsIG5leHRQcm9wcy5uYW1lKSwgJ0ZpZWxkQXJyYXknKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHRoaXMucHJvcHMud2l0aFJlZiwgJ0lmIHlvdSB3YW50IHRvIGFjY2VzcyBnZXRSZW5kZXJlZENvbXBvbmVudCgpLCAnICsgJ3lvdSBtdXN0IHNwZWNpZnkgYSB3aXRoUmVmIHByb3AgdG8gRmllbGRBcnJheScpO1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0UmVuZGVyZWRDb21wb25lbnQoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKENvbm5lY3RlZEZpZWxkQXJyYXksIF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCB7XFxuICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcXG4gICAgICAgICAgc3luY0Vycm9yOiB0aGlzLnN5bmNFcnJvcixcXG4gICAgICAgICAgc3luY1dhcm5pbmc6IHRoaXMuc3luY1dhcm5pbmcsXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLmNvbnRleHQsIHRoaXMucHJvcHMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZGlydHknLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZGlydHk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncHJpc3RpbmUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkucHJpc3RpbmU7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAndmFsdWUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkudmFsdWU7XFxuICAgICAgfVxcbiAgICB9XSk7XFxuXFxuICAgIHJldHVybiBGaWVsZEFycmF5O1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgRmllbGRBcnJheS5wcm9wVHlwZXMgPSB7XFxuICAgIG5hbWU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYy5pc1JlcXVpcmVkLFxcbiAgICBwcm9wczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdCxcXG4gICAgdmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICB3YXJuOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgd2l0aFJlZjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2xcXG4gIH07XFxuICBGaWVsZEFycmF5LmNvbnRleHRUeXBlcyA9IHtcXG4gICAgX3JlZHV4Rm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdFxcbiAgfTtcXG5cXG4gIHJldHVybiBGaWVsZEFycmF5O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRBcnJheSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19tYXBWYWx1ZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2NyZWF0ZUZpZWxkQXJyYXlQcm9wc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzYpO1xcblxcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gWydfcmVkdXhGb3JtJywgJ3ZhbHVlJ107XFxuXFxudmFyIGNyZWF0ZUNvbm5lY3RlZEZpZWxkQXJyYXkgPSBmdW5jdGlvbiBjcmVhdGVDb25uZWN0ZWRGaWVsZEFycmF5KF9yZWYpIHtcXG4gIHZhciBkZWVwRXF1YWwgPSBfcmVmLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYuZ2V0SW4sXFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZTtcXG5cXG5cXG4gIHZhciBnZXRTeW5jRXJyb3IgPSBmdW5jdGlvbiBnZXRTeW5jRXJyb3Ioc3luY0Vycm9ycywgbmFtZSkge1xcbiAgICAvLyBGb3IgYW4gYXJyYXksIHRoZSBlcnJvciBjYW4gX09OTFlfIGJlIHVuZGVyIF9lcnJvci5cXG4gICAgLy8gVGhpcyBpcyB3aHkgdGhpcyBnZXRTeW5jRXJyb3IgaXMgbm90IHRoZSBzYW1lIGFzIHRoZVxcbiAgICAvLyBvbmUgaW4gRmllbGQuXFxuICAgIHJldHVybiBnZXRJbihzeW5jRXJyb3JzLCBuYW1lICsgJy5fZXJyb3InKTtcXG4gIH07XFxuXFxuICB2YXIgZ2V0U3luY1dhcm5pbmcgPSBmdW5jdGlvbiBnZXRTeW5jV2FybmluZyhzeW5jV2FybmluZ3MsIG5hbWUpIHtcXG4gICAgLy8gRm9yIGFuIGFycmF5LCB0aGUgd2FybmluZyBjYW4gX09OTFlfIGJlIHVuZGVyIF93YXJuaW5nLlxcbiAgICAvLyBUaGlzIGlzIHdoeSB0aGlzIGdldFN5bmNFcnJvciBpcyBub3QgdGhlIHNhbWUgYXMgdGhlXFxuICAgIC8vIG9uZSBpbiBGaWVsZC5cXG4gICAgcmV0dXJuIGdldEluKHN5bmNXYXJuaW5ncywgbmFtZSArICcuX3dhcm5pbmcnKTtcXG4gIH07XFxuXFxuICB2YXIgQ29ubmVjdGVkRmllbGRBcnJheSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZEFycmF5LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gQ29ubmVjdGVkRmllbGRBcnJheSgpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdGVkRmllbGRBcnJheSk7XFxuXFxuICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKENvbm5lY3RlZEZpZWxkQXJyYXkuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihDb25uZWN0ZWRGaWVsZEFycmF5KSkuY2FsbCh0aGlzKSk7XFxuXFxuICAgICAgX3RoaXMuZ2V0VmFsdWUgPSBfdGhpcy5nZXRWYWx1ZS5iaW5kKF90aGlzKTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKENvbm5lY3RlZEZpZWxkQXJyYXksIFt7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICAvLyBVcGRhdGUgaWYgdGhlIGVsZW1lbnRzIG9mIHRoZSB2YWx1ZSBhcnJheSB3YXMgdXBkYXRlZC5cXG4gICAgICAgIHZhciB0aGlzVmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlO1xcbiAgICAgICAgdmFyIG5leHRWYWx1ZSA9IG5leHRQcm9wcy52YWx1ZTtcXG5cXG4gICAgICAgIGlmICh0aGlzVmFsdWUgJiYgbmV4dFZhbHVlKSB7XFxuICAgICAgICAgIGlmICh0aGlzVmFsdWUubGVuZ3RoICE9PSBuZXh0VmFsdWUubGVuZ3RoIHx8IHRoaXNWYWx1ZS5ldmVyeShmdW5jdGlvbiAodmFsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG5leHRWYWx1ZS5zb21lKGZ1bmN0aW9uIChuZXh0KSB7XFxuICAgICAgICAgICAgICByZXR1cm4gZGVlcEVxdWFsKHZhbCwgbmV4dCk7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgIH0pKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHZhciBuZXh0UHJvcHNLZXlzID0gT2JqZWN0LmtleXMobmV4dFByb3BzKTtcXG4gICAgICAgIHZhciB0aGlzUHJvcHNLZXlzID0gT2JqZWN0LmtleXModGhpcy5wcm9wcyk7XFxuICAgICAgICByZXR1cm4gbmV4dFByb3BzS2V5cy5sZW5ndGggIT09IHRoaXNQcm9wc0tleXMubGVuZ3RoIHx8IG5leHRQcm9wc0tleXMuc29tZShmdW5jdGlvbiAocHJvcCkge1xcbiAgICAgICAgICAvLyB1c2VmdWwgdG8gZGVidWcgcmVyZW5kZXJzXFxuICAgICAgICAgIC8vIGlmICghcGxhaW4uZGVlcEVxdWFsKHRoaXMucHJvcHNbIHByb3AgXSwgbmV4dFByb3BzWyBwcm9wIF0pKSB7XFxuICAgICAgICAgIC8vICAgY29uc29sZS5pbmZvKHByb3AsICdjaGFuZ2VkJywgdGhpcy5wcm9wc1sgcHJvcCBdLCAnPT0+JywgbmV4dFByb3BzWyBwcm9wIF0pXFxuICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgcmV0dXJuICF+cHJvcHNUb05vdFVwZGF0ZUZvci5pbmRleE9mKHByb3ApICYmICFkZWVwRXF1YWwoX3RoaXMyLnByb3BzW3Byb3BdLCBuZXh0UHJvcHNbcHJvcF0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0UmVuZGVyZWRDb21wb25lbnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZW5kZXJlZENvbXBvbmVudCgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMucmVuZGVyZWRDb21wb25lbnQ7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0VmFsdWUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZShpbmRleCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudmFsdWUgJiYgZ2V0SW4odGhpcy5wcm9wcy52YWx1ZSwgaW5kZXgpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3JlbmRlcicsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIGNvbXBvbmVudCA9IF9wcm9wcy5jb21wb25lbnQsXFxuICAgICAgICAgICAgd2l0aFJlZiA9IF9wcm9wcy53aXRoUmVmLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMubmFtZSxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzLl9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgdmFsaWRhdGUgPSBfcHJvcHMudmFsaWRhdGUsXFxuICAgICAgICAgICAgd2FybiA9IF9wcm9wcy53YXJuLFxcbiAgICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzLCBbJ2NvbXBvbmVudCcsICd3aXRoUmVmJywgJ25hbWUnLCAnX3JlZHV4Rm9ybScsICd2YWxpZGF0ZScsICd3YXJuJ10pO1xcblxcbiAgICAgICAgdmFyIHByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY3JlYXRlRmllbGRBcnJheVByb3BzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShnZXRJbiwgbmFtZSwgX3JlZHV4Rm9ybS5mb3JtLCBfcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXgsIHRoaXMuZ2V0VmFsdWUsIHJlc3QpO1xcbiAgICAgICAgaWYgKHdpdGhSZWYpIHtcXG4gICAgICAgICAgcHJvcHMucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBwcm9wcyk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZGlydHknLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZGlydHk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncHJpc3RpbmUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMucHJpc3RpbmU7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAndmFsdWUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudmFsdWU7XFxuICAgICAgfVxcbiAgICB9XSk7XFxuXFxuICAgIHJldHVybiBDb25uZWN0ZWRGaWVsZEFycmF5O1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgQ29ubmVjdGVkRmllbGRBcnJheS5wcm9wVHlwZXMgPSB7XFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBwcm9wczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdFxcbiAgfTtcXG5cXG4gIENvbm5lY3RlZEZpZWxkQXJyYXkuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgdmFyIGNvbm5lY3RvciA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfcmVkdXhfX1tcXFwiYVxcXCIgLyogY29ubmVjdCAqL10pKGZ1bmN0aW9uIChzdGF0ZSwgb3duUHJvcHMpIHtcXG4gICAgdmFyIG5hbWUgPSBvd25Qcm9wcy5uYW1lLFxcbiAgICAgICAgX293blByb3BzJF9yZWR1eEZvcm0gPSBvd25Qcm9wcy5fcmVkdXhGb3JtLFxcbiAgICAgICAgaW5pdGlhbFZhbHVlcyA9IF9vd25Qcm9wcyRfcmVkdXhGb3JtLmluaXRpYWxWYWx1ZXMsXFxuICAgICAgICBnZXRGb3JtU3RhdGUgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5nZXRGb3JtU3RhdGU7XFxuXFxuICAgIHZhciBmb3JtU3RhdGUgPSBnZXRGb3JtU3RhdGUoc3RhdGUpO1xcbiAgICB2YXIgaW5pdGlhbCA9IGdldEluKGZvcm1TdGF0ZSwgJ2luaXRpYWwuJyArIG5hbWUpIHx8IGluaXRpYWxWYWx1ZXMgJiYgZ2V0SW4oaW5pdGlhbFZhbHVlcywgbmFtZSk7XFxuICAgIHZhciB2YWx1ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ3ZhbHVlcy4nICsgbmFtZSk7XFxuICAgIHZhciBzdWJtaXR0aW5nID0gZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0dGluZycpO1xcbiAgICB2YXIgc3luY0Vycm9yID0gZ2V0U3luY0Vycm9yKGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNFcnJvcnMnKSwgbmFtZSk7XFxuICAgIHZhciBzeW5jV2FybmluZyA9IGdldFN5bmNXYXJuaW5nKGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNXYXJuaW5ncycpLCBuYW1lKTtcXG4gICAgdmFyIHByaXN0aW5lID0gZGVlcEVxdWFsKHZhbHVlLCBpbml0aWFsKTtcXG4gICAgcmV0dXJuIHtcXG4gICAgICBhc3luY0Vycm9yOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY0Vycm9ycy4nICsgbmFtZSArICcuX2Vycm9yJyksXFxuICAgICAgZGlydHk6ICFwcmlzdGluZSxcXG4gICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgc3RhdGU6IGdldEluKGZvcm1TdGF0ZSwgJ2ZpZWxkcy4nICsgbmFtZSksXFxuICAgICAgc3VibWl0RXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEVycm9ycy4nICsgbmFtZSArICcuX2Vycm9yJyksXFxuICAgICAgc3VibWl0RmFpbGVkOiBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRGYWlsZWQnKSxcXG4gICAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxcbiAgICAgIHN5bmNFcnJvcjogc3luY0Vycm9yLFxcbiAgICAgIHN5bmNXYXJuaW5nOiBzeW5jV2FybmluZyxcXG4gICAgICB2YWx1ZTogdmFsdWUsXFxuICAgICAgbGVuZ3RoOiBzaXplKHZhbHVlKVxcbiAgICB9O1xcbiAgfSwgZnVuY3Rpb24gKGRpc3BhdGNoLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZSA9IG93blByb3BzLm5hbWUsXFxuICAgICAgICBfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybTtcXG4gICAgdmFyIGFycmF5SW5zZXJ0ID0gX3JlZHV4Rm9ybS5hcnJheUluc2VydCxcXG4gICAgICAgIGFycmF5TW92ZSA9IF9yZWR1eEZvcm0uYXJyYXlNb3ZlLFxcbiAgICAgICAgYXJyYXlQb3AgPSBfcmVkdXhGb3JtLmFycmF5UG9wLFxcbiAgICAgICAgYXJyYXlQdXNoID0gX3JlZHV4Rm9ybS5hcnJheVB1c2gsXFxuICAgICAgICBhcnJheVJlbW92ZSA9IF9yZWR1eEZvcm0uYXJyYXlSZW1vdmUsXFxuICAgICAgICBhcnJheVJlbW92ZUFsbCA9IF9yZWR1eEZvcm0uYXJyYXlSZW1vdmVBbGwsXFxuICAgICAgICBhcnJheVNoaWZ0ID0gX3JlZHV4Rm9ybS5hcnJheVNoaWZ0LFxcbiAgICAgICAgYXJyYXlTcGxpY2UgPSBfcmVkdXhGb3JtLmFycmF5U3BsaWNlLFxcbiAgICAgICAgYXJyYXlTd2FwID0gX3JlZHV4Rm9ybS5hcnJheVN3YXAsXFxuICAgICAgICBhcnJheVVuc2hpZnQgPSBfcmVkdXhGb3JtLmFycmF5VW5zaGlmdDtcXG5cXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21hcFZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoe1xcbiAgICAgIGFycmF5SW5zZXJ0OiBhcnJheUluc2VydCxcXG4gICAgICBhcnJheU1vdmU6IGFycmF5TW92ZSxcXG4gICAgICBhcnJheVBvcDogYXJyYXlQb3AsXFxuICAgICAgYXJyYXlQdXNoOiBhcnJheVB1c2gsXFxuICAgICAgYXJyYXlSZW1vdmU6IGFycmF5UmVtb3ZlLFxcbiAgICAgIGFycmF5UmVtb3ZlQWxsOiBhcnJheVJlbW92ZUFsbCxcXG4gICAgICBhcnJheVNoaWZ0OiBhcnJheVNoaWZ0LFxcbiAgICAgIGFycmF5U3BsaWNlOiBhcnJheVNwbGljZSxcXG4gICAgICBhcnJheVN3YXA6IGFycmF5U3dhcCxcXG4gICAgICBhcnJheVVuc2hpZnQ6IGFycmF5VW5zaGlmdFxcbiAgICB9LCBmdW5jdGlvbiAoYWN0aW9uQ3JlYXRvcikge1xcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGFjdGlvbkNyZWF0b3IuYmluZChudWxsLCBuYW1lKSwgZGlzcGF0Y2gpO1xcbiAgICB9KTtcXG4gIH0sIHVuZGVmaW5lZCwgeyB3aXRoUmVmOiB0cnVlIH0pO1xcbiAgcmV0dXJuIGNvbm5lY3RvcihDb25uZWN0ZWRGaWVsZEFycmF5KTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUNvbm5lY3RlZEZpZWxkQXJyYXkpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxudmFyIGNyZWF0ZUZpZWxkQXJyYXlQcm9wcyA9IGZ1bmN0aW9uIGNyZWF0ZUZpZWxkQXJyYXlQcm9wcyhnZXRJbiwgbmFtZSwgZm9ybSwgc2VjdGlvblByZWZpeCwgZ2V0VmFsdWUsIF9yZWYpIHtcXG4gIHZhciBhcnJheUluc2VydCA9IF9yZWYuYXJyYXlJbnNlcnQsXFxuICAgICAgYXJyYXlNb3ZlID0gX3JlZi5hcnJheU1vdmUsXFxuICAgICAgYXJyYXlQb3AgPSBfcmVmLmFycmF5UG9wLFxcbiAgICAgIGFycmF5UHVzaCA9IF9yZWYuYXJyYXlQdXNoLFxcbiAgICAgIGFycmF5UmVtb3ZlID0gX3JlZi5hcnJheVJlbW92ZSxcXG4gICAgICBhcnJheVJlbW92ZUFsbCA9IF9yZWYuYXJyYXlSZW1vdmVBbGwsXFxuICAgICAgYXJyYXlTaGlmdCA9IF9yZWYuYXJyYXlTaGlmdCxcXG4gICAgICBhcnJheVNwbGljZSA9IF9yZWYuYXJyYXlTcGxpY2UsXFxuICAgICAgYXJyYXlTd2FwID0gX3JlZi5hcnJheVN3YXAsXFxuICAgICAgYXJyYXlVbnNoaWZ0ID0gX3JlZi5hcnJheVVuc2hpZnQsXFxuICAgICAgYXN5bmNFcnJvciA9IF9yZWYuYXN5bmNFcnJvcixcXG4gICAgICBkaXJ0eSA9IF9yZWYuZGlydHksXFxuICAgICAgbGVuZ3RoID0gX3JlZi5sZW5ndGgsXFxuICAgICAgcHJpc3RpbmUgPSBfcmVmLnByaXN0aW5lLFxcbiAgICAgIHN1Ym1pdEVycm9yID0gX3JlZi5zdWJtaXRFcnJvcixcXG4gICAgICBzdGF0ZSA9IF9yZWYuc3RhdGUsXFxuICAgICAgc3VibWl0RmFpbGVkID0gX3JlZi5zdWJtaXRGYWlsZWQsXFxuICAgICAgc3VibWl0dGluZyA9IF9yZWYuc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3IgPSBfcmVmLnN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZyA9IF9yZWYuc3luY1dhcm5pbmcsXFxuICAgICAgdmFsdWUgPSBfcmVmLnZhbHVlLFxcbiAgICAgIHByb3BzID0gX3JlZi5wcm9wcyxcXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFsnYXJyYXlJbnNlcnQnLCAnYXJyYXlNb3ZlJywgJ2FycmF5UG9wJywgJ2FycmF5UHVzaCcsICdhcnJheVJlbW92ZScsICdhcnJheVJlbW92ZUFsbCcsICdhcnJheVNoaWZ0JywgJ2FycmF5U3BsaWNlJywgJ2FycmF5U3dhcCcsICdhcnJheVVuc2hpZnQnLCAnYXN5bmNFcnJvcicsICdkaXJ0eScsICdsZW5ndGgnLCAncHJpc3RpbmUnLCAnc3VibWl0RXJyb3InLCAnc3RhdGUnLCAnc3VibWl0RmFpbGVkJywgJ3N1Ym1pdHRpbmcnLCAnc3luY0Vycm9yJywgJ3N5bmNXYXJuaW5nJywgJ3ZhbHVlJywgJ3Byb3BzJ10pO1xcblxcbiAgdmFyIGVycm9yID0gc3luY0Vycm9yIHx8IGFzeW5jRXJyb3IgfHwgc3VibWl0RXJyb3I7XFxuICB2YXIgd2FybmluZyA9IHN5bmNXYXJuaW5nO1xcbiAgdmFyIGZpZWxkTmFtZSA9IHNlY3Rpb25QcmVmaXggPyBuYW1lLnJlcGxhY2Uoc2VjdGlvblByZWZpeCArICcuJywgJycpIDogbmFtZTtcXG4gIHZhciBmaW5hbFByb3BzID0gX2V4dGVuZHMoe1xcbiAgICBmaWVsZHM6IHtcXG4gICAgICBfaXNGaWVsZEFycmF5OiB0cnVlLFxcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2spIHtcXG4gICAgICAgIHJldHVybiAodmFsdWUgfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XFxuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhmaWVsZE5hbWUgKyAnWycgKyBpbmRleCArICddJywgaW5kZXgsIGZpbmFsUHJvcHMuZmllbGRzKTtcXG4gICAgICAgIH0pO1xcbiAgICAgIH0sXFxuICAgICAgZ2V0OiBnZXRWYWx1ZSxcXG4gICAgICBnZXRBbGw6IGZ1bmN0aW9uIGdldEFsbCgpIHtcXG4gICAgICAgIHJldHVybiB2YWx1ZTtcXG4gICAgICB9LFxcbiAgICAgIGluc2VydDogYXJyYXlJbnNlcnQsXFxuICAgICAgbGVuZ3RoOiBsZW5ndGgsXFxuICAgICAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2spIHtcXG4gICAgICAgIHJldHVybiAodmFsdWUgfHwgW10pLm1hcChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGZpZWxkTmFtZSArICdbJyArIGluZGV4ICsgJ10nLCBpbmRleCwgZmluYWxQcm9wcy5maWVsZHMpO1xcbiAgICAgICAgfSk7XFxuICAgICAgfSxcXG4gICAgICBtb3ZlOiBhcnJheU1vdmUsXFxuICAgICAgbmFtZTogbmFtZSxcXG4gICAgICBwb3A6IGZ1bmN0aW9uIHBvcCgpIHtcXG4gICAgICAgIGFycmF5UG9wKCk7XFxuICAgICAgICByZXR1cm4gZ2V0SW4odmFsdWUsIGxlbmd0aCAtIDEpO1xcbiAgICAgIH0sXFxuICAgICAgcHVzaDogYXJyYXlQdXNoLFxcbiAgICAgIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrLCBpbml0aWFsKSB7XFxuICAgICAgICByZXR1cm4gKHZhbHVlIHx8IFtdKS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBpdGVtLCBpbmRleCkge1xcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soYWNjdW11bGF0b3IsIGZpZWxkTmFtZSArICdbJyArIGluZGV4ICsgJ10nLCBpbmRleCwgZmluYWxQcm9wcy5maWVsZHMpO1xcbiAgICAgICAgfSwgaW5pdGlhbCk7XFxuICAgICAgfSxcXG4gICAgICByZW1vdmU6IGFycmF5UmVtb3ZlLFxcbiAgICAgIHJlbW92ZUFsbDogYXJyYXlSZW1vdmVBbGwsXFxuICAgICAgc2hpZnQ6IGZ1bmN0aW9uIHNoaWZ0KCkge1xcbiAgICAgICAgYXJyYXlTaGlmdCgpO1xcbiAgICAgICAgcmV0dXJuIGdldEluKHZhbHVlLCAwKTtcXG4gICAgICB9LFxcbiAgICAgIHN3YXA6IGFycmF5U3dhcCxcXG4gICAgICB1bnNoaWZ0OiBhcnJheVVuc2hpZnRcXG4gICAgfSxcXG4gICAgbWV0YToge1xcbiAgICAgIGRpcnR5OiBkaXJ0eSxcXG4gICAgICBlcnJvcjogZXJyb3IsXFxuICAgICAgZm9ybTogZm9ybSxcXG4gICAgICB3YXJuaW5nOiB3YXJuaW5nLFxcbiAgICAgIGludmFsaWQ6ICEhZXJyb3IsXFxuICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgc3VibWl0RmFpbGVkOiBzdWJtaXRGYWlsZWQsXFxuICAgICAgdG91Y2hlZDogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICd0b3VjaGVkJykpLFxcbiAgICAgIHZhbGlkOiAhZXJyb3JcXG4gICAgfVxcbiAgfSwgcHJvcHMsIHJlc3QpO1xcbiAgcmV0dXJuIGZpbmFsUHJvcHM7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGaWVsZEFycmF5UHJvcHMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaW52YXJpYW50X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaW52YXJpYW50X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG5cXG5cXG5cXG52YXIgY3JlYXRlRm9ybVZhbHVlU2VsZWN0b3IgPSBmdW5jdGlvbiBjcmVhdGVGb3JtVmFsdWVTZWxlY3RvcihfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG5cXG4gICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fX2RlZmF1bHQoKShmb3JtLCAnRm9ybSB2YWx1ZSBtdXN0IGJlIHNwZWNpZmllZCcpO1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZpZWxkcyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgICAgIGZpZWxkc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XFxuICAgICAgfVxcblxcbiAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfX19kZWZhdWx0KCkoZmllbGRzLmxlbmd0aCwgJ05vIGZpZWxkcyBzcGVjaWZpZWQnKTtcXG4gICAgICByZXR1cm4gZmllbGRzLmxlbmd0aCA9PT0gMSA/XFxuICAgICAgLy8gb25seSBzZWxlY3Rpbmcgb25lIGZpZWxkLCBzbyByZXR1cm4gaXRzIHZhbHVlXFxuICAgICAgZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcudmFsdWVzLicgKyBmaWVsZHNbMF0pIDpcXG4gICAgICAvLyBzZWxlY3RpbmcgbWFueSBmaWVsZHMsIHNvIHJldHVybiBhbiBvYmplY3Qgb2YgZmllbGQgdmFsdWVzXFxuICAgICAgZmllbGRzLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIGZpZWxkKSB7XFxuICAgICAgICB2YXIgdmFsdWUgPSBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gYWNjdW11bGF0b3IgOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5zZXRJbihhY2N1bXVsYXRvciwgZmllbGQsIHZhbHVlKTtcXG4gICAgICB9LCB7fSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRm9ybVZhbHVlU2VsZWN0b3IpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxcblxcblxcblxcbnZhciBjcmVhdGVWYWx1ZXMgPSBmdW5jdGlvbiBjcmVhdGVWYWx1ZXMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoY29uZmlnKSB7XFxuICAgIHZhciBfcHJvcCRnZXRGb3JtU3RhdGUkY28gPSBfZXh0ZW5kcyh7XFxuICAgICAgcHJvcDogJ3ZhbHVlcycsXFxuICAgICAgZ2V0Rm9ybVN0YXRlOiBmdW5jdGlvbiBnZXRGb3JtU3RhdGUoc3RhdGUpIHtcXG4gICAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgICB9XFxuICAgIH0sIGNvbmZpZyksXFxuICAgICAgICBmb3JtID0gX3Byb3AkZ2V0Rm9ybVN0YXRlJGNvLmZvcm0sXFxuICAgICAgICBwcm9wID0gX3Byb3AkZ2V0Rm9ybVN0YXRlJGNvLnByb3AsXFxuICAgICAgICBnZXRGb3JtU3RhdGUgPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwgcHJvcCwgZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcudmFsdWVzJykpO1xcbiAgICB9LCBmdW5jdGlvbiAoKSB7XFxuICAgICAgcmV0dXJuIHt9O1xcbiAgICB9IC8vIGlnbm9yZSBkaXNwYXRjaFxcbiAgICApO1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZVZhbHVlcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybU5hbWVzID0gZnVuY3Rpb24gY3JlYXRlR2V0Rm9ybU5hbWVzKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW4sXFxuICAgICAga2V5cyA9IF9yZWYua2V5cztcXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBrZXlzKGdldEZvcm1TdGF0ZShzdGF0ZSkpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUdldEZvcm1OYW1lcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1WYWx1ZXMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcudmFsdWVzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVZhbHVlcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybUluaXRpYWxWYWx1ZXMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5pbml0aWFsJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybUluaXRpYWxWYWx1ZXMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUdldEZvcm1TeW5jRXJyb3JzID0gZnVuY3Rpb24gY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3luY0Vycm9ycycpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUdldEZvcm1TeW5jRXJyb3JzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtQXN5bmNFcnJvcnMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtQXN5bmNFcnJvcnMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuYXN5bmNFcnJvcnMnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtQXN5bmNFcnJvcnMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUdldEZvcm1TeW5jV2FybmluZ3MgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtU3luY1dhcm5pbmdzKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLnN5bmNXYXJuaW5ncycpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUdldEZvcm1TeW5jV2FybmluZ3MpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUdldEZvcm1TdWJtaXRFcnJvcnMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtU3VibWl0RXJyb3JzKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLnN1Ym1pdEVycm9ycycpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUdldEZvcm1TdWJtaXRFcnJvcnMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNQcmlzdGluZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NSk7XFxuXFxuXFxudmFyIGNyZWF0ZUlzRGlydHkgPSBmdW5jdGlvbiBjcmVhdGVJc0RpcnR5KHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtLCBnZXRGb3JtU3RhdGUpIHtcXG4gICAgdmFyIGlzUHJpc3RpbmUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ByaXN0aW5lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpKGZvcm0sIGdldEZvcm1TdGF0ZSk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gIWlzUHJpc3RpbmUoc3RhdGUpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzRGlydHkpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNWYWxpZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nyk7XFxuXFxuXFxudmFyIGNyZWF0ZUlzSW52YWxpZCA9IGZ1bmN0aW9uIGNyZWF0ZUlzSW52YWxpZChzdHJ1Y3R1cmUpIHtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSwgZ2V0Rm9ybVN0YXRlKSB7XFxuICAgIHZhciBpc1ZhbGlkID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNWYWxpZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKShmb3JtLCBnZXRGb3JtU3RhdGUpO1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuICFpc1ZhbGlkKHN0YXRlKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVJc0ludmFsaWQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUlzU3VibWl0dGluZyA9IGZ1bmN0aW9uIGNyZWF0ZUlzU3VibWl0dGluZyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHZhciBmb3JtU3RhdGUgPSBnZXRGb3JtU3RhdGUoc3RhdGUpO1xcbiAgICAgIHJldHVybiBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnN1Ym1pdHRpbmcnKSB8fCBmYWxzZTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVJc1N1Ym1pdHRpbmcpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUhhc1N1Ym1pdFN1Y2NlZWRlZCA9IGZ1bmN0aW9uIGNyZWF0ZUhhc1N1Ym1pdFN1Y2NlZWRlZChfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHZhciBmb3JtU3RhdGUgPSBnZXRGb3JtU3RhdGUoc3RhdGUpO1xcbiAgICAgIHJldHVybiBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnN1Ym1pdFN1Y2NlZWRlZCcpIHx8IGZhbHNlO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUhhc1N1Ym1pdFN1Y2NlZWRlZCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjUwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSGFzU3VibWl0RmFpbGVkID0gZnVuY3Rpb24gY3JlYXRlSGFzU3VibWl0RmFpbGVkKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0RmFpbGVkJykgfHwgZmFsc2U7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzU3VibWl0RmFpbGVkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxudmFyIEZvcm0gPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgX2luaGVyaXRzKEZvcm0sIF9Db21wb25lbnQpO1xcblxcbiAgZnVuY3Rpb24gRm9ybShwcm9wcywgY29udGV4dCkge1xcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRm9ybSk7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGb3JtLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRm9ybSkpLmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgaWYgKCFjb250ZXh0Ll9yZWR1eEZvcm0pIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Zvcm0gbXVzdCBiZSBpbnNpZGUgYSBjb21wb25lbnQgZGVjb3JhdGVkIHdpdGggcmVkdXhGb3JtKCknKTtcXG4gICAgfVxcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICBfY3JlYXRlQ2xhc3MoRm9ybSwgW3tcXG4gICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcklubmVyT25TdWJtaXQodGhpcy5wcm9wcy5vblN1Ym1pdCk7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiAncmVuZGVyJyxcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nLCB0aGlzLnByb3BzKTtcXG4gICAgfVxcbiAgfV0pO1xcblxcbiAgcmV0dXJuIEZvcm07XFxufShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbkZvcm0ucHJvcFR5cGVzID0ge1xcbiAgb25TdWJtaXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLmlzUmVxdWlyZWRcXG59O1xcbkZvcm0uY29udGV4dFR5cGVzID0ge1xcbiAgX3JlZHV4Rm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdFxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoRm9ybSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjUyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX191dGlsX3ByZWZpeE5hbWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxudmFyIEZvcm1TZWN0aW9uID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gIF9pbmhlcml0cyhGb3JtU2VjdGlvbiwgX0NvbXBvbmVudCk7XFxuXFxuICBmdW5jdGlvbiBGb3JtU2VjdGlvbihwcm9wcywgY29udGV4dCkge1xcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRm9ybVNlY3Rpb24pO1xcblxcbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRm9ybVNlY3Rpb24uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtU2VjdGlvbikpLmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgaWYgKCFjb250ZXh0Ll9yZWR1eEZvcm0pIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Zvcm1TZWN0aW9uIG11c3QgYmUgaW5zaWRlIGEgY29tcG9uZW50IGRlY29yYXRlZCB3aXRoIHJlZHV4Rm9ybSgpJyk7XFxuICAgIH1cXG4gICAgcmV0dXJuIF90aGlzO1xcbiAgfVxcblxcbiAgX2NyZWF0ZUNsYXNzKEZvcm1TZWN0aW9uLCBbe1xcbiAgICBrZXk6ICdnZXRDaGlsZENvbnRleHQnLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xcbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0LFxcbiAgICAgICAgICBuYW1lID0gdGhpcy5wcm9wcy5uYW1lO1xcblxcbiAgICAgIHJldHVybiB7XFxuICAgICAgICBfcmVkdXhGb3JtOiBfZXh0ZW5kcyh7fSwgY29udGV4dC5fcmVkdXhGb3JtLCB7XFxuICAgICAgICAgIHNlY3Rpb25QcmVmaXg6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSlcXG4gICAgICAgIH0pXFxuICAgICAgfTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6ICdyZW5kZXInLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICBjaGlsZHJlbiA9IF9wcm9wcy5jaGlsZHJlbixcXG4gICAgICAgICAgbmFtZSA9IF9wcm9wcy5uYW1lLFxcbiAgICAgICAgICBjb21wb25lbnQgPSBfcHJvcHMuY29tcG9uZW50LFxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wcywgWydjaGlsZHJlbicsICduYW1lJywgJ2NvbXBvbmVudCddKTtcXG5cXG4gICAgICBpZiAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdC5hLmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKGNvbXBvbmVudCwgX2V4dGVuZHMoe30sIHJlc3QsIHtcXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxcbiAgICAgIH0pKTtcXG4gICAgfVxcbiAgfV0pO1xcblxcbiAgcmV0dXJuIEZvcm1TZWN0aW9uO1xcbn0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG5Gb3JtU2VjdGlvbi5wcm9wVHlwZXMgPSB7XFxuICBuYW1lOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nLmlzUmVxdWlyZWQsXFxuICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUoW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nXSlcXG59O1xcblxcbkZvcm1TZWN0aW9uLmRlZmF1bHRQcm9wcyA9IHtcXG4gIGNvbXBvbmVudDogJ2RpdidcXG59O1xcblxcbkZvcm1TZWN0aW9uLmNoaWxkQ29udGV4dFR5cGVzID0ge1xcbiAgX3JlZHV4Rm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdC5pc1JlcXVpcmVkXFxufTtcXG5cXG5Gb3JtU2VjdGlvbi5jb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChGb3JtU2VjdGlvbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjUzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG5cXG52YXIgYW55ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmFueSxcXG4gICAgYm9vbCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICBmdW5jID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHNoYXBlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnNoYXBlLFxcbiAgICBzdHJpbmcgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nLFxcbiAgICBvbmVPZlR5cGUgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlLFxcbiAgICBvYmplY3QgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0O1xcblxcblxcbnZhciBwcm9wVHlwZXMgPSB7XFxuICAvLyBTdGF0ZTpcXG4gIGFueVRvdWNoZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiBhbnkgb2YgdGhlIGZpZWxkcyBoYXZlIGJlZW4gbWFya2VkIGFzIHRvdWNoZWRcXG4gIGFzeW5jVmFsaWRhdGluZzogb25lT2ZUeXBlKFtib29sLCBzdHJpbmddKS5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFzeW5jIHZhbGlkYXRpb24gaXMgcnVubmluZywgYSBzdHJpbmcgaWYgYSBmaWVsZCB0cmlnZ2VyZWQgYXN5bmMgdmFsaWRhdGlvblxcbiAgZGlydHk6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiBhbnkgdmFsdWVzIGFyZSBkaWZmZXJlbnQgZnJvbSBpbml0aWFsVmFsdWVzXFxuICBlcnJvcjogYW55LCAvLyBmb3JtLXdpZGUgZXJyb3IgZnJvbSAnX2Vycm9yJyBrZXkgaW4gdmFsaWRhdGlvbiByZXN1bHRcXG4gIGZvcm06IHN0cmluZy5pc1JlcXVpcmVkLCAvLyB0aGUgbmFtZSBvZiB0aGUgZm9ybVxcbiAgaW52YWxpZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZXJlIGFyZSBhbnkgdmFsaWRhdGlvbiBlcnJvcnNcXG4gIGluaXRpYWxpemVkOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlIGZvcm0gaGFzIGJlZW4gaW5pdGlhbGl6ZWRcXG4gIGluaXRpYWxWYWx1ZXM6IG9iamVjdCwgLy8gdGhlIGluaXRpYWxWYWx1ZXMgb2JqZWN0IHBhc3NlZCB0byByZWR1eEZvcm1cXG4gIHByaXN0aW5lOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlIHZhbHVlcyBhcmUgdGhlIHNhbWUgYXMgaW5pdGlhbFZhbHVlc1xcbiAgcHVyZTogYm9vbC5pc1JlcXVpcmVkLCAvLyBpZiB0cnVlLCBpbXBsZW1lbnRzIHNob3VsZENvbXBvbmVudFVwZGF0ZVxcbiAgc3VibWl0dGluZzogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZSBmb3JtIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN1Ym1pdHRlZFxcbiAgc3VibWl0RmFpbGVkOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlIGZvcm0gd2FzIHN1Ym1pdHRlZCBhbmQgZmFpbGVkIGZvciBhbnkgcmVhc29uXFxuICBzdWJtaXRTdWNjZWVkZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSB3YXMgc3VjY2Vzc2Z1bGx5IHN1Ym1pdHRlZFxcbiAgdmFsaWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGVyZSBhcmUgbm8gdmFsaWRhdGlvbiBlcnJvcnNcXG4gIHdhcm5pbmc6IGFueSwgLy8gZm9ybS13aWRlIHdhcm5pbmcgZnJvbSAnX3dhcm5pbmcnIGtleSBpbiB2YWxpZGF0aW9uIHJlc3VsdFxcbiAgLy8gQWN0aW9uczpcXG4gIGFycmF5OiBzaGFwZSh7XFxuICAgIGluc2VydDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBpbnNlcnQgYSB2YWx1ZSBpbnRvIGFuIGFycmF5IGZpZWxkXFxuICAgIG1vdmU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gbW92ZSBhIHZhbHVlIHdpdGhpbiBhbiBhcnJheSBmaWVsZFxcbiAgICBwb3A6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcG9wIGEgdmFsdWUgb2ZmIG9mIGFuIGFycmF5IGZpZWxkXFxuICAgIHB1c2g6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcHVzaCBhIHZhbHVlIG9udG8gYW4gYXJyYXkgZmllbGRcXG4gICAgcmVtb3ZlOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIHJlbW92ZSBhIHZhbHVlIGZyb20gYW4gYXJyYXkgZmllbGRcXG4gICAgcmVtb3ZlQWxsOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIHJlbW92ZSBhbGwgdGhlIHZhbHVlcyBmcm9tIGFuIGFycmF5IGZpZWxkXFxuICAgIHNoaWZ0OiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIHNoaWZ0IGEgdmFsdWUgb3V0IG9mIGFuIGFycmF5IGZpZWxkXFxuICAgIHNwbGljZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzcGxpY2UgYSB2YWx1ZSBpbnRvIGFuIGFycmF5IGZpZWxkXFxuICAgIHN3YXA6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gc3dhcCB2YWx1ZXMgaW4gYW4gYXJyYXkgZmllbGRcXG4gICAgdW5zaGlmdDogZnVuYy5pc1JlcXVpcmVkIC8vIGZ1bmN0aW9uIHRvIHVuc2hpZnQgYSB2YWx1ZSBpbnRvIGFuIGFycmF5IGZpZWxkXFxuICB9KSxcXG4gIGFzeW5jVmFsaWRhdGU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gdHJpZ2dlciBhc3luYyB2YWxpZGF0aW9uXFxuICBhdXRvZmlsbDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gc2V0IGEgdmFsdWUgb2YgYSBmaWVsZCBhbmQgbWFyayBpdCBhcyBhdXRvZmlsbGVkXFxuICBibHVyOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBtYXJrIGEgZmllbGQgYXMgYmx1cnJlZFxcbiAgY2hhbmdlOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIGEgZmllbGRcXG4gIGNsZWFyQXN5bmNFcnJvcjogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gY2xlYXIgdGhlIGFzeW5jIGVycm9yIG9mIGEgZmllbGRcXG4gIGRlc3Ryb3k6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGRlc3Ryb3kgdGhlIGZvcm0ncyBkYXRhIGluIFJlZHV4XFxuICBkaXNwYXRjaDogZnVuYy5pc1JlcXVpcmVkLCAvLyB0aGUgUmVkdXggZGlzcGF0Y2ggYWN0aW9uXFxuICBoYW5kbGVTdWJtaXQ6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gc3VibWl0IHRoZSBmb3JtXFxuICBpbml0aWFsaXplOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBpbml0aWFsaXplIGZvcm0gZGF0YVxcbiAgcmVzZXQ6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIHJlc2V0IHRoZSBmb3JtIGRhdGEgdG8gcHJldmlvdXNseSBpbml0aWFsaXplZCB2YWx1ZXNcXG4gIHRvdWNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBtYXJrIGZpZWxkcyBhcyB0b3VjaGVkXFxuICBzdWJtaXQ6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIHRyaWdnZXIgYSBzdWJtaXNzaW9uIG9mIHRoZSBzcGVjaWZpZWQgZm9ybVxcbiAgdW50b3VjaDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gbWFyayBmaWVsZHMgYXMgdW50b3VjaGVkXFxuXFxuICAvLyB0cmlnZ2VyU3VibWl0XFxuICB0cmlnZ2VyU3VibWl0OiBib29sLCAvLyBpZiB0cnVlLCBzdWJtaXRzIHRoZSBmb3JtIG9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNcXG4gIGNsZWFyU3VibWl0OiBmdW5jLmlzUmVxdWlyZWQgLy8gY2FsbGVkIGJlZm9yZSBhIHRyaWdnZXJlZCBzdWJtaXQsIGJ5IGRlZmF1bHQgY2xlYXJzIHRyaWdnZXJTdWJtaXRcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHByb3BUeXBlcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjU0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbm1vZHVsZS5leHBvcnRzID0gcGxhdGZvcm02O1xcblxcbi8qKiovIH0pLFxcbi8qIDI1NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XFxuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcXG4gICAgICAgICAgICB0W3BdID0gc1twXTtcXG4gICAgfVxcbiAgICByZXR1cm4gdDtcXG59O1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgdXVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjU2KTtcXG52YXIgcmVkdXhfZm9ybV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7XFxudmFyIGhlbHBfMSA9IF9fd2VicGFja19yZXF1aXJlX18oODgpO1xcbnZhciBjbGFzc05hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XFxudmFyIFRleHRJbnB1dCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhUZXh0SW5wdXQsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFRleHRJbnB1dChwcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5yZW5kZXJUZXh0ID0gZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMucHJvcHMsIGxhYmVsID0gX2EubGFiZWwsIGRpc2FibGVkID0gX2EuZGlzYWJsZWQsIGF1dG9mb2N1cyA9IF9hLmF1dG9mb2N1cywgaGVscCA9IF9hLmhlbHAsIGNvbnRhaW5lckNsYXNzID0gX2EuY29udGFpbmVyQ2xhc3MsIGlucHV0Q2xhc3MgPSBfYS5pbnB1dENsYXNzLCB0eXBlID0gX2EudHlwZSwgc3RlcCA9IF9hLnN0ZXAsIHJhbmRvbUdlbmVyYXRvciA9IF9hLnJhbmRvbUdlbmVyYXRvciwgcGxhY2Vob2xkZXIgPSBfYS5wbGFjZWhvbGRlciwgY29sbGFwc2VFcnJvclNwYWNlID0gX2EuY29sbGFwc2VFcnJvclNwYWNlO1xcbiAgICAgICAgICAgIHZhciBpbnB1dCA9IGZpZWxkLmlucHV0LCBtZXRhID0gZmllbGQubWV0YTtcXG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWdyb3VwJywgY29udGFpbmVyQ2xhc3MsIHtcXG4gICAgICAgICAgICAgICAgICAgICdpbnZhbGlkJzogbWV0YS50b3VjaGVkICYmICEhbWV0YS5lcnJvclxcbiAgICAgICAgICAgICAgICB9KSB9LFxcbiAgICAgICAgICAgICAgICBsYWJlbCA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImxhYmVsXFxcIiwgbnVsbCxcXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsLFxcbiAgICAgICAgICAgICAgICAgICAgaGVscCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KGhlbHBfMS5kZWZhdWx0LCB7IHRleHQ6IGhlbHAgfSkpIDogbnVsbCxcXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiaW5wdXRcXFwiLCBfX2Fzc2lnbih7fSwgaW5wdXQsIHsga2V5OiBpbnB1dC5uYW1lLCB0eXBlOiB0eXBlIHx8ICd0ZXh0Jywgc3RlcDogIXR5cGUgfHwgdHlwZSAhPT0gJ251bWJlcicgPyB1bmRlZmluZWQgOiBzdGVwLCBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsIGRpc2FibGVkOiBkaXNhYmxlZCwgYXV0b0ZvY3VzOiBhdXRvZm9jdXMsIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1jb250cm9sIGlucHV0LWJsb2NrJywgaW5wdXRDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdidG4tcHJlZml4JzogcmFuZG9tR2VuZXJhdG9yXFxuICAgICAgICAgICAgICAgICAgICB9KSB9KSksXFxuICAgICAgICAgICAgICAgIHJhbmRvbUdlbmVyYXRvciA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJidXR0b25cXFwiLCB7IHR5cGU6IFxcXCJidXR0b25cXFwiLCBjbGFzc05hbWU6IFxcXCJidG4gYnRuLWluZm8gaW5wdXQtc3VmZml4XFxcIiwgb25DbGljazogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIF90aGlzLmdlbmVyYXRlQ2xpZW50U2VjcmV0KGZpZWxkKTsgfSB9LFxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwic3BhblxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiZmFzIGZhLXJhbmRvbVxcXCIgfSkpKSA6IG51bGwsXFxuICAgICAgICAgICAgICAgIChtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yKSA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgbWV0YS5lcnJvcikgOiAoY29sbGFwc2VFcnJvclNwYWNlID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgXFxcIlxcXFx1MDBBMFxcXCIpKSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLmdlbmVyYXRlQ2xpZW50U2VjcmV0ID0gZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgICAgICAgZmllbGQuaW5wdXQub25DaGFuZ2UodXVpZC52MSgpLCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7fTtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBUZXh0SW5wdXQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgIHZhciBfYSA9IHRoaXMucHJvcHMsIG5hbWUgPSBfYS5uYW1lLCBsYWJlbCA9IF9hLmxhYmVsLCBmb3JtYXQgPSBfYS5mb3JtYXQsIG5vcm1hbGl6ZSA9IF9hLm5vcm1hbGl6ZSwgcGFyc2UgPSBfYS5wYXJzZSwgdmFsaWRhdGUgPSBfYS52YWxpZGF0ZSwgd2FybiA9IF9hLndhcm47XFxuICAgICAgICB2YXIgYmFzZUZpZWxkUHJvcHMgPSB7XFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcXG4gICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcXG4gICAgICAgICAgICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBwYXJzZTogcGFyc2UsXFxuICAgICAgICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlLFxcbiAgICAgICAgICAgIHdhcm46IHdhcm5cXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChyZWR1eF9mb3JtXzEuRmllbGQsIF9fYXNzaWduKHt9LCBiYXNlRmllbGRQcm9wcywgeyBjb21wb25lbnQ6IHRoaXMucmVuZGVyVGV4dCB9KSk7XFxuICAgIH07XFxuICAgIHJldHVybiBUZXh0SW5wdXQ7XFxufShSZWFjdC5Db21wb25lbnQpKTtcXG5leHBvcnRzLmRlZmF1bHQgPSBUZXh0SW5wdXQ7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjU2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbnZhciB2MSA9IF9fd2VicGFja19yZXF1aXJlX18oMjU3KTtcXG52YXIgdjQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1OCk7XFxuXFxudmFyIHV1aWQgPSB2NDtcXG51dWlkLnYxID0gdjE7XFxudXVpZC52NCA9IHY0O1xcblxcbm1vZHVsZS5leHBvcnRzID0gdXVpZDtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHJuZyA9IF9fd2VicGFja19yZXF1aXJlX18oODYpO1xcbnZhciBieXRlc1RvVXVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oODcpO1xcblxcbi8vICoqYHYxKClgIC0gR2VuZXJhdGUgdGltZS1iYXNlZCBVVUlEKipcXG4vL1xcbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9MaW9zSy9VVUlELmpzXFxuLy8gYW5kIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS91dWlkLmh0bWxcXG5cXG52YXIgX25vZGVJZDtcXG52YXIgX2Nsb2Nrc2VxO1xcblxcbi8vIFByZXZpb3VzIHV1aWQgY3JlYXRpb24gdGltZVxcbnZhciBfbGFzdE1TZWNzID0gMDtcXG52YXIgX2xhc3ROU2VjcyA9IDA7XFxuXFxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9icm9vZmEvbm9kZS11dWlkIGZvciBBUEkgZGV0YWlsc1xcbmZ1bmN0aW9uIHYxKG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcXG4gIHZhciBiID0gYnVmIHx8IFtdO1xcblxcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XFxuICB2YXIgbm9kZSA9IG9wdGlvbnMubm9kZSB8fCBfbm9kZUlkO1xcbiAgdmFyIGNsb2Nrc2VxID0gb3B0aW9ucy5jbG9ja3NlcSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jbG9ja3NlcSA6IF9jbG9ja3NlcTtcXG5cXG4gIC8vIG5vZGUgYW5kIGNsb2Nrc2VxIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gcmFuZG9tIHZhbHVlcyBpZiB0aGV5J3JlIG5vdFxcbiAgLy8gc3BlY2lmaWVkLiAgV2UgZG8gdGhpcyBsYXppbHkgdG8gbWluaW1pemUgaXNzdWVzIHJlbGF0ZWQgdG8gaW5zdWZmaWNpZW50XFxuICAvLyBzeXN0ZW0gZW50cm9weS4gIFNlZSAjMTg5XFxuICBpZiAobm9kZSA9PSBudWxsIHx8IGNsb2Nrc2VxID09IG51bGwpIHtcXG4gICAgdmFyIHNlZWRCeXRlcyA9IHJuZygpO1xcbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XFxuICAgICAgLy8gUGVyIDQuNSwgY3JlYXRlIGFuZCA0OC1iaXQgbm9kZSBpZCwgKDQ3IHJhbmRvbSBiaXRzICsgbXVsdGljYXN0IGJpdCA9IDEpXFxuICAgICAgbm9kZSA9IF9ub2RlSWQgPSBbXFxuICAgICAgICBzZWVkQnl0ZXNbMF0gfCAweDAxLFxcbiAgICAgICAgc2VlZEJ5dGVzWzFdLCBzZWVkQnl0ZXNbMl0sIHNlZWRCeXRlc1szXSwgc2VlZEJ5dGVzWzRdLCBzZWVkQnl0ZXNbNV1cXG4gICAgICBdO1xcbiAgICB9XFxuICAgIGlmIChjbG9ja3NlcSA9PSBudWxsKSB7XFxuICAgICAgLy8gUGVyIDQuMi4yLCByYW5kb21pemUgKDE0IGJpdCkgY2xvY2tzZXFcXG4gICAgICBjbG9ja3NlcSA9IF9jbG9ja3NlcSA9IChzZWVkQnl0ZXNbNl0gPDwgOCB8IHNlZWRCeXRlc1s3XSkgJiAweDNmZmY7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC8vIFVVSUQgdGltZXN0YW1wcyBhcmUgMTAwIG5hbm8tc2Vjb25kIHVuaXRzIHNpbmNlIHRoZSBHcmVnb3JpYW4gZXBvY2gsXFxuICAvLyAoMTU4Mi0xMC0xNSAwMDowMCkuICBKU051bWJlcnMgYXJlbid0IHByZWNpc2UgZW5vdWdoIGZvciB0aGlzLCBzb1xcbiAgLy8gdGltZSBpcyBoYW5kbGVkIGludGVybmFsbHkgYXMgJ21zZWNzJyAoaW50ZWdlciBtaWxsaXNlY29uZHMpIGFuZCAnbnNlY3MnXFxuICAvLyAoMTAwLW5hbm9zZWNvbmRzIG9mZnNldCBmcm9tIG1zZWNzKSBzaW5jZSB1bml4IGVwb2NoLCAxOTcwLTAxLTAxIDAwOjAwLlxcbiAgdmFyIG1zZWNzID0gb3B0aW9ucy5tc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5tc2VjcyA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xcblxcbiAgLy8gUGVyIDQuMi4xLjIsIHVzZSBjb3VudCBvZiB1dWlkJ3MgZ2VuZXJhdGVkIGR1cmluZyB0aGUgY3VycmVudCBjbG9ja1xcbiAgLy8gY3ljbGUgdG8gc2ltdWxhdGUgaGlnaGVyIHJlc29sdXRpb24gY2xvY2tcXG4gIHZhciBuc2VjcyA9IG9wdGlvbnMubnNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNlY3MgOiBfbGFzdE5TZWNzICsgMTtcXG5cXG4gIC8vIFRpbWUgc2luY2UgbGFzdCB1dWlkIGNyZWF0aW9uIChpbiBtc2VjcylcXG4gIHZhciBkdCA9IChtc2VjcyAtIF9sYXN0TVNlY3MpICsgKG5zZWNzIC0gX2xhc3ROU2VjcykvMTAwMDA7XFxuXFxuICAvLyBQZXIgNC4yLjEuMiwgQnVtcCBjbG9ja3NlcSBvbiBjbG9jayByZWdyZXNzaW9uXFxuICBpZiAoZHQgPCAwICYmIG9wdGlvbnMuY2xvY2tzZXEgPT09IHVuZGVmaW5lZCkge1xcbiAgICBjbG9ja3NlcSA9IGNsb2Nrc2VxICsgMSAmIDB4M2ZmZjtcXG4gIH1cXG5cXG4gIC8vIFJlc2V0IG5zZWNzIGlmIGNsb2NrIHJlZ3Jlc3NlcyAobmV3IGNsb2Nrc2VxKSBvciB3ZSd2ZSBtb3ZlZCBvbnRvIGEgbmV3XFxuICAvLyB0aW1lIGludGVydmFsXFxuICBpZiAoKGR0IDwgMCB8fCBtc2VjcyA+IF9sYXN0TVNlY3MpICYmIG9wdGlvbnMubnNlY3MgPT09IHVuZGVmaW5lZCkge1xcbiAgICBuc2VjcyA9IDA7XFxuICB9XFxuXFxuICAvLyBQZXIgNC4yLjEuMiBUaHJvdyBlcnJvciBpZiB0b28gbWFueSB1dWlkcyBhcmUgcmVxdWVzdGVkXFxuICBpZiAobnNlY3MgPj0gMTAwMDApIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCd1dWlkLnYxKCk6IENhblxcXFwndCBjcmVhdGUgbW9yZSB0aGFuIDEwTSB1dWlkcy9zZWMnKTtcXG4gIH1cXG5cXG4gIF9sYXN0TVNlY3MgPSBtc2VjcztcXG4gIF9sYXN0TlNlY3MgPSBuc2VjcztcXG4gIF9jbG9ja3NlcSA9IGNsb2Nrc2VxO1xcblxcbiAgLy8gUGVyIDQuMS40IC0gQ29udmVydCBmcm9tIHVuaXggZXBvY2ggdG8gR3JlZ29yaWFuIGVwb2NoXFxuICBtc2VjcyArPSAxMjIxOTI5MjgwMDAwMDtcXG5cXG4gIC8vIGB0aW1lX2xvd2BcXG4gIHZhciB0bCA9ICgobXNlY3MgJiAweGZmZmZmZmYpICogMTAwMDAgKyBuc2VjcykgJSAweDEwMDAwMDAwMDtcXG4gIGJbaSsrXSA9IHRsID4+PiAyNCAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCA+Pj4gMTYgJiAweGZmO1xcbiAgYltpKytdID0gdGwgPj4+IDggJiAweGZmO1xcbiAgYltpKytdID0gdGwgJiAweGZmO1xcblxcbiAgLy8gYHRpbWVfbWlkYFxcbiAgdmFyIHRtaCA9IChtc2VjcyAvIDB4MTAwMDAwMDAwICogMTAwMDApICYgMHhmZmZmZmZmO1xcbiAgYltpKytdID0gdG1oID4+PiA4ICYgMHhmZjtcXG4gIGJbaSsrXSA9IHRtaCAmIDB4ZmY7XFxuXFxuICAvLyBgdGltZV9oaWdoX2FuZF92ZXJzaW9uYFxcbiAgYltpKytdID0gdG1oID4+PiAyNCAmIDB4ZiB8IDB4MTA7IC8vIGluY2x1ZGUgdmVyc2lvblxcbiAgYltpKytdID0gdG1oID4+PiAxNiAmIDB4ZmY7XFxuXFxuICAvLyBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGAgKFBlciA0LjIuMiAtIGluY2x1ZGUgdmFyaWFudClcXG4gIGJbaSsrXSA9IGNsb2Nrc2VxID4+PiA4IHwgMHg4MDtcXG5cXG4gIC8vIGBjbG9ja19zZXFfbG93YFxcbiAgYltpKytdID0gY2xvY2tzZXEgJiAweGZmO1xcblxcbiAgLy8gYG5vZGVgXFxuICBmb3IgKHZhciBuID0gMDsgbiA8IDY7ICsrbikge1xcbiAgICBiW2kgKyBuXSA9IG5vZGVbbl07XFxuICB9XFxuXFxuICByZXR1cm4gYnVmID8gYnVmIDogYnl0ZXNUb1V1aWQoYik7XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gdjE7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjU4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbnZhciBybmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg2KTtcXG52YXIgYnl0ZXNUb1V1aWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg3KTtcXG5cXG5mdW5jdGlvbiB2NChvcHRpb25zLCBidWYsIG9mZnNldCkge1xcbiAgdmFyIGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XFxuXFxuICBpZiAodHlwZW9mKG9wdGlvbnMpID09ICdzdHJpbmcnKSB7XFxuICAgIGJ1ZiA9IG9wdGlvbnMgPT09ICdiaW5hcnknID8gbmV3IEFycmF5KDE2KSA6IG51bGw7XFxuICAgIG9wdGlvbnMgPSBudWxsO1xcbiAgfVxcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XFxuXFxuICB2YXIgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7XFxuXFxuICAvLyBQZXIgNC40LCBzZXQgYml0cyBmb3IgdmVyc2lvbiBhbmQgYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgXFxuICBybmRzWzZdID0gKHJuZHNbNl0gJiAweDBmKSB8IDB4NDA7XFxuICBybmRzWzhdID0gKHJuZHNbOF0gJiAweDNmKSB8IDB4ODA7XFxuXFxuICAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcXG4gIGlmIChidWYpIHtcXG4gICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IDE2OyArK2lpKSB7XFxuICAgICAgYnVmW2kgKyBpaV0gPSBybmRzW2lpXTtcXG4gICAgfVxcbiAgfVxcblxcbiAgcmV0dXJuIGJ1ZiB8fCBieXRlc1RvVXVpZChybmRzKTtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB2NDtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XFxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcXG4gICAgfTtcXG59KSgpO1xcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcXG4gICAgICAgIHMgPSBhcmd1bWVudHNbaV07XFxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXFxuICAgICAgICAgICAgdFtwXSA9IHNbcF07XFxuICAgIH1cXG4gICAgcmV0dXJuIHQ7XFxufTtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbnZhciBSZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxudmFyIHJlZHV4X2Zvcm1fMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYpO1xcbnZhciBjbGFzc05hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XFxudmFyIGhlbHBfMSA9IF9fd2VicGFja19yZXF1aXJlX18oODgpO1xcbnZhciBTZWxlY3RJbnB1dCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhTZWxlY3RJbnB1dCwgX3N1cGVyKTtcXG4gICAgZnVuY3Rpb24gU2VsZWN0SW5wdXQocHJvcHMpIHtcXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xcbiAgICAgICAgX3RoaXMucmVuZGVyU2VsZWN0ID0gZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMucHJvcHMsIGxhYmVsID0gX2EubGFiZWwsIG9wdGlvbnMgPSBfYS5vcHRpb25zLCBkaXNhYmxlZCA9IF9hLmRpc2FibGVkLCBoZWxwID0gX2EuaGVscCwgY29udGFpbmVyQ2xhc3MgPSBfYS5jb250YWluZXJDbGFzcywgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3MsIGhpZGVFbXB0eU9wdGlvbiA9IF9hLmhpZGVFbXB0eU9wdGlvbiwgY29sbGFwc2VFcnJvclNwYWNlID0gX2EuY29sbGFwc2VFcnJvclNwYWNlO1xcbiAgICAgICAgICAgIHZhciBpbnB1dCA9IGZpZWxkLmlucHV0LCBtZXRhID0gZmllbGQubWV0YTtcXG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWdyb3VwJywgY29udGFpbmVyQ2xhc3MsIHtcXG4gICAgICAgICAgICAgICAgICAgICdpbnZhbGlkJzogbWV0YS50b3VjaGVkICYmICEhbWV0YS5lcnJvclxcbiAgICAgICAgICAgICAgICB9KSB9LFxcbiAgICAgICAgICAgICAgICBsYWJlbCA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImxhYmVsXFxcIiwgbnVsbCxcXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsLFxcbiAgICAgICAgICAgICAgICAgICAgaGVscCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KGhlbHBfMS5kZWZhdWx0LCB7IHRleHQ6IGhlbHAgfSkpIDogbnVsbCxcXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwic2VsZWN0XFxcIiwgX19hc3NpZ24oe30sIGlucHV0LCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1jb250cm9sJywgaW5wdXRDbGFzcyksIGRpc2FibGVkOiBkaXNhYmxlZCB9KSxcXG4gICAgICAgICAgICAgICAgICAgIGhpZGVFbXB0eU9wdGlvbiA/IG51bGwgOiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJvcHRpb25cXFwiLCB7IHZhbHVlOiBcXFwiXFxcIiB9KSxcXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHQsIGlkeCkgeyByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwib3B0aW9uXFxcIiwgeyBrZXk6IGlkeCwgdmFsdWU6IG9wdC52YWx1ZSwgZGlzYWJsZWQ6IG9wdC5kaXNhYmxlZCB9LCBvcHQubGFiZWwgfHwgb3B0LnZhbHVlKTsgfSkpLFxcbiAgICAgICAgICAgICAgICAobWV0YS50b3VjaGVkICYmICEhbWV0YS5lcnJvcikgPyBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJwXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJ2YWxpZGF0aW9uLWVycm9yLW1lc3NhZ2VcXFwiIH0sIG1ldGEuZXJyb3IpIDogKGNvbGxhcHNlRXJyb3JTcGFjZSA/IG51bGwgOiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJwXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJ2YWxpZGF0aW9uLWVycm9yLW1lc3NhZ2VcXFwiIH0sIFxcXCJcXFxcdTAwQTBcXFwiKSkpKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5zdGF0ZSA9IHt9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFNlbGVjdElucHV0LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX2EgPSB0aGlzLnByb3BzLCBvcHRpb25zID0gX2Eub3B0aW9ucywgbmFtZSA9IF9hLm5hbWUsIGZvcm1hdCA9IF9hLmZvcm1hdCwgbm9ybWFsaXplID0gX2Eubm9ybWFsaXplLCBwYXJzZSA9IF9hLnBhcnNlLCB2YWxpZGF0ZSA9IF9hLnZhbGlkYXRlLCB3YXJuID0gX2Eud2FybiwgY29udGFpbmVyQ2xhc3MgPSBfYS5jb250YWluZXJDbGFzcywgaGVscCA9IF9hLmhlbHAsIGxhYmVsID0gX2EubGFiZWwsIGlucHV0Q2xhc3MgPSBfYS5pbnB1dENsYXNzO1xcbiAgICAgICAgdmFyIGJhc2VGaWVsZFByb3BzID0ge1xcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXFxuICAgICAgICAgICAgZm9ybWF0OiBmb3JtYXQsXFxuICAgICAgICAgICAgbm9ybWFsaXplOiBub3JtYWxpemUsXFxuICAgICAgICAgICAgcGFyc2U6IHBhcnNlLFxcbiAgICAgICAgICAgIHZhbGlkYXRlOiB2YWxpZGF0ZSxcXG4gICAgICAgICAgICB3YXJuOiB3YXJuXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGggPyAoUmVhY3QuY3JlYXRlRWxlbWVudChyZWR1eF9mb3JtXzEuRmllbGQsIF9fYXNzaWduKHt9LCBiYXNlRmllbGRQcm9wcywgeyBjb21wb25lbnQ6IHRoaXMucmVuZGVyU2VsZWN0IH0pKSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcykgfSxcXG4gICAgICAgICAgICBsYWJlbCA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImxhYmVsXFxcIiwgbnVsbCxcXG4gICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgIGhlbHAgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChoZWxwXzEuZGVmYXVsdCwgeyB0ZXh0OiBoZWxwIH0pKSA6IG51bGwsXFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwic2VsZWN0XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tY29udHJvbCcsIGlucHV0Q2xhc3MpLCBkaXNhYmxlZDogdHJ1ZSB9KSkpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gU2VsZWN0SW5wdXQ7XFxufShSZWFjdC5Db21wb25lbnQpKTtcXG5leHBvcnRzLmRlZmF1bHQgPSBTZWxlY3RJbnB1dDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XFxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcXG4gICAgfTtcXG59KSgpO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgY2xhc3NOYW1lcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xcbnZhciBzcGlubmVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2MSk7XFxudmFyIFRvZ2dsZVBhbmVsID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFRvZ2dsZVBhbmVsLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBUb2dnbGVQYW5lbChwcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy50b2dnbGVQYW5lbENvbnRlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMudG9nZ2xhYmxlICE9PSBmYWxzZSkge1xcbiAgICAgICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XFxuICAgICAgICAgICAgICAgICAgICBvcGVuZWQ6ICFfdGhpcy5zdGF0ZS5vcGVuZWRcXG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLnRvZ2dsZUNhbGxiYWNrKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucHJvcHMudG9nZ2xlQ2FsbGJhY2soX3RoaXMuc3RhdGUub3BlbmVkKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0ge1xcbiAgICAgICAgICAgIG9wZW5lZDogX3RoaXMucHJvcHMuZGVmYXVsdE9wZW5lZFxcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBUb2dnbGVQYW5lbC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIHRpdGxlU3Bpbm5lciA9IHRoaXMucHJvcHMuc2hvd1NwaW5uZXIgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJzcGlubmVyLWNvbnRhaW5lclxcXCIgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KHNwaW5uZXJfMS5kZWZhdWx0LCBudWxsKSkpIDogbnVsbDtcXG4gICAgICAgIHZhciBsQ3VzdG9tQ29udHJvbHMgPSB0aGlzLnByb3BzLmxlZnRDdXN0b21Db250cm9scyA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInBhbmVsLWhlYWRpbmctY29udHJvbHNcXFwiIH0sIHRoaXMucHJvcHMubGVmdEN1c3RvbUNvbnRyb2xzKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIHJDdXN0b21Db250cm9scyA9IHRoaXMucHJvcHMucmlnaHRDdXN0b21Db250cm9scyA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInBhbmVsLWhlYWRpbmctY29udHJvbHNcXFwiLCBzdHlsZTogeyByaWdodDogMCB9IH0sIHRoaXMucHJvcHMucmlnaHRDdXN0b21Db250cm9scykpIDogbnVsbDtcXG4gICAgICAgIHZhciBjYW5jZWxCdG4gPSAodGhpcy5wcm9wcy5jYW5jZWxCdG4gJiYgdGhpcy5wcm9wcy5jYW5jZWxCdG4ubGFiZWwgJiYgdGhpcy5wcm9wcy5jYW5jZWxCdG4uYWN0aW9uKSA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJidXR0b25cXFwiLCB7IHR5cGU6IFxcXCJidXR0b25cXFwiLCBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2J0bicsIHRoaXMucHJvcHMuY2FuY2VsQnRuLmNzc0NsYXNzLCB7XFxuICAgICAgICAgICAgICAgICdidG4tZm9udCBidG4tdHJhbnMnOiAhdGhpcy5wcm9wcy5jYW5jZWxCdG4uY3NzQ2xhc3NcXG4gICAgICAgICAgICB9KSwgb25DbGljazogdGhpcy5wcm9wcy5jYW5jZWxCdG4uYWN0aW9uIH0sIHRoaXMucHJvcHMuY2FuY2VsQnRuLmxhYmVsKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIHN1Ym1pdEJ0biA9ICh0aGlzLnByb3BzLnN1Ym1pdEJ0biAmJiB0aGlzLnByb3BzLnN1Ym1pdEJ0bi5sYWJlbCAmJiB0aGlzLnByb3BzLnN1Ym1pdEJ0bi5hY3Rpb24pID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnYnRuIHB1bGwtcmlnaHQnLCB0aGlzLnByb3BzLnN1Ym1pdEJ0bi5jc3NDbGFzcywge1xcbiAgICAgICAgICAgICAgICAnYnRuLXN1Y2Nlc3MnOiAhdGhpcy5wcm9wcy5zdWJtaXRCdG4uY3NzQ2xhc3NcXG4gICAgICAgICAgICB9KSwgb25DbGljazogdGhpcy5wcm9wcy5zdWJtaXRCdG4uYWN0aW9uIH0sIHRoaXMucHJvcHMuc3VibWl0QnRuLmxhYmVsKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIHBhbmVsRm9vdGVyID0gKGNhbmNlbEJ0biB8fCBzdWJtaXRCdG4pID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtZm9vdGVyXFxcIiB9LFxcbiAgICAgICAgICAgIGNhbmNlbEJ0bixcXG4gICAgICAgICAgICBzdWJtaXRCdG4pKSA6IG51bGw7XFxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwgcGFuZWwtZGVmYXVsdFxcXCIsIHN0eWxlOiB0aGlzLnByb3BzLmN1c3RvbVN0eWxlIH0sXFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoXFxcInBhbmVsLWhlYWRpbmcgXFxcIiArIHRoaXMucHJvcHMuaGVhZGVyQ3VzdG9tQ1NTLCB7XFxuICAgICAgICAgICAgICAgICAgICAnY2xpY2stcG9pbnRlcic6IHRoaXMucHJvcHMudG9nZ2xhYmxlICE9PSBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICdoaWRkZW4nOiAhIXRoaXMucHJvcHMuaGlkZVRpdGxlXFxuICAgICAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnRvZ2dsZVBhbmVsQ29udGVudCB9LFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJoM1xcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdwYW5lbC10aXRsZScsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnaGFzLXNwaW5uZXInOiB0aGlzLnByb3BzLnNob3dTcGlubmVyXFxuICAgICAgICAgICAgICAgICAgICB9KSB9LCB0aGlzLnByb3BzLnBhbmVsVGl0bGUpLFxcbiAgICAgICAgICAgICAgICB0aXRsZVNwaW5uZXIsXFxuICAgICAgICAgICAgICAgIGxDdXN0b21Db250cm9scyxcXG4gICAgICAgICAgICAgICAgckN1c3RvbUNvbnRyb2xzLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnYWN0aW9ucycsIHsgJ2hpZGRlbic6IHRoaXMucHJvcHMudG9nZ2xhYmxlID09PSBmYWxzZSB9KSB9LFxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwic3BhblxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmYXMnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYS1jaGV2cm9uLWRvd24nOiAhdGhpcy5zdGF0ZS5vcGVuZWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYS1jaGV2cm9uLXVwJzogdGhpcy5zdGF0ZS5vcGVuZWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSB9KSkpLFxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdwYW5lbC1ib2R5Jywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2hpZGRlbic6ICF0aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICB9KSB9LCB0aGlzLnByb3BzLmNoaWxkcmVuKSxcXG4gICAgICAgICAgICBwYW5lbEZvb3RlcikpO1xcbiAgICB9O1xcbiAgICBUb2dnbGVQYW5lbC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9IGZ1bmN0aW9uIChuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmRlZmF1bHRPcGVuZWQgIT09IG5leHRQcm9wcy5kZWZhdWx0T3BlbmVkKSB7XFxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XFxuICAgICAgICAgICAgICAgIG9wZW5lZDogbmV4dFByb3BzLmRlZmF1bHRPcGVuZWRcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfTtcXG4gICAgcmV0dXJuIFRvZ2dsZVBhbmVsO1xcbn0oUmVhY3QuQ29tcG9uZW50KSk7XFxuZXhwb3J0cy5kZWZhdWx0ID0gVG9nZ2xlUGFuZWw7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjYxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbnZhciBSZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxudmFyIHNwaW5uZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYyKTtcXG52YXIgU3Bpbm5lciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhTcGlubmVyLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBTcGlubmVyKHByb3BzKSB7XFxuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XFxuICAgIH1cXG4gICAgU3Bpbm5lci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgdG9wID0gX2EudG9wLCBib3R0b20gPSBfYS5ib3R0b20sIHJpZ2h0ID0gX2EucmlnaHQsIGxlZnQgPSBfYS5sZWZ0LCBzaXplID0gX2Euc2l6ZTtcXG4gICAgICAgIHZhciBzcGlubmVyU3R5bGUgPSB7XFxuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXFxuICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcXG4gICAgICAgICAgICBtYXJnaW46ICdhdXRvJyxcXG4gICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxcbiAgICAgICAgICAgIHRvcDogdG9wLFxcbiAgICAgICAgICAgIGJvdHRvbTogYm90dG9tLFxcbiAgICAgICAgICAgIHJpZ2h0OiByaWdodCxcXG4gICAgICAgICAgICBsZWZ0OiBsZWZ0XFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogJ3NwaW5uZXInLCBzdHlsZTogc3Bpbm5lclN0eWxlIH0sXFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiaW1nXFxcIiwgeyBzcmM6IHNwaW5uZXJfMS5zcGlubmVyLCBhbHQ6ICdMb2FkaW5nLi4uJywgd2lkdGg6IHRoaXMucHJvcHMuc2l6ZSB8fCAzMiwgaGVpZ2h0OiB0aGlzLnByb3BzLnNpemUgfHwgMzIgfSkpKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIFNwaW5uZXI7XFxufShSZWFjdC5Db21wb25lbnQpKTtcXG5leHBvcnRzLmRlZmF1bHQgPSBTcGlubmVyO1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI2MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5leHBvcnRzLnNwaW5uZXIgPSAnZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoUUFCQUFQSUFBUHlsYmYybWJ2MjZqLzNPci83aTBQN3Q0djI3a0FBQUFDSC9DMDVGVkZORFFWQkZNaTR3QXdFQUFBQWgvaG9pUTNKbFlYUmxaQ0IzYVhSb0lFTm9hVzF3YkhrdVkyOXRJZ0FoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTa21xdmZpcXdidi9uaUtNWkdtV1M2Wm1HK2grNGltYjZXb1Q3YXZIYzEvZnFwek94ZXZKZmtDTWNBZ0RHSDJLWkJEQWZCV2ZxS2hVU2EyQ3J0Z1Jjb3ZyZWtQT01FMUxyaXpQNFBCNCsvYkdzWE5wdlhwLzVwTjdUSDFHZjBDQlE0TlFBRzBXaHp0cGFpU0ZONDVXa0pFQ2t6YVZSSmVSbWl1Y1g1NXFvRk5uVFppU2JHMmlxYXFaRTdLenRMVzJ0N2kwQmJ1OHZiNjl1UXdCdzhURnhzVUx2OHEvd1F2SHo4Zkp5OU1GelFyUTJNUFMxTXJXQU5uWTI5eSszdURRNHVPODVlYlJDdW5NMXV6dEFPL2s4ZkxJN3ZYcTkvamErdnVxOWZPSDd0MDZmd0VLcGp0SUVPQStodmdVam9Nb1R5STNpdXdzVXNOb1RucmpOSTdnUEM0RG1VMWt0NEVSdmFsY3liSmxnNEM3SE5hVGFaRG1Rbm93YlU3VWVSRm5RSjRiZ1g3MCtaRG9US0VqamRhRUtWRHBUYVpJVHpyZENYVnFUNnRCcTFiRk9sUnJ6cWp3dlA0RWEwOXNVYTVKelI1RmUxSnRUYlpodjI1MSsvUXIzTEp5N2RLbHFqZnYyTGwraTI1MVNiaXc0UWdKQUFBaCtRUUpDZ0FBQUN3QUFBQUFRQUJBQUFBRC93aTYzUDR3U2xtcXZmZ3F3cnYvbmpLTVpHbVdTNlptRytoKzRpbWI2V29YN2F2SGMxL2ZxcHpPeGV2SmZrQ01jQWdER0gyS1pCREFmQldmcUtoVVNhMkNydGdSY292cmVrUE9NRTFMcml6UDRQQjQrL2JHc1hOcHZYcC81cE43VEgxR2YwQ0JRNE5RQUcwV2h6dHBhaVNGTjQ1V2tKRURremFWUkplUm1pdWNYNTVxb0ZOblRaaVNiRzJpcWFxWkU3S3p0TFcydDdpMGpHNjVDd0svd01IQ3dhWXN2UXJEeWNQRlhNZkt6Ny9NR3NjQTBNL1NqZFRXeXRpOHp0dkxyR1RVMWVEQzNXWGY1c0RvNU92RTRuVGE3OUh4ZXZQMDdmanYrdXI4OW9EMnJldlhpMTY5UmJ2Y0dTU1l5NkFBaHJnY1Fyd2xrWnpGaXhnek50aFZobkdqZ2dBZ1E0b2NLVktmUndBa1U1STBtUkNseXBjQldETDZDRk9sekZZdWE2NEVhQWpoekp3NlMvS2s1Qk5uMEoxRnh5V1ZkM1RrVGFWTmhTNjlkekpxeUtkTXJjWWN1bWxxUUsxYnZmYXNxaFhyUGJCbXY1YmxHa29zVWJSc3A1QzFtclluWExkZDUwYlZ5TGV2WDFrSkFBQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NsbXF2ZmlxekxNaVlDaU80dEtkMVlaMkgrbU81c3FwTXRhK2VGeHJ3RzREdUtET1Y2QVJiMEhTMEdka0FwT3U1YTQ1ZlVKaDFGcFdocnlDcE5vZU1XWDFmcmNyTktyckJYUEZZL2JWbllZZnkyYjYydTQwbDlRbmdDeDRiWUl6ZkZWK0lYcUJpR0dLWjQ1dlkyU1FCSXlEbEVXRWM0WWVrbldXRTZPa3BhYW5xS21tbXFvTUE2K3dzYkt4bUlldEFMTzVzN1dmdDdxL3I3dy92c0M2d2p6RXhidWV3NjNLdWNjV3R3clB5NkI3eWRYQnpNak8yckRSWk5uYTRadmoxZVhUdU4vYjE0M256K25UN08yczgvVHk4TXI1M3V6OHF2UUcvRXNWVUozQmd3Z1RPckFYb0tIRGh4QWZLakJBc2FMRml4YmxSZHdZY1hNaXhvOFhOWEljR2NBanlKTWlTVzQwZWZKalNwVVFXYllNeVUwYUFKZ3JBY3dFK1JKblE1azdLZmIwQ1RUb1VKeEZkeDZGbVhUbVVwVk5XejRsR1JWbFRUSStZK29NU3RQZG9Ld1N0M0t0T0hWa1ZaNVhONEYxZU5abFdnVnJmNG9kYTZBc3g3WVk3ZWFrUzFhaDM3K0FKeVFBQUNINUJBa0tBQUFBTEFBQUFBQkFBRUFBQUFQL0NMcmMvakJLV2FxOStLck04KzVnc1lUZ1IzckF5WTBxWnJiVkM3TnduTlkyYnQrNDNQb3FXZzE0SXBLRU05NVFtV1QrbkVGbzBSaWlscVJIYTBlN3dsYTVLSjNJZXlWdnpWMHg4cWxHbzl3dXVFWnVXVWZiYlhwT0I0N3J4M2g4ZlhPQlBZTjFmNGM3RTR5TmpvK1FrWktNZVpNQUJKaVptcHVhZGxPV2w1eWltNTVab0tPb21LVmZwNm1qcTJXV3JxK0tZNjJ6cExXZ0NyaWNzR2UzdmFxNnU4S2R4TUhDdjEzSnZjdHZzc2JEaWNYU0JNOSswZExZYzgyNDNJamVzK0NMazliWHlOckc1TGJxeXJ2dzhmTHpFZ0gyOS9qNStBb0MvZjcvQVA4cEdFQ3dvTUdEQmhmb1c2aVBYOENIQUFjaW5IaFFJY09MQVJ4QzNDaVJpcUpIaXhnWGF0ejRzS1BIaVNCRDVodEpNaUtBa3g4VnFCUUpvQ1ZFa3pBVHlweTVzcWJOZ0RoekVrekpNNlBQbndKZkNxMjRzNmc5bGtpRENpWEtFK3BQcVRtcHpyUnFFeXRNclNxNXR2UjZFbXhJc1NUSnhnVGc5QjVhamtxWEZqU0w4ZTNOdUhJSDBMMW90eVJldVhzWjlnWDZkMmxnbWtoZDVwM2IxT2xneFl2MTBwdE11ZktqQkFBaCtRUUpDZ0FBQUN3QUFBQUFRQUJBQUFBRC93aTYzUDR3U2xtcXZmaXF6UFB1WUxHRTRFZDZ3TW1OS21hMjFRdXpjSnpXTm03ZnVOejZLbG9OZUNLU2hEUGVVSmxrL3B4QmFORVlvcGFrUjJ0SHU4Sld1U2lkeUhzbGI4MWRNZktwUnFQY0xyaEdibGxIMjIxNlRnZU82OGQ0ZkgxemdUMkRkWCtIT3hPTWpZNlBrSkdTakFHVmxwZVlsNU1NZVptZW1adDJVd0NmcFpXaGltT2twcCtvaVFxc3JhaWRzYUN6Z3F1MW1yZUd1YnFudkV1K3Y2NjB2OENoeHNmRnVNZVd6TDNPeUp2S3hNRk4wZ0hRd3RuYjJOTGVUOE82NFZIanRlV2pydXZzN2U0TEF2SHk4L1R6Q2dQNCtmcjcrZ29FL3dBRENnd0lyNTVCZXZmNEtkem5iNkJEZ1FVUFNreTRzR0xEaHhnalNqUklzWWFpd29zWUhXcmNpQkNBUjRzQVFtWlVRUEpneDVQOVVxb1V5YkpsdlpjdzhZR2NDWENrVFFFNGMrN2tTY0NuemFBd2gvSTAyaExwU2FVem1aSjA2aEdxU3FrYnFhSWtDckhtVDNsYUYxb05pWFdpeVp3TVpYTDlWOWJsV2JUNXhxNEU4TlhlVzdnRDVENXN5L0V1WEwwMDZkYU5GL2FqMnJWOGIvcEZDM2pndThlUUl6TktBQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTaG1xdmZpcXdydi8zZ2FPMzVLZG1VaXU2anFhYUJ5MGJnblVKQ3lmTk03MVB0ME9BOFFWYThLaDVlaGlzaFRLMU0xbm85b0FVZUxVK3R0eWsxRm56bXNGSzhVdk10VThSSVBjMTZ4R0hhUWJvZklLUEdSSDR2TjdIWUZkV0hremZVMklUNFdBaW1OY2duOXlnd1dVYkR1V2ptbU1rNXB2bmxjVG9xT2twYWFucUtJQ3E2eXRycTJwREpDRXI3V3ZzUXV6bFFxMnZhdTRtUUMrdmNDZ2ZNTER0Y1c2QzhuS3dNeTh6cTdMczgzVHNORFcwdGkvMnBEWDNRTFY0TnpkNUYvbTJPaGw2dFBzYSs3TzhIWEk0dlIzOXVmZjZmcnIvTzM4dlFNWVQrQThndldLS1Z6SXNPR0NBUkFqU3B3b1VRR0JpeGd6YXN3WWpIdWlSNG9XTjRyVTJQR2p5UUVoUjZvc2VkSmpTcFVpV2JhYytCSW1TV09SQU14MENjRG1TSms3SWRiMGVSRm8wS0ZFamU1RTZsUHBUS1kybmJhRUNsUHFTYW9yY1JJS1NyTW4wWnZSZEhLTmlQV24xbDFpeDZMMCtoV2pWWk5sWTU1OXFIWnRXNDV6RmRTMWU3ZG8zclJqNDI0TTVyQ3c0Y01SRWdBQUlma0VDUW9BQUFBc0FBQUFBRUFBUUFBQUEvOEl1dHorTUVvcHFyMzRxc0M3LzU1U2pHUnBsa3VtWmh2b2Z1SXBtK2xxQysycngzTmYzNnFjenNYcnlYNUFqSEFJQXhoOWltUVF3SHdWbjZpb1ZFbXRncTdZRVhLTDYzcER6akJOUzY0c3orRHdlUHYyeHJGemFiMTZmK2FUZTB4OVJuOUFnVU9EVUFCdEZvYzdhV29raFRlT1ZwQ1JCWk0ybFVTWGtab3JuRitlYXFCVFowMllrbXh0b3FtcW1ST3lzN1MxdHJlNHRBTzd2TDIrdmJrTXNMRUF2OGEvd1F2REM4Zk51OG1KTTh6T3g5Q2tjZ3JVMWRETDJkckkzTERUMzhEaHF1UGt6K2FZNk9uVzNjWHB2Ty9pM3ZJRDlPZjI4dm5zKys3clB2MGoxMDlndkhzRlN3MzhsaERiUVg0QkZUNEVtQXplUFhVVjYxbmJ5TEYzbzBjR0JFS0tIRWx5WkxRajEvQW9LTW15NU1rVEw5Y0FhRWt6Wk13czhHclN2TGtxcDA2V1BNV2s5TFB5cDh1aGhKQXFNbnEwbTArbUlvUEdlZ3FWZ05TclJhdGFWU3FOSzhxWldyYzYxUmhXYkQycVVMR2laYXFXYk5pMitzQnFoZXRQYmxXNkJzdmlsYWpYSzB5L01qOEtIa3c0UWdJQUlma0VDUW9BQUFBc0FBQUFBRUFBUUFBQUEvOEl1dHorTUVvNXFyMzRLc0c3LzU0U2pHUnBsa3VtWmh2b2Z1SXBtK2xxRCsycngzTmYzNnFjenNYcnlYNUFqSEFJQXhoOWltUVF3SHdWbjZpb1ZFbXRncTdZRVhLTDYzcER6akJOUzY0c3orRHdlUHYyeHJGemFiMTZmK2FUZTB4OVJuOUFnVU9EVUFCdEZvYzdhV29raFRlT1ZwQ1JBWk0ybFVTWGtab3JuRitlYXFCVFowMllrbXh0b3FtcW1ST3lzN1MxdHJlNHRBUzd2TDIrdmJrTUJjUEV4Y2JGQzcvS3Y4RUx4OC9IeWN2VEJNMEswTmpEMHRUSzFnRFoyTnZjdnQ3ZzBPTGp2T1htMFFycHpOYnM3UUR2NVBIeXlPNzE2dmY0MnZyN3F2WHpoKzdkT244RkNxWTdTQkRnUG9iNEZJNkRLRThpTjRyc0xGTERhRTUzNHpTTzREd3VBNWxOWkxlQkViMnBYTW15WlFPRS8yQW0vQWJUV1UyYUNLL2R4TmxRcHM2Y1AzdmU5QmswSlZHaVBJME8zWGwwS2RDa0ZhRm1sTnF4YU5TbVQ3RUt6ZXAwYTBPcUljR1dGQnZPNmxTdEtjbWVVL3ZNYkZXMjdkQkdoV3ZNYlZpa2NzOHk3YXFVSzlDOGIxMEtIa3c0UWdJQU93PT0nO1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNwaW5uZXIuanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjYzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbnZhciBtZDVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjY0KTtcXG52YXIgYmFzZTY0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjcpO1xcbnZhciBjbGFzc05hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XFxudmFyIHdvcmRpbmdzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2OSk7XFxudmFyIENvbmZpZ18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNzApO1xcbnZhciBEYXRhXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3MSk7XFxuZXhwb3J0cy5FTUFJTF9SRUdFWCA9IC9eXFxcXFMrQFxcXFxTK1xcXFwuXFxcXFMrJC87XFxuZXhwb3J0cy5DT0xPUl9DT0RFX1JFR0VYID0gL14jKFtBLUZhLWYwLTldezZ9fFtBLUZhLWYwLTldezN9KSQvO1xcbmV4cG9ydHMuU0NPUEVfS0VZV09SRF9SRUdFWCA9IC9eW2EtekEtWjAtOS1ffkAkwqN84oKswqXCpyZdKyQvO1xcbmV4cG9ydHMuTUFQX1BST1BFUlRZX0tFWV9SRUdFWCA9IC9eW2EtekEtWjAtOS1fXSskLztcXG5leHBvcnRzLlhNTF9UQUdfUkVHRVggPSAvXlthLXpBLVpfOl1bYS16QS1aMC05XzpcXFxcLVxcXFwuXSokLztcXG5leHBvcnRzLkhUVFBTX1VSTF9SRUdFWCA9IC9odHRwczpcXFxcL1xcXFwvKHd3d1xcXFwuKT9bLWEtekEtWjAtOUA6JS5fXFxcXCt+Iz1dezIsMjU2fVxcXFwuW2Etel17Miw2fVxcXFxiKFstYS16QS1aMC05QDolX1xcXFwrLn4jPyZcXFxcLz1dKikvO1xcbmZ1bmN0aW9uIGdldFdvcmRpbmdzKHdvcmRpbmdzLCBsb2NhbGUpIHtcXG4gICAgdmFyIGNvbWJpbmVkV29yZGluZ3MgPSBkZWVwQ29weSh3b3JkaW5nc18xLk1VTFRJTEFOR1VBR0VfV09SRElOR1MsIHdvcmRpbmdzKTtcXG4gICAgdmFyIHJlcyA9IE9iamVjdC5rZXlzKGNvbWJpbmVkV29yZGluZ3MpLnJlZHVjZShmdW5jdGlvbiAoZGljLCBrZXkpIHtcXG4gICAgICAgIGRpY1trZXldID0gY29tYmluZWRXb3JkaW5nc1trZXldW2xvY2FsZV07XFxuICAgICAgICByZXR1cm4gZGljO1xcbiAgICB9LCB7fSk7XFxuICAgIHJldHVybiByZXM7XFxufVxcbmV4cG9ydHMuZ2V0V29yZGluZ3MgPSBnZXRXb3JkaW5ncztcXG5mdW5jdGlvbiBjb21waWxlV29yZGluZ3Mod29yZGluZ3MsIGxvY2FsZSkge1xcbiAgICBsb2NhbGUgPSBsb2NhbGUgfHwgXFxcImVuLVVTXFxcIjtcXG4gICAgdmFyIHJlcyA9IE9iamVjdC5rZXlzKHdvcmRpbmdzKS5yZWR1Y2UoZnVuY3Rpb24gKGRpYywga2V5KSB7XFxuICAgICAgICBkaWNba2V5XSA9IHdvcmRpbmdzW2tleV1bbG9jYWxlXTtcXG4gICAgICAgIHJldHVybiBkaWM7XFxuICAgIH0sIHt9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5jb21waWxlV29yZGluZ3MgPSBjb21waWxlV29yZGluZ3M7XFxuZnVuY3Rpb24gZ2V0R3JhdmF0YXJVcmwoZW1haWwpIHtcXG4gICAgdmFyIGJhc2VVcmwgPSAnaHR0cHM6Ly9zZWN1cmUuZ3JhdmF0YXIuY29tL2F2YXRhci8nO1xcbiAgICB2YXIgcXVlcnlQYXJhbXMgPSAnP3M9MjAwJmQ9bW0nO1xcbiAgICByZXR1cm4gYmFzZVVybCArIG1kNV8xLmRlZmF1bHQoZW1haWwudHJpbSgpLnRvTG93ZXJDYXNlKCkpICsgcXVlcnlQYXJhbXM7XFxufVxcbmV4cG9ydHMuZ2V0R3JhdmF0YXJVcmwgPSBnZXRHcmF2YXRhclVybDtcXG5mdW5jdGlvbiBpc1ZhbGlkUGFzc3dvcmQocGFzc3dvcmQpIHtcXG4gICAgdmFyIG1pbk1heExlbmd0aCA9IC9eW1xcXFxzXFxcXFNdezgsMzJ9JC8sIHVwcGVyID0gL1tBLVpdLywgbG93ZXIgPSAvW2Etel0vLCBudW1iZXIgPSAvWzAtOV0vLCBjb3VudCA9IDA7XFxuICAgIGlmIChtaW5NYXhMZW5ndGgudGVzdChwYXNzd29yZCkpIHtcXG4gICAgICAgIGlmICh1cHBlci50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgICAgIGNvdW50Kys7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobG93ZXIudGVzdChwYXNzd29yZCkpIHtcXG4gICAgICAgICAgICBjb3VudCsrO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKG51bWJlci50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgICAgIGNvdW50Kys7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIGNvdW50ID49IDI7XFxufVxcbmV4cG9ydHMuaXNWYWxpZFBhc3N3b3JkID0gaXNWYWxpZFBhc3N3b3JkO1xcbmZ1bmN0aW9uIGlzVmFsaWRFbWFpbChlbWFpbCkge1xcbiAgICByZXR1cm4gZXhwb3J0cy5FTUFJTF9SRUdFWC50ZXN0KGVtYWlsKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkRW1haWwgPSBpc1ZhbGlkRW1haWw7XFxuZnVuY3Rpb24gaXNWYWxpZENvbG9yQ29kZShjb2xvcikge1xcbiAgICByZXR1cm4gZXhwb3J0cy5DT0xPUl9DT0RFX1JFR0VYLnRlc3QoY29sb3IpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRDb2xvckNvZGUgPSBpc1ZhbGlkQ29sb3JDb2RlO1xcbmZ1bmN0aW9uIGlzTm90RW1wdHkodmFsdWUpIHtcXG4gICAgcmV0dXJuICEhdmFsdWUgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA+IDA7XFxufVxcbmV4cG9ydHMuaXNOb3RFbXB0eSA9IGlzTm90RW1wdHk7XFxuZnVuY3Rpb24gaXNWYWxpZFNjb3BlS2V5d29yZCh2YWx1ZSkge1xcbiAgICByZXR1cm4gZXhwb3J0cy5TQ09QRV9LRVlXT1JEX1JFR0VYLnRlc3QodmFsdWUpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRTY29wZUtleXdvcmQgPSBpc1ZhbGlkU2NvcGVLZXl3b3JkO1xcbmZ1bmN0aW9uIGlzVmFsaWRLZXlDaGFyKHZhbHVlKSB7XFxuICAgIHJldHVybiBleHBvcnRzLk1BUF9QUk9QRVJUWV9LRVlfUkVHRVgudGVzdCh2YWx1ZSk7XFxufVxcbmV4cG9ydHMuaXNWYWxpZEtleUNoYXIgPSBpc1ZhbGlkS2V5Q2hhcjtcXG5mdW5jdGlvbiBpc1ZhbGlkWE1MVGFnKHZhbHVlKSB7XFxuICAgIHJldHVybiBleHBvcnRzLlhNTF9UQUdfUkVHRVgudGVzdCh2YWx1ZSk7XFxufVxcbmV4cG9ydHMuaXNWYWxpZFhNTFRhZyA9IGlzVmFsaWRYTUxUYWc7XFxuZnVuY3Rpb24gaXNWYWxpZEh0dHBzVXJsKHZhbHVlKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkhUVFBTX1VSTF9SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkSHR0cHNVcmwgPSBpc1ZhbGlkSHR0cHNVcmw7XFxuZnVuY3Rpb24gZXNjYXBlWG1sKHhtbCkge1xcbiAgICByZXR1cm4geG1sLnJlcGxhY2UoL1s8PiYnXFxcIl0vZywgZnVuY3Rpb24gKGMpIHtcXG4gICAgICAgIHN3aXRjaCAoYykge1xcbiAgICAgICAgICAgIGNhc2UgJzwnOlxcbiAgICAgICAgICAgICAgICByZXR1cm4gJyZsdCc7XFxuICAgICAgICAgICAgY2FzZSAnPic6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJmd0JztcXG4gICAgICAgICAgICBjYXNlICcmJzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmYW1wJztcXG4gICAgICAgICAgICBjYXNlICdcXFxcJyc6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJmFwb3MnO1xcbiAgICAgICAgICAgIGNhc2UgJ1xcXCInOlxcbiAgICAgICAgICAgICAgICByZXR1cm4gJyZxdW90JztcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufVxcbmV4cG9ydHMuZXNjYXBlWG1sID0gZXNjYXBlWG1sO1xcbmZ1bmN0aW9uIHV0ZjhKU09OX3RvX2I2NFVSSShqc29uKSB7XFxuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoYmFzZTY0LmVuY29kZShkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGpzb24pKSkpKTtcXG59XFxuZXhwb3J0cy51dGY4SlNPTl90b19iNjRVUkkgPSB1dGY4SlNPTl90b19iNjRVUkk7XFxuZnVuY3Rpb24gVVJJYjY0X3RvX3V0ZjhKU09OKHN0cikge1xcbiAgICB0cnkge1xcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChiYXNlNjQuZGVjb2RlKGRlY29kZVVSSUNvbXBvbmVudChzdHIpKSkpKTtcXG4gICAgfVxcbiAgICBjYXRjaCAoZXJyb3IpIHtcXG4gICAgICAgIGNvbnNvbGUubG9nKCdKU09OIHBhcnNpbmcgZXJyb3I6ICcsIGVycm9yKTtcXG4gICAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbn1cXG5leHBvcnRzLlVSSWI2NF90b191dGY4SlNPTiA9IFVSSWI2NF90b191dGY4SlNPTjtcXG5mdW5jdGlvbiBhcnJheU1pbihhcnIpIHtcXG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIG5leHQpIHtcXG4gICAgICAgIHJldHVybiAocHJldiA8IG5leHQgPyBwcmV2IDogbmV4dCk7XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmFycmF5TWluID0gYXJyYXlNaW47XFxuZnVuY3Rpb24gYXJyYXlNYXgoYXJyKSB7XFxuICAgIHJldHVybiBhcnIucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBuZXh0KSB7XFxuICAgICAgICByZXR1cm4gKHByZXYgPiBuZXh0ID8gcHJldiA6IG5leHQpO1xcbiAgICB9KTtcXG59XFxuZXhwb3J0cy5hcnJheU1heCA9IGFycmF5TWF4O1xcbmZ1bmN0aW9uIGZvcm1hdEZpbGVTaXplKHNpemUpIHtcXG4gICAgaWYgKCFzaXplKSB7XFxuICAgICAgICByZXR1cm4gJzAgQic7XFxuICAgIH1cXG4gICAgdmFyIGsgPSAxMDAwO1xcbiAgICB2YXIgc2l6ZXMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInXTtcXG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKHNpemUpIC8gTWF0aC5sb2coaykpO1xcbiAgICB2YXIgdW5pdCA9IGkgPCA1ID8gc2l6ZXNbaV0gOiBzaXplc1s0XTtcXG4gICAgcmV0dXJuIChzaXplIC8gTWF0aC5wb3coaywgaSkpLnRvRml4ZWQoMSkgKyAnICcgKyB1bml0O1xcbn1cXG5leHBvcnRzLmZvcm1hdEZpbGVTaXplID0gZm9ybWF0RmlsZVNpemU7XFxuZnVuY3Rpb24gZ2V0UXVlcnlQYXJhbXMoc2VhcmNoU3RyaW5nKSB7XFxuICAgIGlmICghc2VhcmNoU3RyaW5nKSB7XFxuICAgICAgICByZXR1cm4ge307XFxuICAgIH1cXG4gICAgdmFyIHF1ZXJ5U3RyaW5nUGFyYW1zID0gc2VhcmNoU3RyaW5nLnN1YnN0cigxKS5zcGxpdCgnJicpO1xcbiAgICB2YXIgcXVlcnlQYXJhbXMgPSBxdWVyeVN0cmluZ1BhcmFtcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcXVlcnlTdHJQYXJhbSkge1xcbiAgICAgICAgdmFyIGtleVZhbHVlID0gcXVlcnlTdHJQYXJhbS5zcGxpdCgnPScpO1xcbiAgICAgICAgaWYgKGtleVZhbHVlLmxlbmd0aCA9PT0gMikge1xcbiAgICAgICAgICAgIGFjY1trZXlWYWx1ZVswXV0gPSBkZWNvZGVVUklDb21wb25lbnQoa2V5VmFsdWVbMV0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGFjYztcXG4gICAgfSwge30pO1xcbiAgICByZXR1cm4gcXVlcnlQYXJhbXM7XFxufVxcbmV4cG9ydHMuZ2V0UXVlcnlQYXJhbXMgPSBnZXRRdWVyeVBhcmFtcztcXG5mdW5jdGlvbiBhZGRRdWVyeVBhcmFtKHVyaSwga2V5LCB2YWx1ZSkge1xcbiAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcXG4gICAgbGluay5ocmVmID0gdXJpO1xcbiAgICBpZiAobGluay5zZWFyY2gpIHtcXG4gICAgICAgIGxpbmsuc2VhcmNoICs9ICgnJicgKyBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xcbiAgICB9XFxuICAgIGVsc2Uge1xcbiAgICAgICAgbGluay5zZWFyY2ggPSAoJz8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcXG4gICAgfVxcbiAgICByZXR1cm4gbGluaztcXG59XFxuZXhwb3J0cy5hZGRRdWVyeVBhcmFtID0gYWRkUXVlcnlQYXJhbTtcXG5mdW5jdGlvbiBvcmRlckFzYyhvYmplY3QpIHtcXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xcbiAgICBPYmplY3Qua2V5cyhvYmplY3QpLnNvcnQoKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgICAgIHJlc3VsdFtrZXldID0gb2JqZWN0W2tleV07XFxuICAgIH0pO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbn1cXG5leHBvcnRzLm9yZGVyQXNjID0gb3JkZXJBc2M7XFxuZnVuY3Rpb24gb3JkZXJEZXNjKG9iamVjdCkge1xcbiAgICB2YXIgcmVzdWx0ID0ge307XFxuICAgIE9iamVjdC5rZXlzKG9iamVjdCkuc29ydCgpLnJldmVyc2UoKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgICAgIHJlc3VsdFtrZXldID0gb2JqZWN0W2tleV07XFxuICAgIH0pO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbn1cXG5leHBvcnRzLm9yZGVyRGVzYyA9IG9yZGVyRGVzYztcXG5mdW5jdGlvbiBzYXZlRGF0YUFzSlNPTkZpbGUoZGF0YSwgZmlsZU5hbWUsIGV4dGVuc2lvbikge1xcbiAgICB2YXIganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsICdcXFxcdCcpO1xcbiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtqc29uXSwge1xcbiAgICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nXFxuICAgIH0pO1xcbiAgICB0cmlnZ2VyRGF0YURvd25sb2FkKGJsb2IsIGZpbGVOYW1lICsgXFxcIl9cXFwiICsgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnN1YnN0cigwLCAxOSkgKyAoZXh0ZW5zaW9uIHx8ICcuanNvbicpKTtcXG59XFxuZXhwb3J0cy5zYXZlRGF0YUFzSlNPTkZpbGUgPSBzYXZlRGF0YUFzSlNPTkZpbGU7XFxuZnVuY3Rpb24gZG93bmxvYWREYXRhRmlsZShiYXNlNjREYXRhU3RyaW5nLCBjb250ZW50VHlwZSwgZmlsZU5hbWUpIHtcXG4gICAgdmFyIGI2NFN0cmluZyA9ICdkYXRhOicgKyBjb250ZW50VHlwZSArICc7YmFzZTY0LCcgKyBiYXNlNjREYXRhU3RyaW5nO1xcbiAgICB0cmlnZ2VyRGF0YURvd25sb2FkKGI2NFN0cmluZywgZmlsZU5hbWUsIHRydWUpO1xcbn1cXG5leHBvcnRzLmRvd25sb2FkRGF0YUZpbGUgPSBkb3dubG9hZERhdGFGaWxlO1xcbmZ1bmN0aW9uIHRyaWdnZXJEYXRhRG93bmxvYWQoZGF0YSwgZmlsZU5hbWUsIGRhdGFVcmwpIHtcXG4gICAgdmFyIHVybCA9IGRhdGFVcmwgPyBkYXRhIDogVVJMLmNyZWF0ZU9iamVjdFVSTChkYXRhKTtcXG4gICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XFxuICAgIGxpbmsuaHJlZiA9IHVybDtcXG4gICAgbGlua1snZG93bmxvYWQnXSA9IGZpbGVOYW1lO1xcbiAgICBsaW5rLmNsaWNrKCk7XFxuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcXG59XFxuZnVuY3Rpb24gaGFzUmVxdWlyZWRSZXNvdXJjZShhcHBFbmRwb2ludHMsIGFwcEluc3RhbmNlTmFtZSwgZmVhdHVyZUlkKSB7XFxuICAgIGlmIChhcHBFbmRwb2ludHMgJiYgYXBwRW5kcG9pbnRzW2FwcEluc3RhbmNlTmFtZV0pIHtcXG4gICAgICAgIGlmIChhcHBFbmRwb2ludHNbYXBwSW5zdGFuY2VOYW1lXVtmZWF0dXJlSWRdKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIGZhbHNlO1xcbn1cXG5leHBvcnRzLmhhc1JlcXVpcmVkUmVzb3VyY2UgPSBoYXNSZXF1aXJlZFJlc291cmNlO1xcbmZ1bmN0aW9uIHJlcGxhY2VUZW1wbGF0ZVZpZXdOYW1lKHRlbXBsYXRlZEh0bWwsIHZpZXdOYW1lKSB7XFxuICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sLnJlcGxhY2UoL3t7VklFV05BTUV9fS9nLCB2aWV3TmFtZSk7XFxufVxcbmV4cG9ydHMucmVwbGFjZVRlbXBsYXRlVmlld05hbWUgPSByZXBsYWNlVGVtcGxhdGVWaWV3TmFtZTtcXG5mdW5jdGlvbiByZXBsYWNlVGVtcGxhdGVGbGFncyh0ZW1wbGF0ZWRIdG1sLCBsb2NhbGUpIHtcXG4gICAgdmFyIGZsYWdzUmVnZXggPSAve3tGTEFHU1xcXFw9KC4qKX19L2c7XFxuICAgIHZhciBtYXRjaFJlcyA9IGZsYWdzUmVnZXguZXhlYyh0ZW1wbGF0ZWRIdG1sKTtcXG4gICAgaWYgKG1hdGNoUmVzICYmIG1hdGNoUmVzLmxlbmd0aCA9PT0gMikge1xcbiAgICAgICAgdmFyIGZsYWdzID0gbWF0Y2hSZXNbMV0uc3BsaXQoJywnKTtcXG4gICAgICAgIHZhciBmbGFnc0h0bWwgPSAnJztcXG4gICAgICAgIGZvciAodmFyIGZsYWdOYW1lIGluIERhdGFfMS5mbGFnc0RlZikge1xcbiAgICAgICAgICAgIHZhciBmbGFnRGVmID0gRGF0YV8xLmZsYWdzRGVmW2ZsYWdOYW1lXTtcXG4gICAgICAgICAgICBpZiAoZmxhZ05hbWUgIT09ICdldW5yZWFkJykge1xcbiAgICAgICAgICAgICAgICBpZiAoKGZsYWdEZWYuaW52ZXJzZWQgJiYgZmxhZ3MuaW5kZXhPZihmbGFnTmFtZSkgPT09IC0xKSB8fCAoIWZsYWdEZWYuaW52ZXJzZWQgJiYgZmxhZ3MuaW5kZXhPZihmbGFnTmFtZSkgIT09IC0xKSkge1xcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3NIdG1sICs9ICc8c3BhbiBjbGFzcz1cXFwiZmEtZncgcmlnaHQtc3BhY2VkIHRleHQteGxhcmdlICcgKyBmbGFnRGVmLmljb25Db2xvciArICcgJyArIGZsYWdEZWYuaWNvblNoYXBlICsgJ1xcXCIgdGl0bGU9XFxcIicgKyBmbGFnRGVmLmZsYWdMYWJlbFtsb2NhbGVdICsgJ1xcXCI+PC9zcGFuPic7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdGVtcGxhdGVkSHRtbC5yZXBsYWNlKGZsYWdzUmVnZXgsIGZsYWdzSHRtbCk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgICByZXR1cm4gdGVtcGxhdGVkSHRtbDtcXG4gICAgfVxcbn1cXG5leHBvcnRzLnJlcGxhY2VUZW1wbGF0ZUZsYWdzID0gcmVwbGFjZVRlbXBsYXRlRmxhZ3M7XFxuZnVuY3Rpb24gZ2V0U3R5bGVEZWYoc3R5bGVDb25mKSB7XFxuICAgIHZhciBzdHlsZXMgPSBzdHlsZUNvbmYuc3BsaXQoJywnKTtcXG4gICAgdmFyIHJlcyA9IHtcXG4gICAgICAgIGljb246IG51bGwsXFxuICAgICAgICBidG46IG51bGwsXFxuICAgICAgICBjb2xvcjogbnVsbFxcbiAgICB9O1xcbiAgICBzdHlsZXMuZm9yRWFjaChmdW5jdGlvbiAoc3R5bGUpIHtcXG4gICAgICAgIGlmIChzdHlsZS5pbmRleE9mKCdpY29uOicpICE9PSAtMSkge1xcbiAgICAgICAgICAgIHJlcy5pY29uID0gc3R5bGUucmVwbGFjZSgnaWNvbjonLCAnJyk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoc3R5bGUuaW5kZXhPZignYnRuOicpICE9PSAtMSkge1xcbiAgICAgICAgICAgIHJlcy5idG4gPSBzdHlsZS5yZXBsYWNlKCdidG46JywgJycpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHN0eWxlLmluZGV4T2YoJ2NvbG9yOicpICE9PSAtMSkge1xcbiAgICAgICAgICAgIHJlcy5jb2xvciA9IHN0eWxlLnJlcGxhY2UoJ2NvbG9yOicsICcnKTtcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIHJldHVybiByZXM7XFxufVxcbmV4cG9ydHMuZ2V0U3R5bGVEZWYgPSBnZXRTdHlsZURlZjtcXG5mdW5jdGlvbiBnZXRBY2NlcHRMYW5ndWFnZUhlYWRlcihsb2NhbGUpIHtcXG4gICAgdmFyIG5vdFNlbGVjdGVkID0gQ29uZmlnXzEuQVZBSUxBQkxFX0xBTkdVQUdFUy5maWx0ZXIoZnVuY3Rpb24gKGxhbmd1YWdlLCBpZHgpIHtcXG4gICAgICAgIHJldHVybiBsYW5ndWFnZS5sb2NhbGUgIT09IGxvY2FsZSAmJiBpZHggPCAzO1xcbiAgICB9KS5tYXAoZnVuY3Rpb24gKGxhbmd1YWdlLCBpZHgpIHtcXG4gICAgICAgIHJldHVybiBsYW5ndWFnZS5sb2NhbGUuc3Vic3RyKDAsIDIpLnRvTG93ZXJDYXNlKCkgKyAnO3E9JyArICgwLjggLSAoaWR4IC8gMTApKS50b1N0cmluZygpO1xcbiAgICB9KTtcXG4gICAgcmV0dXJuIGxvY2FsZS5zdWJzdHIoMCwgMikudG9Mb3dlckNhc2UoKSArICcsJyArIG5vdFNlbGVjdGVkLmpvaW4oJywnKTtcXG59XFxuZXhwb3J0cy5nZXRBY2NlcHRMYW5ndWFnZUhlYWRlciA9IGdldEFjY2VwdExhbmd1YWdlSGVhZGVyO1xcbmZ1bmN0aW9uIGdldEkxOG5MYWJlbChsb2NhbGUsIGxhYmVsTWFwLCBub1JlZ2lvbiwgdXBwZXIpIHtcXG4gICAgdmFyIHJlcyA9IG51bGw7XFxuICAgIHZhciBsYW5ndWFnZSA9IGxvY2FsZTtcXG4gICAgaWYgKG5vUmVnaW9uKSB7XFxuICAgICAgICBsYW5ndWFnZSA9IGxhbmd1YWdlLnN1YnN0cigwLCAyKTtcXG4gICAgfVxcbiAgICBpZiAodXBwZXIpIHtcXG4gICAgICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2UudG9VcHBlckNhc2UoKTtcXG4gICAgfVxcbiAgICBpZiAobGFiZWxNYXApIHtcXG4gICAgICAgIGlmIChsYWJlbE1hcFtsYW5ndWFnZV0pIHtcXG4gICAgICAgICAgICByZXMgPSBsYWJlbE1hcFtsYW5ndWFnZV07XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXJlcyAmJiBsYW5ndWFnZSAhPT0gJ0VOJykge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwWydFTiddO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFyZXMgJiYgbGFuZ3VhZ2UgIT09ICdlbicpIHtcXG4gICAgICAgICAgICByZXMgPSBsYWJlbE1hcFsnZW4nXTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghcmVzICYmIGxhbmd1YWdlICE9PSAnZW4tVVMnKSB7XFxuICAgICAgICAgICAgcmVzID0gbGFiZWxNYXBbJ2VuLVVTJ107XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRJMThuTGFiZWwgPSBnZXRJMThuTGFiZWw7XFxuZnVuY3Rpb24gZ2V0SlNUcmVlRGF0YShvcmdUcmVlRGF0YSwgb3BlbmVkTm9kZXMpIHtcXG4gICAgcmV0dXJuIG9yZ1RyZWVEYXRhID8ge1xcbiAgICAgICAgaWQ6IG9yZ1RyZWVEYXRhLmlkLFxcbiAgICAgICAgdGV4dDogb3JnVHJlZURhdGEuaWQgPT09ICcwJyA/ICcnIDogb3JnVHJlZURhdGEuZWxlbWVudE5hbWUsXFxuICAgICAgICBkYXRhOiB7XFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IG9yZ1RyZWVEYXRhLmRlc2NyaXB0aW9uLFxcbiAgICAgICAgICAgIHByb3BlcnRpZXNNYXA6IG9yZ1RyZWVEYXRhLnByb3BlcnRpZXNNYXAsXFxuICAgICAgICAgICAgcGFyZW50SWQ6IG9yZ1RyZWVEYXRhLnBhcmVudElkLFxcbiAgICAgICAgICAgIGNoaWxkTmFtZXM6IG9yZ1RyZWVEYXRhLmNoaWxkcmVuID8gb3JnVHJlZURhdGEuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChjaGlsZCkgeyByZXR1cm4gY2hpbGQuZWxlbWVudE5hbWU7IH0pIDogW11cXG4gICAgICAgIH0sXFxuICAgICAgICBjaGlsZHJlbjogb3JnVHJlZURhdGEuY2hpbGRyZW4gPyBvcmdUcmVlRGF0YS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGdldEpTVHJlZURhdGEoY2hpbGQsIG9wZW5lZE5vZGVzKTtcXG4gICAgICAgIH0pIDogbnVsbCxcXG4gICAgICAgIGljb246IGNsYXNzTmFtZXMoJ2ZhcyBmYS1mdycsIHtcXG4gICAgICAgICAgICAnZmEtdGgtbGFyZ2UgZm9udC1jb2xvci1saWdodGVyJzogb3JnVHJlZURhdGEuaWQgIT09ICcwJyxcXG4gICAgICAgICAgICAnZmEtdGVybWluYWwgYmxhY2stY29sb3InOiBvcmdUcmVlRGF0YS5pZCA9PT0gJzAnLFxcbiAgICAgICAgfSksXFxuICAgICAgICBzdGF0ZToge1xcbiAgICAgICAgICAgIG9wZW5lZDogb3BlbmVkTm9kZXMgPyBvcGVuZWROb2Rlcy5pbmRleE9mKG9yZ1RyZWVEYXRhLmlkKSAhPT0gLTEgOiBmYWxzZSxcXG4gICAgICAgICAgICBkaXNhYmxlZDogb3JnVHJlZURhdGEuaWQgPT09ICctMSdcXG4gICAgICAgIH1cXG4gICAgfSA6IG51bGw7XFxufVxcbmV4cG9ydHMuZ2V0SlNUcmVlRGF0YSA9IGdldEpTVHJlZURhdGE7XFxuZnVuY3Rpb24gbG9hZFRvb2x0aXBzKGVsZW1lbnQpIHtcXG4gICAgaWYgKCFNb2Rlcm5penIudG91Y2hldmVudHMpIHtcXG4gICAgICAgIHZhciAkZWxlbWVudFRvb2x0aXBzXzEgPSAkKGVsZW1lbnQpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cXFwidG9vbHRpcFxcXCJdJyk7XFxuICAgICAgICAkZWxlbWVudFRvb2x0aXBzXzEudG9vbHRpcCh7XFxuICAgICAgICAgICAgY29udGFpbmVyOiAnYm9keScsXFxuICAgICAgICAgICAgcGxhY2VtZW50OiAnYXV0byB0b3AnXFxuICAgICAgICB9KTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHNfMS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgJGVsZW1lbnRUb29sdGlwc18xLnRvb2x0aXAoJ2hpZGUnKTtcXG4gICAgICAgIH0pO1xcbiAgICB9XFxufVxcbmV4cG9ydHMubG9hZFRvb2x0aXBzID0gbG9hZFRvb2x0aXBzO1xcbmZ1bmN0aW9uIHVubG9hZFRvb2x0aXBzKGVsZW1lbnQpIHtcXG4gICAgaWYgKCFNb2Rlcm5penIudG91Y2hldmVudHMpIHtcXG4gICAgICAgIHZhciAkZWxlbWVudFRvb2x0aXBzID0gJChlbGVtZW50KS5maW5kKCdbZGF0YS10b2dnbGU9XFxcInRvb2x0aXBcXFwiXScpO1xcbiAgICAgICAgJGVsZW1lbnRUb29sdGlwcy50b29sdGlwKCdoaWRlJyk7XFxuICAgICAgICAkZWxlbWVudFRvb2x0aXBzLnRvb2x0aXAoJ2Rlc3Ryb3knKTtcXG4gICAgICAgICQoJ2Rpdi50b29sdGlwJykucmVtb3ZlKCk7XFxuICAgIH1cXG59XFxuZXhwb3J0cy51bmxvYWRUb29sdGlwcyA9IHVubG9hZFRvb2x0aXBzO1xcbmZ1bmN0aW9uIGdyb3VwQnlQcm9wZXJ0eShsaXN0LCBwcm9wZXJ0eU5hbWUpIHtcXG4gICAgcmV0dXJuIGxpc3QucmVkdWNlKGZ1bmN0aW9uIChncm91cGVkLCBpdGVtKSB7XFxuICAgICAgICB2YXIga2V5ID0gaXRlbVtwcm9wZXJ0eU5hbWVdO1xcbiAgICAgICAgZ3JvdXBlZFtrZXldID0gZ3JvdXBlZFtrZXldIHx8IFtdO1xcbiAgICAgICAgZ3JvdXBlZFtrZXldLnB1c2goaXRlbSk7XFxuICAgICAgICByZXR1cm4gZ3JvdXBlZDtcXG4gICAgfSwge30pO1xcbn1cXG5leHBvcnRzLmdyb3VwQnlQcm9wZXJ0eSA9IGdyb3VwQnlQcm9wZXJ0eTtcXG5mdW5jdGlvbiBhZGRWYWxUb0FycmF5Tm9EdXAoYXJyYXksIHZhbHVlKSB7XFxuICAgIGlmIChhcnJheS5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHtcXG4gICAgICAgIHJldHVybiBhcnJheS5jb25jYXQodmFsdWUpO1xcbiAgICB9XFxuICAgIHJldHVybiBhcnJheS5zbGljZSgpO1xcbn1cXG5leHBvcnRzLmFkZFZhbFRvQXJyYXlOb0R1cCA9IGFkZFZhbFRvQXJyYXlOb0R1cDtcXG5mdW5jdGlvbiByZW1vdmVWYWxGcm9tQXJyYXlOb0R1cChhcnJheSwgdmFsdWUpIHtcXG4gICAgcmV0dXJuIGFycmF5LmZpbHRlcihmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gZWxlbWVudCAhPT0gdmFsdWU7IH0pO1xcbn1cXG5leHBvcnRzLnJlbW92ZVZhbEZyb21BcnJheU5vRHVwID0gcmVtb3ZlVmFsRnJvbUFycmF5Tm9EdXA7XFxuZnVuY3Rpb24gZ2V0TmVzdGVkVmFsdWUob2JqLCBrZXlQYXRoKSB7XFxuICAgIGlmICghb2JqKSB7XFxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xcbiAgICB9XFxuICAgIHZhciBwcm9wcyA9IGtleVBhdGguc3BsaXQoJy4nKTtcXG4gICAgaWYgKHByb3BzLmxlbmd0aCA9PT0gMSkge1xcbiAgICAgICAgcmV0dXJuIG9ialtwcm9wc1swXV07XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgICByZXR1cm4gZ2V0TmVzdGVkVmFsdWUob2JqW3Byb3BzWzBdXSwgcHJvcHMuc2xpY2UoMSkuam9pbignLicpKTtcXG4gICAgfVxcbn1cXG5leHBvcnRzLmdldE5lc3RlZFZhbHVlID0gZ2V0TmVzdGVkVmFsdWU7XFxuZnVuY3Rpb24gZmlsdGVyQ29sbGVjdGlvbihjb2xsZWN0aW9uLCBwcm9wZXJ0aWVzLCBzZWFyY2hTdHJpbmcpIHtcXG4gICAgdmFyIHNlYXJjaEVsZW1lbnRzID0gc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCkuc3BsaXQoJyAnKTtcXG4gICAgdmFyIGZpbHRlcmVkQ29sbGVjdGlvbiA9IHNlYXJjaFN0cmluZyA/IGNvbGxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICB2YXIgZGF0YSA9IHByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5zcGxpdCgnLicpLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldE5lc3RlZFZhbHVlKGl0ZW0sIHByb3BlcnR5KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW3Byb3BlcnR5XTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KS5qb2luKCkudG9Mb3dlckNhc2UoKTtcXG4gICAgICAgIHZhciBtYXRjaGVzID0gc2VhcmNoRWxlbWVudHMubWFwKGZ1bmN0aW9uIChzZWFyY2gpIHsgcmV0dXJuIGRhdGEuaW5kZXhPZihzZWFyY2gpICE9PSAtMTsgfSk7XFxuICAgICAgICByZXR1cm4gbWF0Y2hlcy5maWx0ZXIoZnVuY3Rpb24gKG1hdGNoZWQpIHsgcmV0dXJuICFtYXRjaGVkOyB9KS5sZW5ndGggPT09IDA7XFxuICAgIH0pIDogY29sbGVjdGlvbjtcXG4gICAgcmV0dXJuIGZpbHRlcmVkQ29sbGVjdGlvbjtcXG59XFxuZXhwb3J0cy5maWx0ZXJDb2xsZWN0aW9uID0gZmlsdGVyQ29sbGVjdGlvbjtcXG5mdW5jdGlvbiBiYXNlNjREZWNvZGUoZW5jb2RlZERhdGEpIHtcXG4gICAgcmV0dXJuIGJhc2U2NC5kZWNvZGUoZW5jb2RlZERhdGEpO1xcbn1cXG5leHBvcnRzLmJhc2U2NERlY29kZSA9IGJhc2U2NERlY29kZTtcXG5mdW5jdGlvbiBkZWVwQ29weShkYXRhLCBleHRlbnNpb25zKSB7XFxuICAgIHJldHVybiAhZXh0ZW5zaW9ucyA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSB8fCB7fSkpIDogJC5leHRlbmQoe30sIGRhdGEsIGV4dGVuc2lvbnMpO1xcbn1cXG5leHBvcnRzLmRlZXBDb3B5ID0gZGVlcENvcHk7XFxuZnVuY3Rpb24gaGFuZGxlRHVwbGljYXRlTmFtZUZyb21BcnJheShuYW1lLCBjb250YWluZXIpIHtcXG4gICAgdmFyIGZpcnN0VGltZSA9IHRydWU7XFxuICAgIHZhciByZXMgPSBuYW1lO1xcbiAgICB2YXIgaWR4ID0gMTtcXG4gICAgd2hpbGUgKGNvbnRhaW5lci5zb21lKGZ1bmN0aW9uIChjKSB7IHJldHVybiByZXMgPT09IGM7IH0pKSB7XFxuICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XFxuICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdChcXFwiX1xcXCIgKyBpZHgpO1xcbiAgICAgICAgfVxcbiAgICAgICAgZWxzZSB7XFxuICAgICAgICAgICAgcmVzID0gcmVzLnJlcGxhY2UoL19bXFxcXGRdKyQvLCBcXFwiX1xcXCIgKyBpZHgpO1xcbiAgICAgICAgfVxcbiAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7XFxuICAgICAgICBpZHgrKztcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmhhbmRsZUR1cGxpY2F0ZU5hbWVGcm9tQXJyYXkgPSBoYW5kbGVEdXBsaWNhdGVOYW1lRnJvbUFycmF5O1xcbmZ1bmN0aW9uIGRhdGVCeUxvY2FsVG9TdHJpbmcobG9jYWxlLCBkYXRlLCBvcHRpb25zKSB7XFxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIGRlZXBDb3B5KHtcXG4gICAgICAgIG1vbnRoOiAnbnVtZXJpYycsXFxuICAgICAgICBkYXk6ICdudW1lcmljJyxcXG4gICAgICAgIHllYXI6ICdudW1lcmljJyxcXG4gICAgICAgIGhvdXI6ICdudW1lcmljJyxcXG4gICAgICAgIG1pbnV0ZTogJ251bWVyaWMnXFxuICAgIH0sIG9wdGlvbnMpKTtcXG59XFxuZXhwb3J0cy5kYXRlQnlMb2NhbFRvU3RyaW5nID0gZGF0ZUJ5TG9jYWxUb1N0cmluZztcXG5mdW5jdGlvbiBnZXRJdGVtc0J5SWR4KGNvbGxlY3Rpb24sIGluZGV4ZXMpIHtcXG4gICAgcmV0dXJuIGluZGV4ZXMubWFwKGZ1bmN0aW9uIChpZHgpIHsgcmV0dXJuIGNvbGxlY3Rpb25baWR4XTsgfSk7XFxufVxcbmV4cG9ydHMuZ2V0SXRlbXNCeUlkeCA9IGdldEl0ZW1zQnlJZHg7XFxuZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHRleHQpIHtcXG4gICAgcmV0dXJuIHRleHQucmVwbGFjZSgvWy1bXFxcXF17fSgpKis/LixcXFxcXFxcXF4kfCNdL2csICdcXFxcXFxcXCQmJyk7XFxufVxcbmV4cG9ydHMuZXNjYXBlUmVnRXhwID0gZXNjYXBlUmVnRXhwO1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI2NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4oZnVuY3Rpb24oKXtcXG4gIHZhciBjcnlwdCA9IF9fd2VicGFja19yZXF1aXJlX18oMjY1KSxcXG4gICAgICB1dGY4ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OSkudXRmOCxcXG4gICAgICBpc0J1ZmZlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjY2KSxcXG4gICAgICBiaW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg5KS5iaW4sXFxuXFxuICAvLyBUaGUgY29yZVxcbiAgbWQ1ID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG9wdGlvbnMpIHtcXG4gICAgLy8gQ29udmVydCB0byBieXRlIGFycmF5XFxuICAgIGlmIChtZXNzYWdlLmNvbnN0cnVjdG9yID09IFN0cmluZylcXG4gICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVuY29kaW5nID09PSAnYmluYXJ5JylcXG4gICAgICAgIG1lc3NhZ2UgPSBiaW4uc3RyaW5nVG9CeXRlcyhtZXNzYWdlKTtcXG4gICAgICBlbHNlXFxuICAgICAgICBtZXNzYWdlID0gdXRmOC5zdHJpbmdUb0J5dGVzKG1lc3NhZ2UpO1xcbiAgICBlbHNlIGlmIChpc0J1ZmZlcihtZXNzYWdlKSlcXG4gICAgICBtZXNzYWdlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobWVzc2FnZSwgMCk7XFxuICAgIGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UpKVxcbiAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnRvU3RyaW5nKCk7XFxuICAgIC8vIGVsc2UsIGFzc3VtZSBieXRlIGFycmF5IGFscmVhZHlcXG5cXG4gICAgdmFyIG0gPSBjcnlwdC5ieXRlc1RvV29yZHMobWVzc2FnZSksXFxuICAgICAgICBsID0gbWVzc2FnZS5sZW5ndGggKiA4LFxcbiAgICAgICAgYSA9ICAxNzMyNTg0MTkzLFxcbiAgICAgICAgYiA9IC0yNzE3MzM4NzksXFxuICAgICAgICBjID0gLTE3MzI1ODQxOTQsXFxuICAgICAgICBkID0gIDI3MTczMzg3ODtcXG5cXG4gICAgLy8gU3dhcCBlbmRpYW5cXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgbVtpXSA9ICgobVtpXSA8PCAgOCkgfCAobVtpXSA+Pj4gMjQpKSAmIDB4MDBGRjAwRkYgfFxcbiAgICAgICAgICAgICAoKG1baV0gPDwgMjQpIHwgKG1baV0gPj4+ICA4KSkgJiAweEZGMDBGRjAwO1xcbiAgICB9XFxuXFxuICAgIC8vIFBhZGRpbmdcXG4gICAgbVtsID4+PiA1XSB8PSAweDgwIDw8IChsICUgMzIpO1xcbiAgICBtWygoKGwgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gbDtcXG5cXG4gICAgLy8gTWV0aG9kIHNob3J0Y3V0c1xcbiAgICB2YXIgRkYgPSBtZDUuX2ZmLFxcbiAgICAgICAgR0cgPSBtZDUuX2dnLFxcbiAgICAgICAgSEggPSBtZDUuX2hoLFxcbiAgICAgICAgSUkgPSBtZDUuX2lpO1xcblxcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpICs9IDE2KSB7XFxuXFxuICAgICAgdmFyIGFhID0gYSxcXG4gICAgICAgICAgYmIgPSBiLFxcbiAgICAgICAgICBjYyA9IGMsXFxuICAgICAgICAgIGRkID0gZDtcXG5cXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKyAwXSwgIDcsIC02ODA4NzY5MzYpO1xcbiAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW2krIDFdLCAxMiwgLTM4OTU2NDU4Nik7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsgMl0sIDE3LCAgNjA2MTA1ODE5KTtcXG4gICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtpKyAzXSwgMjIsIC0xMDQ0NTI1MzMwKTtcXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKyA0XSwgIDcsIC0xNzY0MTg4OTcpO1xcbiAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW2krIDVdLCAxMiwgIDEyMDAwODA0MjYpO1xcbiAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBtW2krIDZdLCAxNywgLTE0NzMyMzEzNDEpO1xcbiAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBtW2krIDddLCAyMiwgLTQ1NzA1OTgzKTtcXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKyA4XSwgIDcsICAxNzcwMDM1NDE2KTtcXG4gICAgICBkID0gRkYoZCwgYSwgYiwgYywgbVtpKyA5XSwgMTIsIC0xOTU4NDE0NDE3KTtcXG4gICAgICBjID0gRkYoYywgZCwgYSwgYiwgbVtpKzEwXSwgMTcsIC00MjA2Myk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsxMV0sIDIyLCAtMTk5MDQwNDE2Mik7XFxuICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIG1baSsxMl0sICA3LCAgMTgwNDYwMzY4Mik7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsxM10sIDEyLCAtNDAzNDExMDEpO1xcbiAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBtW2krMTRdLCAxNywgLTE1MDIwMDIyOTApO1xcbiAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBtW2krMTVdLCAyMiwgIDEyMzY1MzUzMjkpO1xcblxcbiAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBtW2krIDFdLCAgNSwgLTE2NTc5NjUxMCk7XFxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsgNl0sICA5LCAtMTA2OTUwMTYzMik7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsxMV0sIDE0LCAgNjQzNzE3NzEzKTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyAwXSwgMjAsIC0zNzM4OTczMDIpO1xcbiAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBtW2krIDVdLCAgNSwgLTcwMTU1ODY5MSk7XFxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsxMF0sICA5LCAgMzgwMTYwODMpO1xcbiAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBtW2krMTVdLCAxNCwgLTY2MDQ3ODMzNSk7XFxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsgNF0sIDIwLCAtNDA1NTM3ODQ4KTtcXG4gICAgICBhID0gR0coYSwgYiwgYywgZCwgbVtpKyA5XSwgIDUsICA1Njg0NDY0MzgpO1xcbiAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBtW2krMTRdLCAgOSwgLTEwMTk4MDM2OTApO1xcbiAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBtW2krIDNdLCAxNCwgLTE4NzM2Mzk2MSk7XFxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsgOF0sIDIwLCAgMTE2MzUzMTUwMSk7XFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsxM10sICA1LCAtMTQ0NDY4MTQ2Nyk7XFxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsgMl0sICA5LCAtNTE0MDM3ODQpO1xcbiAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBtW2krIDddLCAxNCwgIDE3MzUzMjg0NzMpO1xcbiAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBtW2krMTJdLCAyMCwgLTE5MjY2MDc3MzQpO1xcblxcbiAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBtW2krIDVdLCAgNCwgLTM3ODU1OCk7XFxuICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1baSsgOF0sIDExLCAtMjAyMjU3NDQ2Myk7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsxMV0sIDE2LCAgMTgzOTAzMDU2Mik7XFxuICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1baSsxNF0sIDIzLCAtMzUzMDk1NTYpO1xcbiAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBtW2krIDFdLCAgNCwgLTE1MzA5OTIwNjApO1xcbiAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBtW2krIDRdLCAxMSwgIDEyNzI4OTMzNTMpO1xcbiAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBtW2krIDddLCAxNiwgLTE1NTQ5NzYzMik7XFxuICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1baSsxMF0sIDIzLCAtMTA5NDczMDY0MCk7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsxM10sICA0LCAgNjgxMjc5MTc0KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKyAwXSwgMTEsIC0zNTg1MzcyMjIpO1xcbiAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBtW2krIDNdLCAxNiwgLTcyMjUyMTk3OSk7XFxuICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1baSsgNl0sIDIzLCAgNzYwMjkxODkpO1xcbiAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBtW2krIDldLCAgNCwgLTY0MDM2NDQ4Nyk7XFxuICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1baSsxMl0sIDExLCAtNDIxODE1ODM1KTtcXG4gICAgICBjID0gSEgoYywgZCwgYSwgYiwgbVtpKzE1XSwgMTYsICA1MzA3NDI1MjApO1xcbiAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBtW2krIDJdLCAyMywgLTk5NTMzODY1MSk7XFxuXFxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsgMF0sICA2LCAtMTk4NjMwODQ0KTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKyA3XSwgMTAsICAxMTI2ODkxNDE1KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKzE0XSwgMTUsIC0xNDE2MzU0OTA1KTtcXG4gICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtpKyA1XSwgMjEsIC01NzQzNDA1NSk7XFxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsxMl0sICA2LCAgMTcwMDQ4NTU3MSk7XFxuICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIG1baSsgM10sIDEwLCAtMTg5NDk4NjYwNik7XFxuICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIG1baSsxMF0sIDE1LCAtMTA1MTUyMyk7XFxuICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIG1baSsgMV0sIDIxLCAtMjA1NDkyMjc5OSk7XFxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsgOF0sICA2LCAgMTg3MzMxMzM1OSk7XFxuICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIG1baSsxNV0sIDEwLCAtMzA2MTE3NDQpO1xcbiAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBtW2krIDZdLCAxNSwgLTE1NjAxOTgzODApO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krMTNdLCAyMSwgIDEzMDkxNTE2NDkpO1xcbiAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBtW2krIDRdLCAgNiwgLTE0NTUyMzA3MCk7XFxuICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIG1baSsxMV0sIDEwLCAtMTEyMDIxMDM3OSk7XFxuICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIG1baSsgMl0sIDE1LCAgNzE4Nzg3MjU5KTtcXG4gICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtpKyA5XSwgMjEsIC0zNDM0ODU1NTEpO1xcblxcbiAgICAgIGEgPSAoYSArIGFhKSA+Pj4gMDtcXG4gICAgICBiID0gKGIgKyBiYikgPj4+IDA7XFxuICAgICAgYyA9IChjICsgY2MpID4+PiAwO1xcbiAgICAgIGQgPSAoZCArIGRkKSA+Pj4gMDtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gY3J5cHQuZW5kaWFuKFthLCBiLCBjLCBkXSk7XFxuICB9O1xcblxcbiAgLy8gQXV4aWxpYXJ5IGZ1bmN0aW9uc1xcbiAgbWQ1Ll9mZiAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYiAmIGMgfCB+YiAmIGQpICsgKHggPj4+IDApICsgdDtcXG4gICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjtcXG4gIH07XFxuICBtZDUuX2dnICA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XFxuICAgIHZhciBuID0gYSArIChiICYgZCB8IGMgJiB+ZCkgKyAoeCA+Pj4gMCkgKyB0O1xcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xcbiAgfTtcXG4gIG1kNS5faGggID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcXG4gICAgdmFyIG4gPSBhICsgKGIgXiBjIF4gZCkgKyAoeCA+Pj4gMCkgKyB0O1xcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xcbiAgfTtcXG4gIG1kNS5faWkgID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcXG4gICAgdmFyIG4gPSBhICsgKGMgXiAoYiB8IH5kKSkgKyAoeCA+Pj4gMCkgKyB0O1xcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xcbiAgfTtcXG5cXG4gIC8vIFBhY2thZ2UgcHJpdmF0ZSBibG9ja3NpemVcXG4gIG1kNS5fYmxvY2tzaXplID0gMTY7XFxuICBtZDUuX2RpZ2VzdHNpemUgPSAxNjtcXG5cXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG9wdGlvbnMpIHtcXG4gICAgaWYgKG1lc3NhZ2UgPT09IHVuZGVmaW5lZCB8fCBtZXNzYWdlID09PSBudWxsKVxcbiAgICAgIHRocm93IG5ldyBFcnJvcignSWxsZWdhbCBhcmd1bWVudCAnICsgbWVzc2FnZSk7XFxuXFxuICAgIHZhciBkaWdlc3RieXRlcyA9IGNyeXB0LndvcmRzVG9CeXRlcyhtZDUobWVzc2FnZSwgb3B0aW9ucykpO1xcbiAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLmFzQnl0ZXMgPyBkaWdlc3RieXRlcyA6XFxuICAgICAgICBvcHRpb25zICYmIG9wdGlvbnMuYXNTdHJpbmcgPyBiaW4uYnl0ZXNUb1N0cmluZyhkaWdlc3RieXRlcykgOlxcbiAgICAgICAgY3J5cHQuYnl0ZXNUb0hleChkaWdlc3RieXRlcyk7XFxuICB9O1xcblxcbn0pKCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjY1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbihmdW5jdGlvbigpIHtcXG4gIHZhciBiYXNlNjRtYXBcXG4gICAgICA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJyxcXG5cXG4gIGNyeXB0ID0ge1xcbiAgICAvLyBCaXQtd2lzZSByb3RhdGlvbiBsZWZ0XFxuICAgIHJvdGw6IGZ1bmN0aW9uKG4sIGIpIHtcXG4gICAgICByZXR1cm4gKG4gPDwgYikgfCAobiA+Pj4gKDMyIC0gYikpO1xcbiAgICB9LFxcblxcbiAgICAvLyBCaXQtd2lzZSByb3RhdGlvbiByaWdodFxcbiAgICByb3RyOiBmdW5jdGlvbihuLCBiKSB7XFxuICAgICAgcmV0dXJuIChuIDw8ICgzMiAtIGIpKSB8IChuID4+PiBiKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gU3dhcCBiaWctZW5kaWFuIHRvIGxpdHRsZS1lbmRpYW4gYW5kIHZpY2UgdmVyc2FcXG4gICAgZW5kaWFuOiBmdW5jdGlvbihuKSB7XFxuICAgICAgLy8gSWYgbnVtYmVyIGdpdmVuLCBzd2FwIGVuZGlhblxcbiAgICAgIGlmIChuLmNvbnN0cnVjdG9yID09IE51bWJlcikge1xcbiAgICAgICAgcmV0dXJuIGNyeXB0LnJvdGwobiwgOCkgJiAweDAwRkYwMEZGIHwgY3J5cHQucm90bChuLCAyNCkgJiAweEZGMDBGRjAwO1xcbiAgICAgIH1cXG5cXG4gICAgICAvLyBFbHNlLCBhc3N1bWUgYXJyYXkgYW5kIHN3YXAgYWxsIGl0ZW1zXFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuLmxlbmd0aDsgaSsrKVxcbiAgICAgICAgbltpXSA9IGNyeXB0LmVuZGlhbihuW2ldKTtcXG4gICAgICByZXR1cm4gbjtcXG4gICAgfSxcXG5cXG4gICAgLy8gR2VuZXJhdGUgYW4gYXJyYXkgb2YgYW55IGxlbmd0aCBvZiByYW5kb20gYnl0ZXNcXG4gICAgcmFuZG9tQnl0ZXM6IGZ1bmN0aW9uKG4pIHtcXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdOyBuID4gMDsgbi0tKVxcbiAgICAgICAgYnl0ZXMucHVzaChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyNTYpKTtcXG4gICAgICByZXR1cm4gYnl0ZXM7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBieXRlIGFycmF5IHRvIGJpZy1lbmRpYW4gMzItYml0IHdvcmRzXFxuICAgIGJ5dGVzVG9Xb3JkczogZnVuY3Rpb24oYnl0ZXMpIHtcXG4gICAgICBmb3IgKHZhciB3b3JkcyA9IFtdLCBpID0gMCwgYiA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKywgYiArPSA4KVxcbiAgICAgICAgd29yZHNbYiA+Pj4gNV0gfD0gYnl0ZXNbaV0gPDwgKDI0IC0gYiAlIDMyKTtcXG4gICAgICByZXR1cm4gd29yZHM7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYmlnLWVuZGlhbiAzMi1iaXQgd29yZHMgdG8gYSBieXRlIGFycmF5XFxuICAgIHdvcmRzVG9CeXRlczogZnVuY3Rpb24od29yZHMpIHtcXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBiID0gMDsgYiA8IHdvcmRzLmxlbmd0aCAqIDMyOyBiICs9IDgpXFxuICAgICAgICBieXRlcy5wdXNoKCh3b3Jkc1tiID4+PiA1XSA+Pj4gKDI0IC0gYiAlIDMyKSkgJiAweEZGKTtcXG4gICAgICByZXR1cm4gYnl0ZXM7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBieXRlIGFycmF5IHRvIGEgaGV4IHN0cmluZ1xcbiAgICBieXRlc1RvSGV4OiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIGhleCA9IFtdLCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBoZXgucHVzaCgoYnl0ZXNbaV0gPj4+IDQpLnRvU3RyaW5nKDE2KSk7XFxuICAgICAgICBoZXgucHVzaCgoYnl0ZXNbaV0gJiAweEYpLnRvU3RyaW5nKDE2KSk7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBoZXguam9pbignJyk7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBoZXggc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBoZXhUb0J5dGVzOiBmdW5jdGlvbihoZXgpIHtcXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBjID0gMDsgYyA8IGhleC5sZW5ndGg7IGMgKz0gMilcXG4gICAgICAgIGJ5dGVzLnB1c2gocGFyc2VJbnQoaGV4LnN1YnN0cihjLCAyKSwgMTYpKTtcXG4gICAgICByZXR1cm4gYnl0ZXM7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBieXRlIGFycmF5IHRvIGEgYmFzZS02NCBzdHJpbmdcXG4gICAgYnl0ZXNUb0Jhc2U2NDogZnVuY3Rpb24oYnl0ZXMpIHtcXG4gICAgICBmb3IgKHZhciBiYXNlNjQgPSBbXSwgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMykge1xcbiAgICAgICAgdmFyIHRyaXBsZXQgPSAoYnl0ZXNbaV0gPDwgMTYpIHwgKGJ5dGVzW2kgKyAxXSA8PCA4KSB8IGJ5dGVzW2kgKyAyXTtcXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKVxcbiAgICAgICAgICBpZiAoaSAqIDggKyBqICogNiA8PSBieXRlcy5sZW5ndGggKiA4KVxcbiAgICAgICAgICAgIGJhc2U2NC5wdXNoKGJhc2U2NG1hcC5jaGFyQXQoKHRyaXBsZXQgPj4+IDYgKiAoMyAtIGopKSAmIDB4M0YpKTtcXG4gICAgICAgICAgZWxzZVxcbiAgICAgICAgICAgIGJhc2U2NC5wdXNoKCc9Jyk7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBiYXNlNjQuam9pbignJyk7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBiYXNlLTY0IHN0cmluZyB0byBhIGJ5dGUgYXJyYXlcXG4gICAgYmFzZTY0VG9CeXRlczogZnVuY3Rpb24oYmFzZTY0KSB7XFxuICAgICAgLy8gUmVtb3ZlIG5vbi1iYXNlLTY0IGNoYXJhY3RlcnNcXG4gICAgICBiYXNlNjQgPSBiYXNlNjQucmVwbGFjZSgvW15BLVowLTkrXFxcXC9dL2lnLCAnJyk7XFxuXFxuICAgICAgZm9yICh2YXIgYnl0ZXMgPSBbXSwgaSA9IDAsIGltb2Q0ID0gMDsgaSA8IGJhc2U2NC5sZW5ndGg7XFxuICAgICAgICAgIGltb2Q0ID0gKytpICUgNCkge1xcbiAgICAgICAgaWYgKGltb2Q0ID09IDApIGNvbnRpbnVlO1xcbiAgICAgICAgYnl0ZXMucHVzaCgoKGJhc2U2NG1hcC5pbmRleE9mKGJhc2U2NC5jaGFyQXQoaSAtIDEpKVxcbiAgICAgICAgICAgICYgKE1hdGgucG93KDIsIC0yICogaW1vZDQgKyA4KSAtIDEpKSA8PCAoaW1vZDQgKiAyKSlcXG4gICAgICAgICAgICB8IChiYXNlNjRtYXAuaW5kZXhPZihiYXNlNjQuY2hhckF0KGkpKSA+Pj4gKDYgLSBpbW9kNCAqIDIpKSk7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfVxcbiAgfTtcXG5cXG4gIG1vZHVsZS5leHBvcnRzID0gY3J5cHQ7XFxufSkoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuLyohXFxuICogRGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIEJ1ZmZlclxcbiAqXFxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cXG4gKiBAbGljZW5zZSAgTUlUXFxuICovXFxuXFxuLy8gVGhlIF9pc0J1ZmZlciBjaGVjayBpcyBmb3IgU2FmYXJpIDUtNyBzdXBwb3J0LCBiZWNhdXNlIGl0J3MgbWlzc2luZ1xcbi8vIE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IuIFJlbW92ZSB0aGlzIGV2ZW50dWFsbHlcXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcXG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiAoaXNCdWZmZXIob2JqKSB8fCBpc1Nsb3dCdWZmZXIob2JqKSB8fCAhIW9iai5faXNCdWZmZXIpXFxufVxcblxcbmZ1bmN0aW9uIGlzQnVmZmVyIChvYmopIHtcXG4gIHJldHVybiAhIW9iai5jb25zdHJ1Y3RvciAmJiB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihvYmopXFxufVxcblxcbi8vIEZvciBOb2RlIHYwLjEwIHN1cHBvcnQuIFJlbW92ZSB0aGlzIGV2ZW50dWFsbHkuXFxuZnVuY3Rpb24gaXNTbG93QnVmZmVyIChvYmopIHtcXG4gIHJldHVybiB0eXBlb2Ygb2JqLnJlYWRGbG9hdExFID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouc2xpY2UgPT09ICdmdW5jdGlvbicgJiYgaXNCdWZmZXIob2JqLnNsaWNlKDAsIDApKVxcbn1cXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKG1vZHVsZSwgZ2xvYmFsKSB7dmFyIF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fOy8qISBodHRwOi8vbXRocy5iZS9iYXNlNjQgdjAuMS4wIGJ5IEBtYXRoaWFzIHwgTUlUIGxpY2Vuc2UgKi9cXG47KGZ1bmN0aW9uKHJvb3QpIHtcXG5cXG5cXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZXMgYGV4cG9ydHNgLlxcblxcdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHM7XFxuXFxuXFx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuXFxuXFx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxcblxcdFxcdG1vZHVsZS5leHBvcnRzID09IGZyZWVFeHBvcnRzICYmIG1vZHVsZTtcXG5cXG5cXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCwgZnJvbSBOb2RlLmpzIG9yIEJyb3dzZXJpZmllZCBjb2RlLCBhbmQgdXNlXFxuXFx0Ly8gaXQgYXMgYHJvb3RgLlxcblxcdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XFxuXFx0aWYgKGZyZWVHbG9iYWwuZ2xvYmFsID09PSBmcmVlR2xvYmFsIHx8IGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsKSB7XFxuXFx0XFx0cm9vdCA9IGZyZWVHbG9iYWw7XFxuXFx0fVxcblxcblxcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcblxcblxcdHZhciBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XFxuXFx0XFx0dGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcXG5cXHR9O1xcblxcdEludmFsaWRDaGFyYWN0ZXJFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3I7XFxuXFx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0ludmFsaWRDaGFyYWN0ZXJFcnJvcic7XFxuXFxuXFx0dmFyIGVycm9yID0gZnVuY3Rpb24obWVzc2FnZSkge1xcblxcdFxcdC8vIE5vdGU6IHRoZSBlcnJvciBtZXNzYWdlcyB1c2VkIHRocm91Z2hvdXQgdGhpcyBmaWxlIG1hdGNoIHRob3NlIHVzZWQgYnlcXG5cXHRcXHQvLyB0aGUgbmF0aXZlIGBhdG9iYC9gYnRvYWAgaW1wbGVtZW50YXRpb24gaW4gQ2hyb21pdW0uXFxuXFx0XFx0dGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvcihtZXNzYWdlKTtcXG5cXHR9O1xcblxcblxcdHZhciBUQUJMRSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcXG5cXHQvLyBodHRwOi8vd2hhdHdnLm9yZy9odG1sL2NvbW1vbi1taWNyb3N5bnRheGVzLmh0bWwjc3BhY2UtY2hhcmFjdGVyXFxuXFx0dmFyIFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMgPSAvW1xcXFx0XFxcXG5cXFxcZlxcXFxyIF0vZztcXG5cXG5cXHQvLyBgZGVjb2RlYCBpcyBkZXNpZ25lZCB0byBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGggYGF0b2JgIGFzIGRlc2NyaWJlZCBpbiB0aGVcXG5cXHQvLyBIVE1MIFN0YW5kYXJkLiBodHRwOi8vd2hhdHdnLm9yZy9odG1sL3dlYmFwcGFwaXMuaHRtbCNkb20td2luZG93YmFzZTY0LWF0b2JcXG5cXHQvLyBUaGUgb3B0aW1pemVkIGJhc2U2NC1kZWNvZGluZyBhbGdvcml0aG0gdXNlZCBpcyBiYXNlZCBvbiBAYXRr4oCZcyBleGNlbGxlbnRcXG5cXHQvLyBpbXBsZW1lbnRhdGlvbi4gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vYXRrLzEwMjAzOTZcXG5cXHR2YXIgZGVjb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcXG5cXHRcXHRpbnB1dCA9IFN0cmluZyhpbnB1dClcXG5cXHRcXHRcXHQucmVwbGFjZShSRUdFWF9TUEFDRV9DSEFSQUNURVJTLCAnJyk7XFxuXFx0XFx0dmFyIGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcXG5cXHRcXHRpZiAobGVuZ3RoICUgNCA9PSAwKSB7XFxuXFx0XFx0XFx0aW5wdXQgPSBpbnB1dC5yZXBsYWNlKC89PT8kLywgJycpO1xcblxcdFxcdFxcdGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcXG5cXHRcXHR9XFxuXFx0XFx0aWYgKFxcblxcdFxcdFxcdGxlbmd0aCAlIDQgPT0gMSB8fFxcblxcdFxcdFxcdC8vIGh0dHA6Ly93aGF0d2cub3JnL0MjYWxwaGFudW1lcmljLWFzY2lpLWNoYXJhY3RlcnNcXG5cXHRcXHRcXHQvW14rYS16QS1aMC05L10vLnRlc3QoaW5wdXQpXFxuXFx0XFx0KSB7XFxuXFx0XFx0XFx0ZXJyb3IoXFxuXFx0XFx0XFx0XFx0J0ludmFsaWQgY2hhcmFjdGVyOiB0aGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLidcXG5cXHRcXHRcXHQpO1xcblxcdFxcdH1cXG5cXHRcXHR2YXIgYml0Q291bnRlciA9IDA7XFxuXFx0XFx0dmFyIGJpdFN0b3JhZ2U7XFxuXFx0XFx0dmFyIGJ1ZmZlcjtcXG5cXHRcXHR2YXIgb3V0cHV0ID0gJyc7XFxuXFx0XFx0dmFyIHBvc2l0aW9uID0gLTE7XFxuXFx0XFx0d2hpbGUgKCsrcG9zaXRpb24gPCBsZW5ndGgpIHtcXG5cXHRcXHRcXHRidWZmZXIgPSBUQUJMRS5pbmRleE9mKGlucHV0LmNoYXJBdChwb3NpdGlvbikpO1xcblxcdFxcdFxcdGJpdFN0b3JhZ2UgPSBiaXRDb3VudGVyICUgNCA/IGJpdFN0b3JhZ2UgKiA2NCArIGJ1ZmZlciA6IGJ1ZmZlcjtcXG5cXHRcXHRcXHQvLyBVbmxlc3MgdGhpcyBpcyB0aGUgZmlyc3Qgb2YgYSBncm91cCBvZiA0IGNoYXJhY3RlcnPigKZcXG5cXHRcXHRcXHRpZiAoYml0Q291bnRlcisrICUgNCkge1xcblxcdFxcdFxcdFxcdC8vIOKApmNvbnZlcnQgdGhlIGZpcnN0IDggYml0cyB0byBhIHNpbmdsZSBBU0NJSSBjaGFyYWN0ZXIuXFxuXFx0XFx0XFx0XFx0b3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoXFxuXFx0XFx0XFx0XFx0XFx0MHhGRiAmIGJpdFN0b3JhZ2UgPj4gKC0yICogYml0Q291bnRlciAmIDYpXFxuXFx0XFx0XFx0XFx0KTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcdFxcdHJldHVybiBvdXRwdXQ7XFxuXFx0fTtcXG5cXG5cXHQvLyBgZW5jb2RlYCBpcyBkZXNpZ25lZCB0byBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGggYGJ0b2FgIGFzIGRlc2NyaWJlZCBpbiB0aGVcXG5cXHQvLyBIVE1MIFN0YW5kYXJkOiBodHRwOi8vd2hhdHdnLm9yZy9odG1sL3dlYmFwcGFwaXMuaHRtbCNkb20td2luZG93YmFzZTY0LWJ0b2FcXG5cXHR2YXIgZW5jb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcXG5cXHRcXHRpbnB1dCA9IFN0cmluZyhpbnB1dCk7XFxuXFx0XFx0aWYgKC9bXlxcXFwwLVxcXFx4RkZdLy50ZXN0KGlucHV0KSkge1xcblxcdFxcdFxcdC8vIE5vdGU6IG5vIG5lZWQgdG8gc3BlY2lhbC1jYXNlIGFzdHJhbCBzeW1ib2xzIGhlcmUsIGFzIHN1cnJvZ2F0ZXMgYXJlXFxuXFx0XFx0XFx0Ly8gbWF0Y2hlZCwgYW5kIHRoZSBpbnB1dCBpcyBzdXBwb3NlZCB0byBvbmx5IGNvbnRhaW4gQVNDSUkgYW55d2F5LlxcblxcdFxcdFxcdGVycm9yKFxcblxcdFxcdFxcdFxcdCdUaGUgc3RyaW5nIHRvIGJlIGVuY29kZWQgY29udGFpbnMgY2hhcmFjdGVycyBvdXRzaWRlIG9mIHRoZSAnICtcXG5cXHRcXHRcXHRcXHQnTGF0aW4xIHJhbmdlLidcXG5cXHRcXHRcXHQpO1xcblxcdFxcdH1cXG5cXHRcXHR2YXIgcGFkZGluZyA9IGlucHV0Lmxlbmd0aCAlIDM7XFxuXFx0XFx0dmFyIG91dHB1dCA9ICcnO1xcblxcdFxcdHZhciBwb3NpdGlvbiA9IC0xO1xcblxcdFxcdHZhciBhO1xcblxcdFxcdHZhciBiO1xcblxcdFxcdHZhciBjO1xcblxcdFxcdHZhciBkO1xcblxcdFxcdHZhciBidWZmZXI7XFxuXFx0XFx0Ly8gTWFrZSBzdXJlIGFueSBwYWRkaW5nIGlzIGhhbmRsZWQgb3V0c2lkZSBvZiB0aGUgbG9vcC5cXG5cXHRcXHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoIC0gcGFkZGluZztcXG5cXG5cXHRcXHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xcblxcdFxcdFxcdC8vIFJlYWQgdGhyZWUgYnl0ZXMsIGkuZS4gMjQgYml0cy5cXG5cXHRcXHRcXHRhID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbikgPDwgMTY7XFxuXFx0XFx0XFx0YiA9IGlucHV0LmNoYXJDb2RlQXQoKytwb3NpdGlvbikgPDwgODtcXG5cXHRcXHRcXHRjID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKTtcXG5cXHRcXHRcXHRidWZmZXIgPSBhICsgYiArIGM7XFxuXFx0XFx0XFx0Ly8gVHVybiB0aGUgMjQgYml0cyBpbnRvIGZvdXIgY2h1bmtzIG9mIDYgYml0cyBlYWNoLCBhbmQgYXBwZW5kIHRoZVxcblxcdFxcdFxcdC8vIG1hdGNoaW5nIGNoYXJhY3RlciBmb3IgZWFjaCBvZiB0aGVtIHRvIHRoZSBvdXRwdXQuXFxuXFx0XFx0XFx0b3V0cHV0ICs9IChcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDE4ICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTIgJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiA2ICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgJiAweDNGKVxcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcblxcdFxcdGlmIChwYWRkaW5nID09IDIpIHtcXG5cXHRcXHRcXHRhID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbikgPDwgODtcXG5cXHRcXHRcXHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKTtcXG5cXHRcXHRcXHRidWZmZXIgPSBhICsgYjtcXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTApICtcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA+PiA0KSAmIDB4M0YpICtcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA8PCAyKSAmIDB4M0YpICtcXG5cXHRcXHRcXHRcXHQnPSdcXG5cXHRcXHRcXHQpO1xcblxcdFxcdH0gZWxzZSBpZiAocGFkZGluZyA9PSAxKSB7XFxuXFx0XFx0XFx0YnVmZmVyID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbik7XFxuXFx0XFx0XFx0b3V0cHV0ICs9IChcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDIpICtcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA8PCA0KSAmIDB4M0YpICtcXG5cXHRcXHRcXHRcXHQnPT0nXFxuXFx0XFx0XFx0KTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0cmV0dXJuIG91dHB1dDtcXG5cXHR9O1xcblxcblxcdHZhciBiYXNlNjQgPSB7XFxuXFx0XFx0J2VuY29kZSc6IGVuY29kZSxcXG5cXHRcXHQnZGVjb2RlJzogZGVjb2RlLFxcblxcdFxcdCd2ZXJzaW9uJzogJzAuMS4wJ1xcblxcdH07XFxuXFxuXFx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXFxuXFx0Ly8gbGlrZSB0aGUgZm9sbG93aW5nOlxcblxcdGlmIChcXG5cXHRcXHR0cnVlXFxuXFx0KSB7XFxuXFx0XFx0IShfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyA9IChmdW5jdGlvbigpIHtcXG5cXHRcXHRcXHRyZXR1cm4gYmFzZTY0O1xcblxcdFxcdH0pLmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXywgZXhwb3J0cywgbW9kdWxlKSxcXG5cXHRcXHRcXHRcXHRfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyAhPT0gdW5kZWZpbmVkICYmIChtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fKSk7XFxuXFx0fVxcdGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmICFmcmVlRXhwb3J0cy5ub2RlVHlwZSkge1xcblxcdFxcdGlmIChmcmVlTW9kdWxlKSB7IC8vIGluIE5vZGUuanMgb3IgUmluZ29KUyB2MC44LjArXFxuXFx0XFx0XFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gYmFzZTY0O1xcblxcdFxcdH0gZWxzZSB7IC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXFxuXFx0XFx0XFx0Zm9yICh2YXIga2V5IGluIGJhc2U2NCkge1xcblxcdFxcdFxcdFxcdGJhc2U2NC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gYmFzZTY0W2tleV0pO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0fSBlbHNlIHsgLy8gaW4gUmhpbm8gb3IgYSB3ZWIgYnJvd3NlclxcblxcdFxcdHJvb3QuYmFzZTY0ID0gYmFzZTY0O1xcblxcdH1cXG5cXG59KHRoaXMpKTtcXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXygyNjgpKG1vZHVsZSksIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcXG5cXHRpZighbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xcblxcdFxcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xcblxcdFxcdG1vZHVsZS5wYXRocyA9IFtdO1xcblxcdFxcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxcblxcdFxcdGlmKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xcblxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFxcXCJsb2FkZWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUubDtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImlkXFxcIiwge1xcblxcdFxcdFxcdGVudW1lcmFibGU6IHRydWUsXFxuXFx0XFx0XFx0Z2V0OiBmdW5jdGlvbigpIHtcXG5cXHRcXHRcXHRcXHRyZXR1cm4gbW9kdWxlLmk7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH0pO1xcblxcdFxcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xcblxcdH1cXG5cXHRyZXR1cm4gbW9kdWxlO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjY5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbmV4cG9ydHMuTVVMVElMQU5HVUFHRV9XT1JESU5HUyA9IHtcXG4gICAgc2F2ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VucmVnaXN0cmVyJ1xcbiAgICB9LFxcbiAgICBzYXZlQ2hhbmdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgY2hhbmdlcycsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZXIgbW9kaWZpY2F0aW9ucydcXG4gICAgfSxcXG4gICAgY2FuY2VsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2FuY2VsJyxcXG4gICAgICAgICdmci1GUic6ICdBbm51bGVyJ1xcbiAgICB9LFxcbiAgICBlbWFpbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VtYWlsJyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCdcXG4gICAgfSxcXG4gICAgc3VibWl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VibWl0JyxcXG4gICAgICAgICdmci1GUic6ICdWYWxpZGVyJ1xcbiAgICB9LFxcbiAgICBjb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29uZmlybScsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlybWVyJ1xcbiAgICB9LFxcbiAgICBkZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lcidcXG4gICAgfSxcXG4gICAgZW5hYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VuYWJsZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FjdGlmJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Blcm1pc3Npb25zJyxcXG4gICAgICAgICdmci1GUic6ICdQZXJtaXNzaW9ucydcXG4gICAgfSxcXG4gICAgZGVzY3JpcHRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZXNjcmlwdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRGVzY3JpcHRpb24nXFxuICAgIH0sXFxuICAgIG5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdOb20nXFxuICAgIH0sXFxuICAgIG5vRGF0YUZvdW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gZGF0YSBmb3VuZCcsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIGRvbm7DqWUnXFxuICAgIH0sXFxuICAgIGZpcnN0bmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpcnN0IG5hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byw6lub20nXFxuICAgIH0sXFxuICAgIGxvYWRpbmdFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xvYWRpbmcgZXJyb3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VycmV1ciBkZSBjaGFyZ2VtZW50J1xcbiAgICB9LFxcbiAgICBkZXRhaWxzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGV0YWlscycsXFxuICAgICAgICAnZnItRlInOiAnRMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIGxhc3RuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFzdCBuYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdOb20nXFxuICAgIH0sXFxuICAgIGVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXJyb3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VycmV1cidcXG4gICAgfSxcXG4gICAgcmVnaXN0ZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RlcicsXFxuICAgICAgICAnZnItRlInOiAnU1xcXFwnZW5yZWdpc3RyZXInXFxuICAgIH0sXFxuICAgIGluc3RhbmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luc3RhbmNlJ1xcbiAgICB9LFxcbiAgICBtZXNzYWdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lc3NhZ2VzJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlcydcXG4gICAgfSxcXG4gICAgdGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaXRsZScsXFxuICAgICAgICAnZnItRlInOiAnVGl0cmUnXFxuICAgIH0sXFxuICAgIHVzZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgbXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNci4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ00uJ1xcbiAgICB9LFxcbiAgICBtcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNcnMuJyxcXG4gICAgICAgICdmci1GUic6ICdNbWUnXFxuICAgIH0sXFxuICAgIG1zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTXMuJyxcXG4gICAgICAgICdmci1GUic6ICdNZWxsZSdcXG4gICAgfSxcXG4gICAgcHJvZjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Byb2YuJyxcXG4gICAgICAgICdmci1GUic6ICdQcidcXG4gICAgfSxcXG4gICAgZHI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEci4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RyJ1xcbiAgICB9LFxcbiAgICBzYWx1dGF0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2FsdXRhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnU2FsdXRhdGlvbidcXG4gICAgfSxcXG4gICAgY29tcGFueToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbXBhbnknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1NvY2nDqXTDqSdcXG4gICAgfSxcXG4gICAgY29tcGFueU5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb21wYW55IG5hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSBkZSBsYSBzb2Npw6l0w6knXFxuICAgIH0sXFxuICAgIGFkZHJlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGRyZXNzJyxcXG4gICAgICAgICdmci1GUic6ICdBZHJlc3NlJ1xcbiAgICB9LFxcbiAgICBjaXR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2l0eScsXFxuICAgICAgICAnZnItRlInOiAnVmlsbGUnXFxuICAgIH0sXFxuICAgIHN0YXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RhdGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJdGF0J1xcbiAgICB9LFxcbiAgICBjb3VudHJ5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ291bnRyeScsXFxuICAgICAgICAnZnItRlInOiAnUGF5cydcXG4gICAgfSxcXG4gICAgemlwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWmlwJyxcXG4gICAgICAgICdmci1GUic6ICdDb2RlIHBvc3RhbCdcXG4gICAgfSxcXG4gICAgcGhvbmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQaG9uZScsXFxuICAgICAgICAnZnItRlInOiAnVMOpbMOpcGhvbmUnXFxuICAgIH0sXFxuICAgIG1vYmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vYmlsZScsXFxuICAgICAgICAnZnItRlInOiAnTW9iaWxlJ1xcbiAgICB9LFxcbiAgICB3ZWJzaXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2Vic2l0ZScsXFxuICAgICAgICAnZnItRlInOiAnU2l0ZSB3ZWInXFxuICAgIH0sXFxuICAgIHN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RhcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqW1hcnJlcidcXG4gICAgfSxcXG4gICAgc3RvcDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N0b3AnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FycsOqdGVyJ1xcbiAgICB9LFxcbiAgICByZXNldDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc2V0JyxcXG4gICAgICAgICdmci1GUic6ICdSw6lpbml0aWFsaXNlcidcXG4gICAgfSxcXG4gICAgZWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VkaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXInXFxuICAgIH0sXFxuICAgIGNyZWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyJ1xcbiAgICB9LFxcbiAgICBhY3Rpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWN0aW9ucycsXFxuICAgICAgICAnZnItRlInOiAnQWN0aW9ucydcXG4gICAgfSxcXG4gICAgaW5mbzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0luZm8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm8nXFxuICAgIH0sXFxuICAgIHNlYXJjaFBsYWNlaG9sZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VhcmNoLi4uJyxcXG4gICAgICAgICdmci1GUic6ICdSZWNoZXJjaGVyLi4uJ1xcbiAgICB9LFxcbiAgICBrZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nsw6knXFxuICAgIH0sXFxuICAgIHZhbHVlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmFsdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGV1cidcXG4gICAgfSxcXG4gICAgZmllbGRSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcXVpcmVkIGZpZWxkJyxcXG4gICAgICAgICdmci1GUic6ICdDaGFtcCBvYmxpZ2F0b2lyZSdcXG4gICAgfSxcXG4gICAgc2hvd0RldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaG93IGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGVzIGTDqXRhaWxzJ1xcbiAgICB9LFxcbiAgICBjbG9zZURldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDbG9zZSBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdGZXJtZXIgbGVzIGTDqXRhaWxzJ1xcbiAgICB9LFxcbiAgICBzZWFyY2g6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWFyY2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hlcmNoZXInXFxuICAgIH0sXFxuICAgIGFkbWluaXN0cmF0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRtaW5pc3RyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FkbWluaXN0cmF0aW9uJ1xcbiAgICB9LFxcbiAgICBpdGVtQ3JlYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gY3JlYXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IGNyw6nDqSdcXG4gICAgfSxcXG4gICAgaXRlbVVwZGF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIHVwZGF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBtb2RpZmnDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbmFtZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIHJlbmFtZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSBkZSBsXFxcXCfDqWzDqW1lbnQgbW9kaWZpw6knXFxuICAgIH0sXFxuICAgIGl0ZW1EZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBkZWxldGVkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnQgc3VwcHJpbcOpJ1xcbiAgICB9LFxcbiAgICBjb25maXJtRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGl0ZW0/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgY2V0IMOpbMOpbWVudCA/J1xcbiAgICB9LFxcbiAgICBpdGVtc0ltcG9ydGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbXMgaW1wb3J0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudHMgaW1wb3J0w6lzJ1xcbiAgICB9LFxcbiAgICBjb25maXJtSXRlbXNEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZXNlIGl0ZW1zPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlcyDDqWzDqW1lbnRzID8nXFxuICAgIH0sXFxuICAgIGl0ZW1zRGVsZXRlSW1wb3NzaWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBjYW5cXFxcJ3QgZGVsZXRlIHRoZXNlIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdJbXBvc3NpYmxlIGRlIHN1cHByaW1lciBjZXMgw6lsw6ltZW50cydcXG4gICAgfSxcXG4gICAgd2FybmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dhcm5pbmcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F0dGVudGlvbidcXG4gICAgfSxcXG4gICAgZXhwb3J0SlNPTjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0V4cG9ydCBhcyBKU09OJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciAoSlNPTiknXFxuICAgIH0sXFxuICAgIHByb2ZpbGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9maWxlJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9maWwnXFxuICAgIH0sXFxuICAgIHRhcmdldDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhcmdldCcsXFxuICAgICAgICAnZnItRlInOiAnQ2libGUnXFxuICAgIH0sXFxuICAgIGJ5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnYnknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3BhcidcXG4gICAgfSxcXG4gICAgaW52YWxpZEVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBlbWFpbCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgaW52YWxpZGUnXFxuICAgIH0sXFxuICAgIGludmFsaWROdW1iZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNdXN0IGJlIGEgbnVtYmVyJyxcXG4gICAgICAgICdmci1GUic6ICdEb2l0IMOqdHJlIHVuIG5vbWJyZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZFVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgaHR0cHMgdXJsJyxcXG4gICAgICAgICdmci1GUic6ICdVcmwgaHR0cHMgaW52YWxpZCdcXG4gICAgfSxcXG4gICAgc3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N1Y2Nlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1Y2PDqHMnXFxuICAgIH0sXFxuICAgIHRhYkxpc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMaXN0ICh7dG90YWx9KScsXFxuICAgICAgICAnZnItRlInOiAnTGlzdGUgKHt0b3RhbH0pJ1xcbiAgICB9LFxcbiAgICB0YWJFZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlciAtIHtuYW1lfSdcXG4gICAgfSxcXG4gICAgdGFiQWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIC0gTmV3IGl0ZW0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgLSBOb3V2ZWwgw6lsw6ltZW50J1xcbiAgICB9LFxcbiAgICB0YWJSdW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdSdW4gLSB7bmFtZX0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4w6ljdXRlciAtIHtuYW1lfSdcXG4gICAgfSxcXG4gICAgdGFiVmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcgLSB7bmFtZX0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICBzZWxlY3RBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHRvdXQnXFxuICAgIH0sXFxuICAgIHVuc2VsZWN0QWxsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVW5zZWxlY3QgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdEw6lzw6lsZWN0aW9ubmVyIHRvdXQnXFxuICAgIH0sXFxuICAgIGFkZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCcsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlcidcXG4gICAgfSxcXG4gICAgaW1wb3J0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0JyxcXG4gICAgICAgICdmci1GUic6ICdJbXBvcnRlcidcXG4gICAgfSxcXG4gICAgZXhwb3J0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0JyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlcidcXG4gICAgfSxcXG4gICAgZXhwb3J0QWxsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IGFsbCcsXFxuICAgICAgICAnZnItRlInOiAnRXhwb3J0ZXIgdG91dCdcXG4gICAgfSxcXG4gICAgZGVsZXRlQWxsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGFsbCcsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIHRvdXQnXFxuICAgIH0sXFxuICAgIHNhdmVBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTYXZlIGFsbCcsXFxuICAgICAgICAnZnItRlInOiAnU2F1dmVnYXJkZXIgdG91dCdcXG4gICAgfSxcXG4gICAgcnVuOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVuJyxcXG4gICAgICAgICdmci1GUic6ICdFeMOpY3V0ZXInXFxuICAgIH0sXFxuICAgIHJlbmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnUmVub21tZXInXFxuICAgIH0sXFxuICAgIGR1cGxpY2F0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0R1cGxpY2F0ZScsXFxuICAgICAgICAnZnItRlInOiAnRHVwbGlxdWVyJ1xcbiAgICB9LFxcbiAgICB0eXBlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1R5cGVzJyxcXG4gICAgICAgICdmci1GUic6ICdUeXBlcydcXG4gICAgfSxcXG4gICAgZnVsbHNjcmVlbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Z1bGwtc2NyZWVuJyxcXG4gICAgICAgICdmci1GUic6ICdQbGVpbiDDqWNyYW4nXFxuICAgIH0sXFxuICAgIHJlZHVjZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZHVjZScsXFxuICAgICAgICAnZnItRlInOiAnUsOpZHVpcmUnXFxuICAgIH0sXFxuICAgIGFwcEtleToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FwcGxpY2F0aW9uIGtleScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqSBkXFxcXCdhcHBsaWNhdGlvbidcXG4gICAgfSxcXG4gICAgYXBwSW5mbzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FwcGxpY2F0aW9uIGluZm8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm9ybWF0aW9uIHN1ciBsXFxcXCdhcHBsaWNhdGlvbidcXG4gICAgfSxcXG4gICAgbGFzdE1vZGlmaWNhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3QgbW9kaWZpY2F0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXJuacOocmUgbW9kaWZpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0TW9kaWZpY2F0aW9uQnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IG1vZGlmaWNhdGlvbiBtYWRlIGJ5IHtuYW1lfSBvbiB7ZGF0ZX0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlcm5pw6hyZSBtb2RpZmljYXRpb24gZmFpdGUgcGFyIHtuYW1lfSBsZSB7ZGF0ZX0nXFxuICAgIH0sXFxuICAgIGtleUV4aXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnS2V5IGFscmVhZHkgZXhpc3QuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSBjbMOpIGV4aXN0ZSBkw6lqw6AuJ1xcbiAgICB9LFxcbiAgICBzaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2l6ZScsXFxuICAgICAgICAnZnItRlInOiAnVGFpbGxlJ1xcbiAgICB9LFxcbiAgICB0YWJDbG9zZVVuc2F2ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjbG9zZSB0aGlzIHRhYiBhbmQgbG9zZSB5b3VyIHVwZGF0ZXM/JyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIGF2ZXogZWZmZWN0dcOpIGRlcyBtb2RpZmljYXRpb25zIHNhbnMgbGVzIGVucmVnaXN0cmVyLiDDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBmZXJtZXIgY2V0IG9uZ2xldCBldCBwZXJkcmUgbGVzIGRvbm7DqWVzIG5vbiBzYXV2ZWdhcmTDqWVzID8nXFxuICAgIH0sXFxuICAgIG5hbWVBbHJlYWR5VGFrZW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdOYW1lIGFscmVhZHkgdGFrZW4uJyxcXG4gICAgICAgICdmci1GUic6ICdOb20gZMOpasOgIHV0aWxpc8OpLidcXG4gICAgfSxcXG4gICAgbmFtZU5vRG90OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIG5hbWUgY2Fubm90IGNvbnRhaW4gYSBcXFxcJy5cXFxcJycsXFxuICAgICAgICAnZnItRlInOiAnTGUgbm9tIG5lIHBldXQgcGFzIGNvbnRlbmlyIGRlIFxcXFwnLlxcXFwnJ1xcbiAgICB9LFxcbiAgICByZXNvdXJjZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc291cmNlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXNzb3VyY2UnXFxuICAgIH0sXFxuICAgIHRhcmdldFJvb3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYXJnZXQgcm9vdCcsXFxuICAgICAgICAnZnItRlInOiAnUmFjaW5lIGRlIGxhIGNpYmxlJ1xcbiAgICB9LFxcbiAgICB0YXJnZXRQYXRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGFyZ2V0IHBhdGgnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoZW1pbiB2ZXJzIGxhIGNpYmxlJ1xcbiAgICB9LFxcbiAgICBwcm9wZXJ0aWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvcGVydGllcycsXFxuICAgICAgICAnZnItRlInOiAnUHJvcHJpw6l0w6lzJ1xcbiAgICB9LFxcbiAgICBwcm9wZXJ0aWVzRW1wdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3UgZG9uXFxcXCd0IGhhdmUgYW55IHByb3BlcnR5JyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYXVjdW5lIHByb3ByacOpdMOpJ1xcbiAgICB9LFxcbiAgICBrZXlVbmlxdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUga2V5IG11c3QgYmUgdW5pcXVlLicsXFxuICAgICAgICAnZnItRlInOiAnTGEgY2zDqSBkb2l0IMOqdHJlIHVuaXF1ZS4nXFxuICAgIH0sXFxuICAgIHByb3BlcnR5QWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIHByb3BlcnR5JyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSBwcm9wcmnDqXTDqSdcXG4gICAgfSxcXG4gICAgbXVsdGlsYW5ndWFnZUZpZWxkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBpcyBhIG11bHRpbGluZ3VhbCBmaWVsZC4gRW5nbGlzaCBpcyByZXF1aXJlZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlY2kgZXN0IHVuIGNoYW1wIG11bHRpbGluZ3VlLiBMXFxcXCdhbmdsYWlzIGVzdCBvYmxpZ2F0b2lyZS4nXFxuICAgIH0sXFxuICAgIGVuZ2xpc2hEZXNjcmlwdGlvblJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW5nbGlzaCBkZXNjcmlwdGlvbiBpcyByZXF1aXJlZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIGRlc2NyaXB0aW9uIGFuZ2xhaXNlIGVzdCBvYmxpZ2F0b2lyZS4nXFxuICAgIH0sXFxuICAgIG1heFNpemUxR0I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYXhpbXVtIHNpemUgYWxsb3dlZCBpcyAxR0IuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSB0YWlsbGUgbWF4aW1hbGUgYXV0aG9yaXPDqWUgZXN0IGRlIDFHTy4nXFxuICAgIH0sXFxuICAgIGludmFsaWRTaXplTWF4MUdCOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmlsZSB0b28gYmlnLCBtYXhpbXVtIHNpemUgYWxsb3dlZCBpcyAxR0IuJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVyIHRyb3AgbG91cmQsIGxhIHRhaWxsZSBtYXhpbWFsZSBhdXRob3Jpc8OpZSBlc3QgZGUgMUdPLidcXG4gICAgfSxcXG4gICAgbmFtZUFscmVhZHlFeGlzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIG5vbSBleGlzdGUgZMOpasOgLidcXG4gICAgfSxcXG4gICAgcmVzb3VyY2VOb3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlc291cmNlIGhhcyBiZWVuIGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUgcmVzc291cmNlIG5cXFxcJ2Egw6l0w6kgdHJvdXbDqWUnXFxuICAgIH0sXFxuICAgIHJlc291cmNlc0F0dGFjaGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzb3VyY2UgYXR0YWNoZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Jlc3NvdXJjZSBhdHRhY2jDqWUnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1VcGRhdGVGb3JDb25zaXN0YW5jeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0IHNlZW1zIGxpa2UgeW91ciBpdGVtcyBhcmUgbm90IHN5bmNocm9uaXplZCB3aXRoIHRoZSBzZXJ2ZXIgYW55bW9yZSwgeW91IHNob3VsZCBzYXZlIHlvdXIgd29yayBhbmQgdXBkYXRlIHRoZSBzZXJ2aWNlLicsXFxuICAgICAgICAnZnItRlInOiAnSWwgc2VtYmxlIHF1ZSB2b3Mgw6lsw6ltZW50cyBuZSBzb250IHBsdXMgc3luY2hyb25pc8OpcyBhdmVjIGxlIHNlcnZldXIsIHZvdXMgZGV2cmlleiBzYXV2ZWdhcmRlciB2b3RyZSB0cmF2YWlsIGV0IG1ldHRyZSDDoCBqb3VyIGxlIHNlcnZpY2UuJ1xcbiAgICB9LFxcbiAgICBpdGVtTm90Rm91bmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCBmb3VuZC4nLFxcbiAgICAgICAgJ2ZyLVVTJzogJ0F1Y3VuIMOpbMOpbWVudCB0cm91dsOpLidcXG4gICAgfSxcXG4gICAgc3RhdHVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RhdHVzJyxcXG4gICAgICAgICdmci1GUic6ICdTdGF0dXQnXFxuICAgIH0sXFxuICAgIG5vbmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb25lJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bidcXG4gICAgfSxcXG4gICAgaXRlbXNSZWFkb25seToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXNl4oCCaXRlbXMgYXJlIG9ubHkgcmVhZGFibGUuIFRoZXkgY2FuIG5vdCBiZSBkZWxldGVkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2VzIMOpbMOpbWVudHMgbmUgc29udCBwYXMgbW9kaWZpYWJsZXMuIElscyBuZSBwZXV2ZW50IHBhcyDDqnRyZSBzdXBwcmltw6lzLidcXG4gICAgfSxcXG4gICAgcmVnaXN0cmF0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVnaXN0cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdFbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgYmFja1RvTG9naW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdCYWNrIHRvIHNpZ24gaW4gcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUmV0b3VyIMOgIGxhIHBhZ2UgZGUgY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb25TdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2Vzc2Z1bCByZWdpc3RyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VucmVnaXN0cmVtZW50IHLDqXVzc2knXFxuICAgIH0sXFxuICAgIHN1Y2Nlc3NSZWdpc3Rlck1haWxTZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IHdpbGwgcmVjZWl2ZSBhIGNvbmZpcm1hdGlvbiBlbWFpbC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgYWxsZXogcmVjZXZvaXIgdW4gZW1haWwgZGUgY29uZmlybWF0aW9uLidcXG4gICAgfSxcXG4gICAgc3VjY2Vzc1JlZ2lzdHJhdGlvbk1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJZiB5b3UgYWxyZWFkeSBzZXQgeW91ciBwYXNzd29yZCwgeW91IGNhbiBub3cgc2lnbiBpbi4gT3RoZXJ3aXNlLCBwbGVhc2UgY2xpY2sgb24gdGhlIGxpbmsgc2VudCB0byB5b3UgYnkgZW1haWwgdG8gYWN0aXZhdGUgeW91ciBhY2NvdW50LicsXFxuICAgICAgICAnZnItRlInOiAnU2kgdm91cyBhdmV6IGTDqWrDoCBjcsOpw6kgdm90cmUgbW90IGRlIHBhc3NlLCB2b3VzIHBvdXZleiB2b3VzIGNvbm5lY3RlciBkw6hzIG1haW50ZW5hbnQuIFNpbm9uLCB2b3VzIHRyb3V2ZXJleiB1biBsaWVuIGRhbnMgbFxcXFwnZW1haWwgZGUgY29uZmlybWF0aW9uIHF1aSB2b3VzIHBlbWV0dHJhIGRcXFxcJ2FjdGl2ZXIgdm90cmUgY29tcHRlLidcXG4gICAgfSxcXG4gICAgcmVnaXN0cmF0aW9uRW1haWxIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWFrZSBzdXJlIHRoZSBlbWFpbCBpcyBjb3JyZWN0IHRvIHJlY2VpdmUgdGhlIGNvbmZpcm1hdGlvbiBsaW5rJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSB2b3VzIGFzc3VyZXIgcXVlIHZvdHJlIGVtYWlsIGVzdCBjb3JyZWN0IHBvdXIgcG91dm9pciBmaW5hbGlzZXIgbFxcXFwnZW5yZWdpc3RyZW1lbnQnXFxuICAgIH0sXFxuICAgIHBsZWFzZVdhaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugd2FpdCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgcGF0aWVudGVyJ1xcbiAgICB9LFxcbiAgICBpbXBvcnRMb2FkaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBpbXBvcnQgZmlsZSBpcyBiZWluZyBwcm9jZXNzZWQuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIGltcG9ydCBlc3QgZW4gY291cnMgZGUgdHJhaXRlbWVudC4uLidcXG4gICAgfSxcXG4gICAgZXhwb3J0TG9hZGluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgZXhwb3J0IGZpbGUgaXMgYmVpbmcgcHJlcGFyZWQuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIGV4cG9ydCBlc3QgZW4gY291cnMgZGUgY2hhcmdlbWVudC4uLidcXG4gICAgfSxcXG4gICAgY2xvc2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDbG9zZScsXFxuICAgICAgICAnZnItRlInOiAnRmVybWVyJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VydmljZScsXFxuICAgICAgICAnZnItRlInOiAnU2VydmljZSdcXG4gICAgfSxcXG4gICAgcmVuYW1lRGlzYWJsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2UgY2xvc2UgYW55IHZpZXcgb3IgZWRpdCB0YWIgY29uY2VybmluZyB0aGlzIGl0ZW0gaWYgeW91IHdhbnQgdG8gcmVuYW1lIGl0JyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBmZXJtZXIgdG91dCBvbmdsZXQgY29uY2VybmFudCBjZXQgw6lsw6ltZW50IHNpIHZvdXMgc291aGFpdGV6IGxlIHJlbm9tbWVyJ1xcbiAgICB9LFxcbiAgICBkZWxldGVEaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBjbG9zZSBhbnkgdmlldyBvciBlZGl0IHRhYiBjb25jZXJuaW5nIHRoaXMgaXRlbSBpZiB5b3Ugd2FudCB0byBkZWxldGUgaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIGZlcm1lciB0b3V0IG9uZ2xldCBjb25jZXJuYW50IGNldCDDqWzDqW1lbnQgc2kgdm91cyBzb3VoYWl0ZXogbGUgc3VwcHJpbWVyJ1xcbiAgICB9LFxcbiAgICByZXN1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdyZXN1bHQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3LDqXN1bHRhdCdcXG4gICAgfSxcXG4gICAgcmVzdWx0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3Jlc3VsdHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3LDqXN1bHRhdHMnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVHlwZUxhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVnaXN0cmF0aW9uIHR5cGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1R5cGUgZFxcXFwnZW5yZWdpc3RyZW1lbnQnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUmVnaXN0cmF0aW9uVHlwZUVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIHNlbGVjdCB0aGUgdHlwZSBvZiByZWdpc3RyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHPDqWxlY3Rpb25uZXIgbGUgdHlwZSBkXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlU3VwcGxpZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdXBwbGllcicsXFxuICAgICAgICAnZnItRlInOiAnRm91cm5pc3NldXInXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVHlwZUNhcGl0YWxQcm9qZWN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2FwaXRhbCBQcm9qZWN0JyxcXG4gICAgICAgICdmci1GUic6ICdDYXBpdGFsIFByb2plY3QnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVHlwZUludGVybmFsVXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludGVybmFsIFVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ludGVybmFsIFVzZXInXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uSW50cm8xOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBDb21tdW5pdHkgZW5hYmxlcyBDaGV2cm9uIFN1cHBsaWVycywgQ2hldnJvbiBJbnRlcm5hbCBVc2VycyBhbmQgQ2hldnJvbiBNYWpvciBDYXBpdGFsIFByb2plY3RzIHRvIHBlcmZvcm0gZWxlY3Ryb25pYyB0cmFuc2FjdGlvbnMgd2l0aCBDaGV2cm9uIElUIHN5c3RlbXMgaW4gYSBoaWdobHkgc2VjdXJlIGJ1dCB2ZXJ5IGVhc3kgbWFubmVyLicsXFxuICAgICAgICAnZnItRlInOiAnQ2V0dGUgY29tbXVuYXV0w6kgcGVybWV0IGF1eCBmb3Vybmlzc2V1cnMsIFxcXCJJbnRlcm5hbCBVc2VyXFxcIiBldCBcXFwiQ2FwaXRhbCBQcm9qZWN0XFxcIiBDaGV2cm9uIGRlIHLDqWFsaXNlciBkZXMgw6ljaGFuZ2VzIMOpbGVjdHJvbmlxdWVzIGF2ZWMgbGVzIHN5c3TDqG1lcyBpbmZvcm1hdGlxdWVzIGRlIENoZXZyb24gZGUgZmHDp29uIHNpbXBsZSBldCBzw6ljdXJpc8OpZS4nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uU3VwcGxpZXJJbnRybzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RvIGJlIHBhcnQgb2YgdGhlIENoZXZyb24gQ29tbXVuaXR5LCB5b3UgbXVzdCBoYXZlIGJlZW4gaW52aXRlZCBhbmQvb3IgYXV0aG9yaXplZCBieSBDaGV2cm9uLicsXFxuICAgICAgICAnZnItRlInOiAnUG91ciBmYWlyZSBwYXJ0aWUgZGUgbGEgY29tbXVuYXV0w6kgQ2hldnJvbiwgdm91cyBkZXZleiBhdm9pciByZcOndSB1bmUgaW52aXRhdGlvbiBldC9vdSB1bmUgYXV0b3Jpc2F0aW9uIGRlIGxhIHBhcnQgZGUgQ2hldnJvbi4nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGlkeGlkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUElEWCBJRCcsXFxuICAgICAgICAnZnItRlInOiAnUElEWCBJRCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25QaWR4aWRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gUElEWCBJRCBpcyBmb3VuZCBpbiB0aGUgaW52aXRhdGlvbiBlbWFpbCBzZW50IGJ5IENoZXZyb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIFxcXCJQSURYIElEXFxcIiBDaGV2cm9uIHNlIHRyb3V2ZSBkYW5zIGxcXFxcJ2VtYWlsIGRcXFxcJ2ludml0YXRpb24gZW52b3nDqSBwYXIgQ2hldnJvbidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25QaWR4aWRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBQSURYIElEJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgbGUgXFxcIlBJRFggSURcXFwiIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFUlAgVmVuZG9yIElEJyxcXG4gICAgICAgICdmci1GUic6ICdFUlAgVmVuZG9yIElEJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblZlbmRvcmlkSGVscDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBDaGV2cm9uIEVSUCBWZW5kb3IgSUQgaXMgZm91bmQgaW4gdGhlIGludml0YXRpb24gZW1haWwgc2VudCB0byB5b3UgYnkgQ2hldnJvbicsXFxuICAgICAgICAnZnItRlInOiAnTGUgXFxcIkVSUCBWZW5kb3IgSURcXFwiIENoZXZyb24gc2UgdHJvdXZlIGRhbnMgbFxcXFwnZW1haWwgZFxcXFwnaW52aXRhdGlvbiBlbnZvecOpIHBhciBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblZlbmRvcmlkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2UgZW50ZXIgdGhlIENoZXZyb24gRVJQIFZlbmRvciBJRCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc2Fpc2lyIGxlIFxcXCJFUlAgVmVuZG9yIElEXFxcIiBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudEludHJvOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiXFxcXG4gICAgICAgICAgICA8c3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5QbGVhc2UgcmVhZCB0aGUmbmJzcDs8L3NwYW4+XFxcXG4gICAgICAgICAgICAgICAgPGEgdGFyZ2V0PVxcXFxcXFwiX2JsYW5rXFxcXFxcXCIgaHJlZj1cXFxcXFxcImh0dHA6Ly93d3cuYjJlZW4uY29tL19jb21tdW5pdHltYXRlcmlhbC9jaGV2cm9uL0FncmVlbWVudF9iMmVlbl9DaGV2cm9uX1Byb2QucGRmXFxcXFxcXCI+Y29udHJhY3R1YWwgYWdyZWVtZW50PC9hPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPiZuYnNwO2FuZCBjb25maXJtIGJlbG93PC9zcGFuPlxcXFxuICAgICAgICAgICAgPC9zcGFuPlxcXFxuICAgICAgICBcXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIlxcXFxuICAgICAgICAgICAgPHNwYW4+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+TWVyY2kgZGUgbGlyZSZuYnNwOzwvc3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8YSB0YXJnZXQ9XFxcXFxcXCJfYmxhbmtcXFxcXFxcIiBocmVmPVxcXFxcXFwiaHR0cDovL3d3dy5iMmVlbi5jb20vX2NvbW11bml0eW1hdGVyaWFsL2NoZXZyb24vQWdyZWVtZW50X2IyZWVuX0NoZXZyb25fUHJvZC5wZGZcXFxcXFxcIj5sJ2FjY29yZCBjb250cmFjdHVlbDwvYT5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj4mbmJzcDtldCBkZSB2YWxpZGVyIGNpLWRlc3NvdXM8L3NwYW4+XFxcXG4gICAgICAgICAgICA8L3NwYW4+XFxcXG4gICAgICAgIFxcXCJcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25BZ3JlZW1lbnRMYWJlbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0kgaGF2ZSByZWFkIGFuZCBJIGFjY2VwdCB0aGUgVGVybXMgYW5kIENvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0pcXFxcJ2FpIGx1IGV0IGFjY2VwdGUgbGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZXMgZGUgY2UgY29udHJhdCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25BZ3JlZW1lbnRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBhY2NlcHQgdGhlIFRlcm1zIGFuZCBDb25kaXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSB2YWxpZGVyIGxlcyBDb25kaXRpb25zIEfDqW7DqXJhbGVzJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkludGVybmFsVXNlckludHJvMjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RvIGdldCB5b3VyIHJlZ2lzdHJhdGlvbiBhY2NlcHRlZCwgcGxlYXNlIHByb3ZpZGUgdGhlIGFwcHJvcHJpYXRlIFBJRFggSUQgYW5kIENoZXZyb24gcGFzc3dvcmQuJyxcXG4gICAgICAgICdmci1GUic6ICdQb3VyIHBvdXJzdWl2cmUgdm90cmUgZW5yZWdpc3RyZW1lbnQsIG1lcmNpIGRcXFxcJ2VudHJlciBsZSBcXFwiUElEWCBJRFxcXCIgZXQgbW90IGRlIHBhc3NlIENoZXZyb24gcHVpcyB2YWxpZGVyLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25QYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NoZXZyb24gcGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vdCBkZSBwYXNzZSBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBhc3N3b3JkSGVscDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBDaGV2cm9uIHBhc3N3b3JkIGlzIGZvdW5kIGluIHRoZSBpbnZpdGF0aW9uIGVtYWlsIHNlbnQgYnkgQ2hldnJvbicsXFxuICAgICAgICAnZnItRlInOiAnTGUgbW90IGRlIHBhc3NlIENoZXZyb24gc2UgdHJvdXZlIGRhbnMgbFxcXFwnZW1haWwgZFxcXFwnaW52aXRhdGlvbiBlbnZvecOpIHBhciBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBhc3N3b3JkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2UgZW50ZXIgdGhlIENoZXZyb24gcGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHNhaXNpciBsZSBtb3QgZGUgcGFzc2UgQ2hldnJvbidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25DYXBpdGFsUHJvamVjdEludHJvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGFyZSBjcmVhdGluZyB0aGlzIGFjY291bnQgZm9yIGEgQ2hldnJvbiBNYWpvciBDYXBpdGFsIFByb2plY3QuJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIGNyw6lleiBjZSBjb21wdGUgcG91ciB1biBcXFwiQ2hldnJvbiBNYWpvciBDYXBpdGFsIFByb2plY3RcXFwiLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25QaWR4aWRWZW5kb3JpZEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUElEWCBJRCAvIEVSUCBWZW5kb3IgSUQgYXJlIG5vdCBjb3JyZWN0LiBQbGVhc2UgY2hlY2sgdGhlIHZhbHVlcyB5b3UgcHJvdmlkZWQgYW5kIHJldHJ5LicsXFxuICAgICAgICAnZnItRlInOiAnXFxcIlBJRFggSURcXFwiIC8gXFxcIkVSUCBWZW5kb3IgSURcXFwiIGluY29ycmVjdHMuIE1lcmNpIGRlIHbDqXJpZmllciBsZXMgdmFsZXVycyBzYWlzaWVzIGF2YW50IGRlIHLDqWVzc2F5ZXIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZFBhc3N3b3JkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEIC8gQ2hldnJvbiBQYXNzd29yZCBhcmUgbm90IGNvcnJlY3QuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWVzIHlvdSBwcm92aWRlZCBhbmQgcmV0cnkuJyxcXG4gICAgICAgICdmci1GUic6ICdcXFwiUElEWCBJRFxcXCIgLyBNb3QgZGUgcGFzc2UgaW5jb3JyZWN0cy4gTWVyY2kgZGUgdsOpcmlmaWVyIGxlcyB2YWxldXJzIHNhaXNpZXMgYXZhbnQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRUb29sdGlwRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIHBlcm1pc3Npb24gc2V0JyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgY2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcEVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHBlcm1pc3Npb24gc2V0JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIGNlIGdyb3VwZSBkZSBwZXJtaXNzaW9ucydcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldFRvb2x0aXBDbG9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZSBhIG5ldyBwZXJtaXNzaW9uIHNldCB3aXRoIHByZWZpbGxlZCBkYXRhIGZyb20gdGhpcyBvbmUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6llciB1biBub3V2ZWF1IGdyb3VwZSBkZSBwZXJtaXNzaW9ucyBhdmVjIGxlcyBkb25uw6llcyBkZSBjZWx1aS1jaSdcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldFRvb2x0aXBDcm9zc0luc3RhbmNlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgaXMgYSBnbG9iYWwgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIGdyb3VwZSBkZSBwZXJtaXNzaW9ucyBlc3QgZ2xvYmFsJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0QXRMZWFzdE9uZVNjb3BlUmVxdWlyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBdCBsZWFzdCBvbmUgc2NvcGUgc3RyaW5nIGlzIHJlcXVpcmVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdSBtb2lucyB1biBzY29wZSBkb2l0IMOqdHJlIHJlbnNlaWduw6knXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRzRGVsZXRlQ29uZmlybToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBwZXJtaXNzaW9uIHNldD8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZSBncm91cGUgZGUgcGVybWlzc2lvbnMgPydcXG4gICAgfSxcXG4gICAgdXNlckRpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2Fzc29jaWF0ZSB1c2VyJyxcXG4gICAgICAgICdmci1GUic6ICdEw6lzYXNzb2NpZXIgY2V0IHV0aWxpc2F0ZXVyJ1xcbiAgICB9LFxcbiAgICByZWFsbToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlYWxtJyxcXG4gICAgICAgICdmci1GUic6ICdEb21haW5lJ1xcbiAgICB9LFxcbiAgICBlbWFpbFZlcmlmaWVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwgdmVyaWZpZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsIGNvbmZpcm3DqSdcXG4gICAgfSxcXG4gICAgcG9saWNpZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQb2xpY2llcycsXFxuICAgICAgICAnZnItRlInOiAnRHJvaXRzIGRcXFxcJ2FjY8OocydcXG4gICAgfSxcXG4gICAgb3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3JnYW5pemF0aW9uIHBvc2l0aW9ucycsXFxuICAgICAgICAnZnItRlInOiAnUG9zaXRpb25zIGRcXFxcJ29yZ2FuaXNhdGlvbidcXG4gICAgfSxcXG4gICAgdXNlclJlbG9hZE9yZ1Bvc2l0aW9uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbG9hZCB1c2VyIG9yZ2FuaXphdGlvbiBwb3NpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhZnJhw65jaGlyIGxlcyBwb3NpdGlvbnMgZFxcXFwnb3JnYW5pc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dyb3VwZSBkZSBwZXJtaXNzaW9ucydcXG4gICAgfSxcXG4gICAgdXNlclJlc2VuZEFjdGl2YXRpb25FbWFpbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc2VuZCBhY3RpdmF0aW9uIGVtYWlsJyxcXG4gICAgICAgICdmci1GUic6ICdSZW52b3llciBsXFxcXCdlbWFpbCBkXFxcXCdhY3RpdmF0aW9uJ1xcbiAgICB9LFxcbiAgICB1c2VyU2hvd09yZ1Bvc2l0aW9uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgdXNlciBvcmdhbml6YXRpb24gcG9zaXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlcyBwb3NpdGlvbnMgZFxcXFwnb3JnYW5pc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0c0Zvckluc3RhbmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGVybWlzc2lvbiBzZXRzIGZvciBpbnN0YW5jZScsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlcyBkZSBwZXJtaXNzaW9ucyBwb3VyIGxcXFxcJ2luc3RhbmNlJ1xcbiAgICB9LFxcbiAgICBvdGhlclByb3BlcnRpZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPdGhlciBwcm9wZXJ0aWVzJyxcXG4gICAgICAgICdmci1GUic6ICdBdXRyZXMgcHJvcHJpw6l0w6lzJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0UmVxdWlyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBdCBsZWFzdCBvbmUgcGVybWlzc2lvbiBzZXQgbXVzdCBiZSBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnQXUgbW9pbnMgdW4gZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGRvw650IMOqdHJlIGFzc2lnbsOpIMOgIGxcXFxcJ3V0aWxpc2F0ZXVyJ1xcbiAgICB9LFxcbiAgICBvcmdQb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ09yZ2FuaXphdGlvbiBwb3NpdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnUG9zaXRpb24gZGFucyBsXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHVzZXJzRW1haWxQbGFjZWhvbGRlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VtYWlsLi4uJyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbC4uLidcXG4gICAgfSxcXG4gICAgc2VhcmNoQnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWFyY2ggYnknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hlcmNoZXIgcGFyJ1xcbiAgICB9LFxcbiAgICB0b29sdGlwQWRkVXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1R5cGUgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIG5ldyB1c2VyIHlvdSB3YW50IHRvIGFzc29jaWF0ZSB0byB0aGlzIGluc3RhbmNlJyxcXG4gICAgICAgICdmci1GUic6ICdFbnRyZXIgbFxcXFwnYWRyZXNzZSBlbWFpbCBkdSBub3V2ZWwgdXRpbGlzYXRldXIgcXVlIHZvdXMgc291aGFpdGV6IGFzc29jaWVyIMOgIGNldHRlIGluc3RhbmNlJ1xcbiAgICB9LFxcbiAgICBhc3NvY2lhdGVVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXNzb2NpYXRlIG5ldyB1c2VyJyxcXG4gICAgICAgICdmci1GUic6ICdBc3NvY2llciBub3V2ZWwgdXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIHVzZXJEZWxldGVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHVzZXI/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgY2V0IHV0aWxpc2F0ZXVyID8nXFxuICAgIH0sXFxuICAgIHVzZXJEaXNhc3NvY2lhdGVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRpc2Fzc29jaWF0ZSB0aGlzIHVzZXIgZnJvbSB0aGUgY3VycmVudCBpbnN0YW5jZT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGTDqXNhc3NvY2llciBjZXQgdXRpbGlzYXRldXIgZGUgbFxcXFwnaW5zdGFuY2UgPydcXG4gICAgfSxcXG4gICAgc2hvd0FsbFVzZXJzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSB1c2VycyBvZiBhbGwgaW5zdGFuY2VzJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsZXMgdXRpbGlzYXRldXJzIGRlIHRvdXRlcyBsZXMgaW5zdGFuY2VzJ1xcbiAgICB9LFxcbiAgICBzaG93U2NvcGVsZXNzVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmx5IGRpc3BsYXkgdXNlcnMgd2l0aG91dCBhbnkgcGVybWlzc2lvbicsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgc2V1bGVtZW50IGxlcyB1dGlsaXNhdGV1cnMgc2FucyBkcm9pdHMgZFxcXFwnYWNjw6hzJ1xcbiAgICB9LFxcbiAgICBzaG93T3JnbGVzc1VzZXJzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT25seSBkaXNwbGF5IHVzZXJzIHdpdGhvdXQgYW55IGFzc29jaWF0ZWQgb3JnIG5vZGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIHNldWxlbWVudCBsZXMgdXRpbGlzYXRldXJzIHNhbnMgcG9zaXRpb24gZFxcXFwnb3JnYW5pc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNhc3NvY2lhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNhc3NvY2lhdGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXNhc3NvY2llcidcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dyb3VwZXMgZGUgcGVybWlzc2lvbnMnXFxuICAgIH0sXFxuICAgIHVzZXJzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlcnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVycydcXG4gICAgfSxcXG4gICAgZmllbGRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmllbGRzJyxcXG4gICAgICAgICdmci1GUic6ICdDaGFtcHMnXFxuICAgIH0sXFxuICAgIGlzS2V5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnS2V5PycsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqSA/J1xcbiAgICB9LFxcbiAgICBhZGRGaWVsZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBhIGZpZWxkJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuIGNoYW1wJ1xcbiAgICB9LFxcbiAgICBjcmVhdGVUYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZSBhIG5ldyB0YWJsZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuZSBub3V2ZWxsZSB0YWJsZSdcXG4gICAgfSxcXG4gICAgZWRpdFRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBkYXRlIHRoZSB0YWJsZScsXFxuICAgICAgICAnZnItRlInOiAnTW9kaWZpZXIgbGEgdGFibGUnXFxuICAgIH0sXFxuICAgIGludmFsaWRYbWxUYWc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlLiBBbGxvd2VkIGNoYXJzOiBhLXogQS1aIDAtOSBfIDogLSAuJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIgaW52YWxpZGUuIENhcmFjdMOocmVzIGF1dG9yaXPDqXMgOiBhLXogQS1aIDAtOSBfIDogLSAuJ1xcbiAgICB9LFxcbiAgICB3aWR0aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dpZHRoJyxcXG4gICAgICAgICdmci1GUic6ICdMYXJnZXVyJ1xcbiAgICB9LFxcbiAgICBoZWlnaHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIZWlnaHQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0hhdXRldXInXFxuICAgIH0sXFxuICAgIHNtYWxsU2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NtYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdQZXRpdCdcXG4gICAgfSxcXG4gICAgbWVkaXVtU2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lZGl1bScsXFxuICAgICAgICAnZnItRlInOiAnTW95ZW4nXFxuICAgIH0sXFxuICAgIGxhcmdlU2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhcmdlJyxcXG4gICAgICAgICdmci1GUic6ICdHcmFuZCdcXG4gICAgfSxcXG4gICAgZnVsbFNpemU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGdWxsJyxcXG4gICAgICAgICdmci1GUic6ICdQbGVpbidcXG4gICAgfSxcXG4gICAgZWRpdERvY3VtZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlciBsZSBkb2N1bWVudCdcXG4gICAgfSxcXG4gICAgdmlld0RvY3VtZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZSBkb2N1bWVudCdcXG4gICAgfSxcXG4gICAgcmVwcm9jZXNzRG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXByb2Nlc3MgZG9jdW1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbGFuY2VyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICByZWxvYWREb2N1bWVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbG9hZCBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGFyZ2VyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICBwcmludERvY3VtZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpbnQgZG9jdW1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcHJpbWVyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICB2aWV3Rm9ybUpzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyB0aGUgZm9ybScsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZSBmb3JtdWxhaXJlJ1xcbiAgICB9LFxcbiAgICBlZGl0Rm9ybUpzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCB1c2luZyB0aGUgZm9ybScsXFxuICAgICAgICAnZnItRlInOiAnRWRpdGVyIMOgIGxcXFxcJ2FpZGUgZHUgZm9ybXVsYWlyZSdcXG4gICAgfSxcXG4gICAgdmlld1NvdXJjZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcgdGhlIHNvdXJjZScsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsYSBzb3VyY2UnXFxuICAgIH0sXFxuICAgIGVkaXRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIGxlIG1lc3NhZ2UnXFxuICAgIH0sXFxuICAgIHZpZXdNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIG1lc3NhZ2UnXFxuICAgIH0sXFxuICAgIHJlcHJvY2Vzc01lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXByb2Nlc3MgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnUmVsYW5jZXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgcmVsb2FkTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbG9hZCBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZWNoYXJnZXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgcHJpbnRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpbnQgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnSW1wcmltZXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgbG9ja2VkTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgbWVzc2FnZSBpcyBjdXJyZW50bHkgbG9ja2VkJyxcXG4gICAgICAgICdmci1GUic6ICdDZSBtZXNzYWdlIGVzdCB2ZXJyb3VpbGzDqSdcXG4gICAgfSxcXG4gICAgYmFja1RvTGlzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHVybiB0byBsaXN0JyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgbGlzdGUnXFxuICAgIH0sXFxuICAgIGVtcHR5QXBwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm9uZScsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lJ1xcbiAgICB9LFxcbiAgICBub0FwcFNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gYXBwbGljYXRpb24gc2VsZWN0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBhcHBsaWNhdGlvbiBzw6lsZWN0aW9ubsOpZSdcXG4gICAgfSxcXG4gICAgc2VsZWN0QXBwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGFuIGFwcGxpY2F0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuZSBhcHBsaWNhdGlvbidcXG4gICAgfSxcXG4gICAgbG9nb3V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2lnbiBvdXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWNvbm5leGlvbidcXG4gICAgfSxcXG4gICAgbGFzdFN5bmNEYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFzdCBzeW5jaHJvbml6YXRpb24gZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnRGF0ZSBkZSBkZXJuacOocmUgc3luY2hyb25pc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBob21lQ29uZmlndXJhdGlvbkludmFsaWROYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCB2YWx1ZS4gQXV0aG9yaXplZCBjaGFyYWN0ZXJzIDogYS16IEEtWiAwLTkgXyA6IC0gLicsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyIGludmFsaWRlLiBDYXJhY3TDqHJlcyBhdXRvcmlzw6lzIDogYS16IEEtWiAwLTkgXyA6IC0gLidcXG4gICAgfSxcXG4gICAgaG9tZUNvbmZpZ3VyYXRpb25OYW1lQWxyZWFkeVVzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBge25hbWV9YGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgY29uZmlndXJhdGlvbiwgY2hvb3NlIGFub3RoZXIgb25lIHBsZWFzZScsXFxuICAgICAgICAnZnItRlInOiAnTGUgbm9tIGB7bmFtZX1gIGVzdCBkw6lqw6AgdXRpbGlzw6kgcG91ciB1bmUgYXV0cmUgY29uZmlndXJhdGlvbiwgdmV1aWxsZXogZW4gY2hvaXNpciB1biBhdXRyZSdcXG4gICAgfSxcXG4gICAgaW5zdGFuY2VDaGFuZ2VEaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0luc3RhbmNlIGNoYW5nZSBpc25cXFxcJ3QgcG9zc2libGUgd2hlbiB5b3UgYXJlIGVkaXRpbmcgdXNlcnMgb3IgcGVybWlzc2lvbiBzZXRzJyxcXG4gICAgICAgICdmci1GUic6ICdDaGFuZ2VyIGRcXFxcJ2luc3RhbmNlIGVzdCBpbXBvc3NpYmxlIHBlbmRhbnQgbFxcXFwnw6lkaXRpb24gZFxcXFwndXRpbGlzYXRldXJzIG91IGRlIGdyb3VwZXMgZGUgcGVybWlzc2lvbnMuJ1xcbiAgICB9LFxcbiAgICBxdWl0RWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1aXQgZWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnQW5udWxlciDDqWRpdGlvbidcXG4gICAgfSxcXG4gICAgcmVsb2FkSW5zdGFuY2VzTGlzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbG9hZCBpbnN0YW5jZXMgbGlzdCcsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgbGEgbGlzdGUgZGVzIGluc3RhbmNlcydcXG4gICAgfSxcXG4gICAgaW5zdGFuY2VGZXRjaFdhcm5pbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcHAgZW5kcG9pbnRzIG5vdCBsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlcyBcXFxcJ2VuZHBvaW50c1xcXFwnIG5lIHNvbnQgcGFzIGNoYXJnw6lzJ1xcbiAgICB9LFxcbiAgICBtZW51OiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVudScsXFxuICAgICAgICAnZnItRlInOiAnTWVudSdcXG4gICAgfSxcXG4gICAgaG9tZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hvbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FjY3VlaWwnXFxuICAgIH0sXFxuICAgIHJlcG9ydHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXBvcnRzJyxcXG4gICAgICAgICdmci1GUic6ICdSYXBwb3J0cydcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV29yayBJdGVtcycsXFxuICAgICAgICAnZnItRlInOiAnVMOiY2hlcydcXG4gICAgfSxcXG4gICAgdGFibGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGFibGVzJyxcXG4gICAgICAgICdmci1GUic6ICdUYWJsZXMnXFxuICAgIH0sXFxuICAgIGRvY3VtZW50czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RvY3VtZW50cycsXFxuICAgICAgICAnZnItRlInOiAnRG9jdW1lbnRzJ1xcbiAgICB9LFxcbiAgICBvYXV0aFNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT0F1dGggU2V0dGluZ3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmVzIE9BdXRoJ1xcbiAgICB9LFxcbiAgICBvcmdhbmlzYXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3JnYW5pemF0aW9ucycsXFxuICAgICAgICAnZnItRlInOiAnT3JnYW5pc2F0aW9ucydcXG4gICAgfSxcXG4gICAgbG9jYWxUZXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9jYWwgdGVzdCcsXFxuICAgICAgICAnZnItRlInOiAnVGVzdCBsb2NhbCdcXG4gICAgfSxcXG4gICAgcmV0cnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXRyeT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1LDqWVzc2F5ZXIgPydcXG4gICAgfSxcXG4gICAgbm9NZW51RW50cnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBlbnRyeSBmb3VuZCcsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gbWVudSBhY2Nlc3NpYmxlJ1xcbiAgICB9LFxcbiAgICBjcmVhdGVkTWVzc2FnZXNJZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDcmVhdGVkIG1lc3NhZ2UocykgSUQocyk6JyxcXG4gICAgICAgICdmci1GUic6ICdJRChzKSBkdS9kZXMgbWVzc2FnZShzKSBjcsOpw6kocykgOidcXG4gICAgfSxcXG4gICAgZmxhZ01lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGbGFnIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01hcnF1ZXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgZmxhZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGbGFncycsXFxuICAgICAgICAnZnItRlInOiAnTWFycXVldXJzJ1xcbiAgICB9LFxcbiAgICBhdmFpbGFibGVGaWVsZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBdmFpbGFibGUgZmllbGRzJyxcXG4gICAgICAgICdmci1GUic6ICdDaGFtcHMgZGlzcG9uaWJsZXMnXFxuICAgIH0sXFxuICAgIGFsd2F5c1Zpc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbHdheXMgdmlzaWJsZScsXFxuICAgICAgICAnZnItRlInOiAnVG91am91cnMgdmlzaWJsZSdcXG4gICAgfSxcXG4gICAgdmlzaWJsZUlmT3BlbmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlzaWJsZSBpZiBvcGVuZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Zpc2libGUgc2kgb3V2ZXJ0J1xcbiAgICB9LFxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdCYWNrZ3JvdW5kIGNvbG9yJyxcXG4gICAgICAgICdmci1GUic6ICdDb3VsZXVyIGR1IGZvbmQnXFxuICAgIH0sXFxuICAgIGZvbnRDb2xvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RlZmF1bHQgZm9udCBjb2xvcicsXFxuICAgICAgICAnZnItRlInOiAnQ291bGV1ciBkZSBiYXNlIGR1IHRleHRlJ1xcbiAgICB9LFxcbiAgICBjcmVhdGVNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6llciB1biBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICB1cGxvYWRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwbG9hZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnRW52b3llciBkZXMgZmljaGllcnMnXFxuICAgIH0sXFxuICAgIGVuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlJyxcXG4gICAgICAgICdmci1GUic6ICdUZXJtaW5lcidcXG4gICAgfSxcXG4gICAgcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Byb2Nlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGlkZXInXFxuICAgIH0sXFxuICAgIGZpbGVzRHJvcHBlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ2ZpbGUocykgZHJvcHBlZCcsXFxuICAgICAgICAnZnItRlInOiAnZmljaGllcihzKSBkw6lwb3PDqShzKSdcXG4gICAgfSxcXG4gICAgZmlsZXNVcGxvYWRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ2ZpbGUocykgdXBsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2ZpY2hpZXIocykgZW52b3nDqShzKSdcXG4gICAgfSxcXG4gICAgc2hvd1Byb2Nlc3NlZEZpbGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsZXMgZmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzJ1xcbiAgICB9LFxcbiAgICBoaWRlUHJvY2Vzc2VkRmlsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIaWRlIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgZmlsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01hc3F1ZXIgbGVzIGZpY2hpZXJzIHRyYWl0w6lzIGF2ZWMgc3VjY8OocydcXG4gICAgfSxcXG4gICAgZmlsZXNTdWJtaXRTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmlsZXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXJzIHRyYWl0w6lzIGF2ZWMgc3VjY8OocyAhJ1xcbiAgICB9LFxcbiAgICBoaWRkZW5Db2x1bW5zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSGlkZGVuIGNvbHVtbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbG9ubmVzIGNhY2jDqWVzJ1xcbiAgICB9LFxcbiAgICBoaWRkZW5Db2x1bW5zVGlwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnKGNsaWNrIHRvIHJlLWRpc3BsYXkpJyxcXG4gICAgICAgICdmci1GUic6ICcoY2xpcXVlciBwb3VyIHLDqS1hZmZpY2hlciknXFxuICAgIH0sXFxuICAgIGFsbENvbHVtbnNWaXNpYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWxsIGNvbHVtbnMgYXJlIGN1cnJlbnRseSBkaXNwbGF5ZWQuIEhpZGRlbnMgY29sdW1ucyBjYW4gYmUgZm91bmQgaGVyZSBhbmQgcmUtZGlzcGxheWVkLicsXFxuICAgICAgICAnZnItRlInOiAnVG91dGVzIGxlcyBjb2xvbm5lcyBzb250IGFjdHVlbGxlbWVudCB2aXNpYmxlcy4gTGVzIGNvbG9ubmVzIGNhY2jDqWVzIGFwcGFyYWl0cm9udCBpY2kgZXQgcG91cnJvbnQgw6p0cmUgcsOpLWFmZmljaMOpZXMuJ1xcbiAgICB9LFxcbiAgICBkYXRlRnJvbToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Zyb20nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWJ1dCdcXG4gICAgfSxcXG4gICAgZGF0ZVRvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpbidcXG4gICAgfSxcXG4gICAgZG9jdW1lbnRUeXBlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldycsXFxuICAgICAgICAnZnItRlInOiAnVnVlJ1xcbiAgICB9LFxcbiAgICBjb2xsYXBzZU9wdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbGxhcHNlIGFmdGVyIHNlYXJjaCcsXFxuICAgICAgICAnZnItRlInOiAnUsOpZHVpcmUgYXByw6hzIHJlY2hlcmNoZSdcXG4gICAgfSxcXG4gICAgcmVzZXRTZWFyY2hPcHRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXVuY2ggc2VhcmNoIGFmdGVyIHJlc2V0JyxcXG4gICAgICAgICdmci1GUic6ICdMYW5jZXIgbGEgcmVjaGVyY2hlIGFwcsOocyByw6lpbml0aWFsaXNhdGlvbidcXG4gICAgfSxcXG4gICAgZGlzcGxheUxhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBsYWJlbCcsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgbGFiZWwnXFxuICAgIH0sXFxuICAgIHdvcmtmbG93SW5Qcm9ncmVzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0luIGEgd29ya2Zsb3cnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZsdXggZW4gY291cnMnXFxuICAgIH0sXFxuICAgIGFzc2lnblVzZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBc3NpZ24gdXNlcicsXFxuICAgICAgICAnZnItRlInOiAnQXNzaWduZXIgdXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIGFzc2lnbmVkVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBc3NpZ25lZCB1c2VyKHMpJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1cihzKSBhc3NpZ27DqShzKSdcXG4gICAgfSxcXG4gICAgYXNzaWduVXNlclRvUG9zaXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgdGhpcyB1c2VyIHRvIHRoaXMgcG9zaXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgY2V0IHV0aWxpc2F0ZXVyIMOgIGNldHRlIHBvc2l0aW9uJ1xcbiAgICB9LFxcbiAgICByZW1vdmVVc2VyT3JnUG9zaXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZW1vdmUgdGhpcyB1c2VyIGZyb20gdGhpcyBwb3NpdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIGNldCB1dGlsaXNhdGV1ciBkZSBjZXR0ZSBwb3NpdGlvbidcXG4gICAgfSxcXG4gICAgbGF5b3V0QnVpbGRlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xheW91dCBidWlsZGVyJyxcXG4gICAgICAgICdmci1GUic6ICdQZXJzb25uYWxpc2F0aW9uIGRlIGxcXFxcJ2FmZmljaGFnZSdcXG4gICAgfSxcXG4gICAgdGhlbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGVtZScsXFxuICAgICAgICAnZnItRlInOiAnVGjDqG1lJ1xcbiAgICB9LFxcbiAgICBmb250U2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZvbnQgc2l6ZScsXFxuICAgICAgICAnZnItRlInOiAnVGFpbGxlIGNhcmFjdMOocmVzJ1xcbiAgICB9LFxcbiAgICBzaG93SW52aXNpYmxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaW52aXNpYmxlcycsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgbGVzIGNhcmFjdMOocmVzIGludmlzaWJsZXMnXFxuICAgIH0sXFxuICAgIHNob3dHdXR0ZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaG93IGd1dHRlcicsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgbGEgbWFyZ2UnXFxuICAgIH0sXFxuICAgIHNob3dJbmRlbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaG93IGluZGVudCBndWlkZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBndWlkZXMgZFxcXFwnaW5kZW50YXRpb24nXFxuICAgIH0sXFxuICAgIHdyYXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXcmFwJyxcXG4gICAgICAgICdmci1GUic6ICdEw6lib3JkZW1lbnQnXFxuICAgIH0sXFxuICAgIHByZXZpZXc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmV2aWV3JyxcXG4gICAgICAgICdmci1GUic6ICdQcsOpdmlzdWFsaXNhdGlvbidcXG4gICAgfSxcXG4gICAgc2hvd0hpZGRlbkNvbHVtbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaG93IGhpZGRlbiBjb2x1bW5zJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsZXMgY29sb25uZXMgY2FjaMOpZXMnXFxuICAgIH0sXFxuICAgIHJlc2V0RGlzcGxheVNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZXQgYWxsIGRpc3BsYXkgc2V0dGluZ3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1LDqWluaXRpYWxpc2VyIGxlcyBwcsOpZsOpcmVuY2VzIGRcXFxcJ2FmZmljaGFnZSdcXG4gICAgfSxcXG4gICAgZGlzcGxheUhpZGRlbkNvbHVtbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIaWRkZW4gY29sdW1ucyAoY2xpY2sgdG8gcmUtZGlzcGxheSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbG9ubmVzIGNhY2jDqWVzIChjbGlxdWVyIHBvdXIgcsOpLWFmZmljaGVyKSdcXG4gICAgfSxcXG4gICAgZGlzcGxheVNldHRpbmdzQ2hhbmdlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc3BsYXkgc2V0dGluZ3MgY2hhbmdlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlIG1vZGlmacOpZXMgISdcXG4gICAgfSxcXG4gICAgZGlzcGxheVNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBzZXR0aW5ncyEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBkYXRhZ3JpZFNhdmVEaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+RG8geW91IHdhbnQgdG8gc2F2ZSB5b3VyIG1vZGlmaWNhdGlvbnM/PC9zcGFuPjxici8+XFxcXG4gICAgICAgICAgICAgICAgPGVtIGNsYXNzPVxcXFxcXFwidGV4dC1tZWRpdW1cXFxcXFxcIj5Zb3VyIHByZWZlcmVuY2VzIChwcmVzZW5jZSwgd2lkdGggYW5kIG9yZGVyIG9mIGNvbHVtbnMuLi4pIHdpbGwgYmUgc2F2ZWQgaW4geW91ciB1c2VyIHByb2ZpbGUuPC9lbT5cXFxcbiAgICAgICAgICAgIDwvZGl2PlxcXFxuICAgICAgICBcXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIlxcXFxuICAgICAgICAgICAgPGRpdj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5Wb3VsZXotdm91cyBzYXV2ZWdhcmRlciB2b3MgbW9kaWZpY2F0aW9ucyA/PC9zcGFuPjxici8+XFxcXG4gICAgICAgICAgICAgICAgPGVtIGNsYXNzPVxcXFxcXFwidGV4dC1tZWRpdW1cXFxcXFxcIj5Wb3MgcHJcXFxcdTAwRTlmXFxcXHUwMEU5cmVuY2VzIGQnYWZmaWNoYWdlIChwclxcXFx1MDBFOXNlbmNlLCBsYXJnZXVyIGV0IG9yZHJlIGRlcyBjb2xvbm5lcy4uLikgc2Vyb250IGVucmVnaXN0clxcXFx1MDBFOWVzIGRhbnMgdm90cmUgcHJvZmlsIHV0aWxpc2F0ZXVyLjwvZW0+XFxcXG4gICAgICAgICAgICA8L2Rpdj5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3NSZXNldENvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVzZXQgYWxsIHlvdXIgZGlzcGxheSBzZXR0aW5ncz8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHLDqWluaXRpYWxpc2VyIHZvcyBwcsOpZsOpcmVuY2VzIGRcXFxcJ2FmZmljaGFnZSA/J1xcbiAgICB9LFxcbiAgICBkaXNwbGF5TW9kZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc3BsYXkgbW9kZTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGFnZSA6J1xcbiAgICB9LFxcbiAgICBkaXNwbGF5TGFwdG9wOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVkaXVtIHNjcmVlbiBzaXplJyxcXG4gICAgICAgICdmci1GUic6ICfDiWNyYW4gZGUgdGFpbGxlIG1veWVubmUnXFxuICAgIH0sXFxuICAgIGRpc3BsYXlEZXNrdG9wOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFyZ2Ugc2NyZWVuIHNpemUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3JhbiBkZSBncmFuZGUgdGFpbGxlJ1xcbiAgICB9LFxcbiAgICB1bmV4cGVjdGVkRXJyb3JDaGVja1VybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VyZWQuIFBsZWFzZSByZXRyeSBhbmQgY2hlY2sgZm9yIHRoZSBVUkwgeW91IHJlcXVlc3RlZCBvciBjb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IuJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZS4gTWVyY2kgZGUgcsOpZXNzYXllciBlbiB2w6lyaWZpYW50IGxcXFxcJ1VSTCBvdSBjb250YWN0ZXogdm90cmUgYWRtaW5pc3RyYXRldXIgc3lzdMOobWUuJ1xcbiAgICB9LFxcbiAgICBzZWVFcnJvckRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWUgZXJyb3IgZGV0YWlscycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZMOpdGFpbHMgZGUgbFxcXFwnZXJyZXVyJ1xcbiAgICB9LFxcbiAgICBzZWNvbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWNvbmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1NlY29uZGUnXFxuICAgIH0sXFxuICAgIG1pbnV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01pbnV0ZScsXFxuICAgICAgICAnZnItRlInOiAnTWludXRlJ1xcbiAgICB9LFxcbiAgICBob3VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG91cicsXFxuICAgICAgICAnZnItRlInOiAnSGV1cmUnXFxuICAgIH0sXFxuICAgIGRheU9mTW9udGg6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEYXkgb2YgbW9udGgnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0pvdXIgZHUgbW9pcydcXG4gICAgfSxcXG4gICAgbW9udGg6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNb250aCcsXFxuICAgICAgICAnZnItRlInOiAnTW9pcydcXG4gICAgfSxcXG4gICAgZGF5T2ZXZWVrOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGF5IG9mIHdlZWsnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0pvdXIgZGUgbGEgc2VtYWluZSdcXG4gICAgfSxcXG4gICAgeWVhcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1llYXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubsOpZSdcXG4gICAgfSxcXG4gICAgaW5wdXRJbnZhbGlkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBpbnB1dCcsXFxuICAgICAgICAnZnItRlInOiAnQ2hhbXAgaW52YWxpZGUnXFxuICAgIH0sXFxuICAgIGltcG9ydERhdGFGcm9tRmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ltcG9ydCBkYXRhIGZyb20gYSBmaWxlJyxcXG4gICAgICAgICdmci1GUic6ICdJbXBvcnRlciBkZXMgZG9ubsOpZXMgZGVwdWlzIHVuIGZpY2hpZXInXFxuICAgIH0sXFxuICAgIHNlbGVjdGVkRmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdGVkIGZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgc8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgZmlsZVR5cGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHR5cGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1R5cGUgZHUgZmljaGllcidcXG4gICAgfSxcXG4gICAgZmllbGRzU2VwYXJhdG9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmllbGRzIHNlcGFyYXRvcicsXFxuICAgICAgICAnZnItRlInOiAnU8OpcGFyYXRldXIgZGUgY29sb25uZXMnXFxuICAgIH0sXFxuICAgIGVuY29kaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW5jb2RpbmcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VuY29kYWdlJ1xcbiAgICB9LFxcbiAgICBxdW90ZUNoYXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdRdW90ZSBjaGFyYWN0ZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhcmFjdMOocmUgZGUgZ3VpbGxlbWV0J1xcbiAgICB9LFxcbiAgICBoZWFkZXJPbkZpcnN0Um93OiB7XFxuICAgICAgICAnZW4tVVMnOiAnSGVhZGVycyBvbiBmaXJzdCByb3cnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VudMOqdGVzIHN1ciBsYSBwcmVtacOocmUgbGlnbmUnXFxuICAgIH0sXFxuICAgIG92ZXJ3cml0ZUV4aXN0aW5nRGF0YToge1xcbiAgICAgICAgJ2VuLVVTJzogJ092ZXJ3cml0ZSBleGlzdGluZyBkYXRhJyxcXG4gICAgICAgICdmci1GUic6ICfDiWNyYXNlciBsZXMgZG9ubsOpZXMgZXhpc3RhbnRlcydcXG4gICAgfSxcXG4gICAgZHJvcFpvbmVUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Ryb3AgZmlsZXMgaGVyZSB0byB1cGxvYWQgdGhlbScsXFxuICAgICAgICAnZnItRlInOiAnRMOpcG9zZXIgbGVzIGZpY2hpZXJzIMOgIGVudm95ZXIgaWNpJ1xcbiAgICB9LFxcbiAgICBkcm9wWm9uZVN1YnRpdGxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnKG9yIGNsaWNrKScsXFxuICAgICAgICAnZnItRlInOiAnKG91IGNsaXF1ZXIpJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkRmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgZmlsZShzKScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllcihzKSBpbnZhbGlkZShzKSdcXG4gICAgfSxcXG4gICAgY29udGVudFR5cGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBY2NlcHRlZCBDb250ZW50LXR5cGVzOicsXFxuICAgICAgICAnZnItRlInOiAnQ29udGVudC10eXBlcyBhY2NlcHTDqXMgOidcXG4gICAgfSxcXG4gICAgbWF4U2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01heCBzaXplOicsXFxuICAgICAgICAnZnItRlInOiAnVGFpbGxlIG1heCA6J1xcbiAgICB9LFxcbiAgICB1bmtub3duRm9ybWF0OiB7XFxuICAgICAgICAnZW4tVVMnOiAndW5rbm93biBmb3JtYXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3Vua25vd24gc2l6ZSdcXG4gICAgfSxcXG4gICAgYWRkVGV4dFByb3BlcnR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgdGV4dCBwcm9wZXJ0eScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgdmFsZXVyIGRlIHR5cGUgdGV4dGUnXFxuICAgIH0sXFxuICAgIGFkZEZpbGVQcm9wZXJ0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBhIGZpbGUgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gZmljaGllcidcXG4gICAgfSxcXG4gICAgc2VsZWN0RmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhIGZpbGU6JyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuIGZpY2hpZXIgOidcXG4gICAgfSxcXG4gICAgZG93bmxvYWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEb3dubG9hZCcsXFxuICAgICAgICAnZnItRlInOiAnVMOpbMOpY2hhcmdlcidcXG4gICAgfSxcXG4gICAgdXBsb2FkRmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwbG9hZCBhIGZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Vudm95ZXIgdW4gZmljaGllcidcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWRMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdGVkIGxhbmd1YWdlJyxcXG4gICAgICAgICdmci1GUic6ICdMYW5ndWUgc8OpbGVjdGlvbm7DqWUnXFxuICAgIH0sXFxuICAgIGFkZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIGxhbmd1ZSdcXG4gICAgfSxcXG4gICAgcmVtb3ZlTGFuZ3VhZ2VTZWxlY3RlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbW92ZSBzZWxlY3RlZCBsYW5ndWFnZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIGxhIGxhbmd1ZSBzw6lsZWN0aW9ubsOpZSdcXG4gICAgfSxcXG4gICAgY2xvc2VMYW5ndWFnZVNlbGVjdG9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2xvc2UgbGFuZ3VhZ2Ugc2VsZWN0b3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Zlcm1lciBsYSBzw6lsZWN0aW9uIGRlIGxhbmd1ZSdcXG4gICAgfSxcXG4gICAgc2VhcmNoTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWFyY2ggbGFuZ3VhZ2UuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hlcmNoZXIgdW5lIGxhbmd1ZSdcXG4gICAgfSxcXG4gICAgcGFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhZ2UnXFxuICAgIH0sXFxuICAgIG9mOiB7XFxuICAgICAgICAnZW4tVVMnOiAnb2YnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3N1cidcXG4gICAgfSxcXG4gICAgcGRmTG9hZGluZ0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUERGIGxvYWRpbmcgZXJyb3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VycmV1ciBkZSBjaGFyZ2VtZW50IGR1IFBERidcXG4gICAgfSxcXG4gICAgbm9GaWxlQ2hvc2VuOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gZmlsZSBjaG9zZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIGZpY2hpZXIgY2hvaXNpJ1xcbiAgICB9LFxcbiAgICBmaWxlVXBsb2FkZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHVwbG9hZGVkJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVyIHTDqWzDqWNoYXJnw6knXFxuICAgIH0sXFxuICAgIHByZXZpZXdMb3dlckNhc2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdwcmV2aWV3JyxcXG4gICAgICAgICdmci1GUic6ICdhcGVyw6d1J1xcbiAgICB9LFxcbiAgICBmaWxlVXBsb2FkRmFpbGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmlsZSB1cGxvYWQgZmFpbGVkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWNoZWMgZHUgdMOpbMOpY2hhcmdlbWVudCBkdSBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICByZXN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnUmVkw6ltYXJyZXInXFxuICAgIH0sXFxuICAgIHNob3dTdGF0dXNDb250cm9sczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgc3RhdHVzIGNvbnRyb2xzJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsZXMgY29udHLDtGxlcyBkZSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIGhpZGVTdGF0dXNDb250cm9sczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGUgc3RhdHVzIGNvbnRyb2xzJyxcXG4gICAgICAgICdmci1GUic6ICdDYWNoZXIgbGVzIGNvbnRyw7RsZXMgZGUgc3RhdHV0J1xcbiAgICB9LFxcbiAgICByZWZyZXNoU3RhdHVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVmcmVzaCBzdGF0dXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhZnJhw65jaGlyIHN0YXR1dCdcXG4gICAgfSxcXG4gICAgcnVubmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1bm5pbmcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VuIGNvdXJzJ1xcbiAgICB9LFxcbiAgICBzdG9wcGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RvcHBlZCcsXFxuICAgICAgICAnZnItRlInOiAnQXJyw6p0w6knXFxuICAgIH0sXFxuICAgIHNvcnRCeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NvcnQgYnknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1RyaWVyIHBhcidcXG4gICAgfSxcXG4gICAgY3JlYXRlQ2hpbGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDcmVhdGUgY2hpbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6llciBlbmZhbnQnXFxuICAgIH0sXFxuICAgIHZhbGlkYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmFsaWRhdGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGlkZXInXFxuICAgIH0sXFxuICAgIHRyZWVVcGRhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVcGRhdGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGlkZXInXFxuICAgIH0sXFxuICAgIGlkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEJ1xcbiAgICB9LFxcbiAgICBwcm9wZXJ0aWVzS2V5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvcGVydGllcyBrZXkocyknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nsw6kocykgZGUgcHJvcHJpw6l0w6lzJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkVW5pcXVlTm9kZU5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb2RlIG5hbWUgbXVzdCBiZSB1bmlxdWUgYW1vbmcgZGlyZWN0IGNoaWxkcmVuJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gZHUgbm9ldWQgZG9pdCDDqnRyZSB1bmlxdWUgcGFybWkgbGVzIGVuZmFudHMgZGlyZWN0cydcXG4gICAgfSxcXG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGRpdGlvbmFsIHByb3BlcnRpZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb3ByacOpdMOpcyBhZGRpdGlvbm5lbGxlcydcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWROb2RlRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdGVkIG5vZGUgZGV0YWlscycsXFxuICAgICAgICAnZnItRlInOiAnRMOpdGFpbHMgZHUgbm9ldWQgc8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgZXhwYW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwYW5kJyxcXG4gICAgICAgICdmci1GUic6ICdEw6lwbGllcidcXG4gICAgfSxcXG4gICAgY29sbGFwc2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb2xsYXBzZScsXFxuICAgICAgICAnZnItRlInOiAnUGxpZXInXFxuICAgIH0sXFxuICAgIHVzZXJEZXRhaWxzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdJbmZvcm1hdGlvbnMnXFxuICAgIH0sXFxuICAgIHZpZXdCeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcgYnknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIHBhcidcXG4gICAgfSxcXG4gICAgc2VsZWN0VXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhIHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdW4gdXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIHVzZXJFbWFpbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VzZXIgZW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsIGRlIGxcXFxcJ3V0aWxzYXRldXInXFxuICAgIH0sXFxuICAgIHNlbGVjdFZhbHVlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgdmFsdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdW5lIHZhbGV1cidcXG4gICAgfSxcXG4gICAgYWRkRmlsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgZmlsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgZGVzIGZpY2hpZXJzJ1xcbiAgICB9LFxcbiAgICBjb25maXJtVXNlcnNEaXNhc3NvY2lhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGlzYXNzb2NpYXRlIHRoZSBzZWxlY3RlZCB1c2VyKHMpIGZyb20gdGhlIGN1cnJlbnQgaW5zdGFuY2U/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBkw6lzYXNzb2NpZXIgbFxcXFwnKGxlcykgdXRpbGlzYXRldXIocykgc8OpbGVjdGlvbm7DqShzKSBkZSBsXFxcXCdpbnN0YW5jZSA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtVXNlcnNEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCB1c2VyKHMpPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGxcXFxcJyhsZXMpIHV0aWxpc2F0ZXVyKHMpIHPDqWxlY3Rpb25uw6kocykgPydcXG4gICAgfSxcXG4gICAgY29uZmlybVBlcm1zZXRzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgcGVybWlzc2lvbiBzZXQocyk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbGUocykgZ3JvdXBlKHMpIGRlIHBlcm1pc3Npb25zIHPDqWxlY3Rpb25uw6kocykgPydcXG4gICAgfSxcXG4gICAgcGVybXNldHNEZWxldGVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGVybWlzc2lvbiBzZXQocykgZGVsZXRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dyb3VwZShzKSBkZSBwZXJtaXNzaW9ucyBzdXBwcmltw6lzICEnXFxuICAgIH0sXFxuICAgIHBlcm1zZXRzRGVsZXRlRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3Blcm1pc3Npb24gc2V0KHMpIG5vdCBkZWxldGVkJyxcXG4gICAgICAgICdmci1GUic6ICdncm91cGUocykgZGUgcGVybWlzc2lvbnMgbm9uIHN1cHByaW3DqShzKSdcXG4gICAgfSxcXG4gICAgdXNlcnNEZWxldGVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlcihzKSBkZWxldGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIocykgc3VwcHJpbcOpKHMpICEnXFxuICAgIH0sXFxuICAgIHVzZXJzRGVsZXRlRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3VzZXIocykgbm90IGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3V0aWxpc2F0ZXVyKHMpIG5vbiBzdXBwcmltw6kocyknXFxuICAgIH0sXFxuICAgIHVzZXJzRGlzYXNzb2NpYXRlU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VzZXIocykgZGlzYXNzb2NpYXRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyKHMpIGTDqXNhc3NvY2nDqShzKSAhJ1xcbiAgICB9LFxcbiAgICB1c2Vyc0Rpc2Fzc29jaWF0ZUZhaWx1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICd1c2VyKHMpIG5vdCBkaXNhc3NvY2lhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICd1dGlsaXNhdGV1cihzKSBub24gZMOpc2Fzc29jacOpKHMpJ1xcbiAgICB9LFxcbiAgICByZWNvcmRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVjb3JkcycsXFxuICAgICAgICAnZnItRlInOiAnRW50csOpZXMnXFxuICAgIH0sXFxuICAgIG5vQXZhaWxhYmxlVGFibGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gdGFibGVzIGF2YWlsYWJsZS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSB0YWJsZSBkaXNwb25pYmxlLidcXG4gICAgfSxcXG4gICAgc2VsZWN0VGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYSB0YWJsZScsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1bmUgdGFibGUnXFxuICAgIH0sXFxuICAgIGRlbGV0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIHRoaXMgdGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZXR0ZSB0YWJsZSdcXG4gICAgfSxcXG4gICAgZGVsZXRlQWxsUmVjb3Jkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RlbGV0ZSBhbGwgcmVjb3JkcycsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIHRvdXQgbGUgY29udGVudSdcXG4gICAgfSxcXG4gICAgZXhwb3J0VG9FeGNlbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0V4cG9ydCB0byBFeGNlbCcsXFxuICAgICAgICAnZnItRlInOiAnRXhwb3J0ZXIgdmVycyBFeGNlbCdcXG4gICAgfSxcXG4gICAgaW1wb3J0RGF0YToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ltcG9ydCBkYXRhJyxcXG4gICAgICAgICdmci1GUic6ICdJbXBvcnRlciBkZXMgZG9ubsOpZXMnXFxuICAgIH0sXFxuICAgIGFkZFJlY29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBhIG5ldyByZWNvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIGVudHLDqWUnXFxuICAgIH0sXFxuICAgIHRhYmxlTmFtZUludmFsaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYWJsZSBuYW1lIGlzIGVtcHR5IG9yIGluY29ycmVjdCcsXFxuICAgICAgICAnZnItRlInOiAnTGUgbm9tIGRlIGxhIHRhYmxlIGVzdCB2aWRlIG91IGludmFsaWRlJ1xcbiAgICB9LFxcbiAgICB0YWJsZUZpZWxkc0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gdGFibGUgZmllbGRzIGFkZGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBjaGFtcCByZW5zZWlnbsOpJ1xcbiAgICB9LFxcbiAgICB0YWJsZUtleXNFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGtleSBmb3VuZCBmb3IgdGhlIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUgY2zDqSByZW5zZWlnbsOpZSdcXG4gICAgfSxcXG4gICAgdGFibGVJbnZhbGlkVmFsdWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCB2YWx1ZShzKSBzdXBwbGllZCBmb3IgdGhlIHRhYmxlIHN0cnVjdHVyZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyKHMpIGludmFsaWRlKHMpIGZvdXJuaWUocykgcG91ciBkw6lmaW5pciBsYSBzdHJ1Y3R1cmUgZGUgbGEgdGFibGUnXFxuICAgIH0sXFxuICAgIG5vdGhpbmdUb1NhdmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb3RoaW5nIHRvIHNhdmUgaGVyZSEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JpZW4gw6AgZW5yZWdpc3RyZXIgISdcXG4gICAgfSxcXG4gICAgY29uZmlybVJlY29yZERlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByZWNvcmQ/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgY2V0dGUgZW50csOpZSA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtQWxsUmVjb3Jkc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgYWxsIHJlY29yZHMgaW4gdGhpcyB0YWJsZT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB0b3V0ZXMgbGVzIGRvbm7DqWVzIGRlIGNldHRlIHRhYmxlID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1EZWxldGVUYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyB0YWJsZT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXR0ZSB0YWJsZSA/J1xcbiAgICB9LFxcbiAgICBkb3dubG9hZFdpbGxTdGFydDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBkb3dsb2FkIHdpbGwgc3RhcnQgYXV0b21hdGljYWxseScsXFxuICAgICAgICAnZnItRlInOiAnTGUgdMOpbMOpY2hhcmdlbWVudCB2YSBkw6ltYXJyZXIgYXV0b21hdGlxdWVtZW50J1xcbiAgICB9LFxcbiAgICByZWNvcmRzUHJvY2Vzc2VkOiB7XFxuICAgICAgICAnZW4tVVMnOiAne25iUmVjb3Jkc30gcm93KHMpIHByb2Nlc3NlZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3tuYlJlY29yZHN9IGVucmVnaXN0cmVtZW50KHMpIHRyYWl0w6kocykuJ1xcbiAgICB9LFxcbiAgICBvazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ09LJyxcXG4gICAgICAgICdmci1GUic6ICdPSydcXG4gICAgfSxcXG4gICAgY29uZmlybUNoYW5nZVdpdGhvdXRTYXZpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSB2aWV3IGFuZCBsb29zZSB0aGUgY2hhbmdlcz8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIGNvbnRlbnUgYSDDqXTDqSBjaGFuZ8OpLiDDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBjaGFuZ2VyIGRlIHZ1ZSBldCBwZXJkcmUgY2VzIGNoYW5nZW1lbnRzID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1EZWxldGVJdGVtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGl0ZW0/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgY2V0IMOpbMOpbWVudCA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtUmVsb2FkV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZWxvYWQgdGhpcyBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnTGUgY29udGVudSBhIMOpdMOpIGNoYW5nw6kuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHJlY2hhcmdlciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1SZXByb2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVwcm9jZXNzIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHJlbGFuY2VyIGNldCDDqWzDqW1lbnQgPydcXG4gICAgfSxcXG4gICAgY29uZmlybVNhdmVBbmRSZXByb2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3UgaGF2ZSBtYWRlIHNvbWUgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHNhdmUgQU5EIHJlcHJvY2VzcyB0aGlzIGl0ZW0/JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBjb250ZW51IGEgw6l0w6kgY2hhbmfDqS4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc2F1dmVnYXJkZXIgRVQgcmVsYW5jZXIgY2V0IMOpbMOpbWVudCA/J1xcbiAgICB9LFxcbiAgICBpdGVtUmVwcm9jZXNzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnQgcmVsYW5jw6knXFxuICAgIH0sXFxuICAgIGl0ZW1SZXByb2Nlc3NGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3QgcmVwcm9jZXNzZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBub24gcmVsYW5jw6knXFxuICAgIH0sXFxuICAgIGl0ZW1SZWxvYWRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCByZWNoYXJnw6knXFxuICAgIH0sXFxuICAgIGl0ZW1SZWxvYWRGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3QgcmVsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBub24gcmVjaGFyZ8OpJ1xcbiAgICB9LFxcbiAgICBpdGVtU2F2ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIHNhdmVkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnQgZW5yZWdpc3Ryw6knXFxuICAgIH0sXFxuICAgIGl0ZW1TYXZlRmFpbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gbm90IHNhdmVkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnQgbm9uIGVucmVnaXN0csOpJ1xcbiAgICB9LFxcbiAgICBpdGVtRGVsZXRlRmFpbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gbm90IGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBub24gc3VwcHJpbcOpJ1xcbiAgICB9LFxcbiAgICByZXNldENoYW5nZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBjaGFuZ2VzJyxcXG4gICAgICAgICdmci1GUic6ICdBbm51bGVyIGxlcyBjaGFuZ2VtZW50cydcXG4gICAgfSxcXG4gICAgZXJyb3JPY2N1cmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQW4gZXJyb3Igb2NjdXJlZCcsXFxuICAgICAgICAnZnItRlInOiAnVW5lIGVycmV1ciBlc3Qgc3VydmVudWUnXFxuICAgIH0sXFxuICAgIHdvcmtJdGVtQ29uZmlybVRleHRTdGFydDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0bycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXInXFxuICAgIH0sXFxuICAgIHdvcmtJdGVtQ29uZmlybVRleHRFbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd0aGlzIHdvcmsgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2NldHRlIHTDomNoZSA/J1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1UaXRsZUxhbmd1YWdlU3NldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFuZ3VhZ2Ugc2V0dGluZ3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmUgZGVzIGxhbmd1ZXMnXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybVRpdGxlX2FkZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgZnJhbWUnXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybVRpdGxlX2VkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVcGRhdGUgZnJhbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01pc2Ugw6Agam91ciBkZSBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVGb3JtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJhbWUgaW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZyYW1lIGVuJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1IZWxwZXJFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpZWxkIG11c3QgYmUgcHJvdmlkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIGNoYW1wIGRvaXQgw6p0cmUgcmVuc2VpZ27DqSdcXG4gICAgfSxcXG4gICAgaWRVbmlxdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3VyIElEIG11c3QgYmUgdW5pcXVlJyxcXG4gICAgICAgICdmci1GUic6ICdWb3RyZSBJRCBkb2l0IMOqdHJlIHVuaXF1ZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtSGVscGVyTGFuZ3VhZ2VTZWxlY3RlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBjYW4gc2VsZWN0IHRoZSBsYW5ndWFnZSB0byBlZGl0IGFuZCByZW1vdmUgdGhlIG9uZSB5b3UgZG9uXFxcXCd0IHdhbnQgYW55bW9yZSBoZXJlLiBZb3UgbXVzdCBmaWxsIGF0IGxlYXN0IHRoZSBFTiBsYW5ndWFnZSB0byBiZSBhYmxlIHRvIHNhdmUgeW91ciBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBwb3V2ZXogc8OpbGVjdGlvbm5lciBsYSBsYW5ndWUgw6AgZWRpdGVyIGV0IHN1cHByaW1lciBjZWxsZXMgZG9udCB2b3VzIG5cXFxcJ2F2ZXogcGx1cyBiZXNvaW4gaWNpLiBWb3VzIGRldmV6IHJlbnNlaWduZXIgYXUgbW9pbnMgbGEgbGFuZ3VlIEVOIHBvdXIgcG91dm9pciBzYXV2ZWdhcmRlciB1bmUgZnJhbWUnXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybUdyaWRMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhbmd1YWdlIGNob2ljZSAoSVNPIGNvZGUpJyxcXG4gICAgICAgICdmci1GUic6ICdDaG9peCBkZSBsYSBsYW5ndWUgKGNvZGUgSVNPKSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtR3JpZExhbmd1YWdlc1NlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFuZ3VhZ2VzIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdMYW5ndWVzIHPDqWxlY3Rpb25uw6llcydcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyRGF0YUxhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRU4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZSJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJUZXh0RW1wdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBmcmFtZSB0byBkaXNwbGF5JyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUgZnJhbWUgw6AgYWZmaWNoZXInXFxuICAgIH0sXFxuICAgIGZyYW1lczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZyYW1lcycsXFxuICAgICAgICAnZnItRlInOiAnRnJhbWVzJ1xcbiAgICB9LFxcbiAgICB1cmw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVUkwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VSTCdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uRWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VkaXQgZnJhbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgbGEgZnJhbWUnXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlckJ1dHRvbkRlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RlbGV0ZSBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJCdXR0b25QcmV2aWV3OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJldmlldyBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnQXBlcsOndSBkZSBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgcmVmcmVzaEZyYW1lczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZnJlc2ggZnJhbWVzJyxcXG4gICAgICAgICdmci1GUic6ICdBY3R1YWxpc2VyIGxlcyBmcmFtZXMnXFxuICAgIH0sXFxuICAgIGFkZEZyYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgY2FuY2VsRnJhbWVFZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2FuY2VsIGZyYW1lIGVkaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXIgbFxcXFwnw6lkaXRpb24gZGUgbGEgZnJhbWUnXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlckJ1dHRvbkJhY2s6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXR1cm4gdG8gSG9tZSBwYWdlcyBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkZSBjb25maWd1cmF0aW9uIGRlcyBwYWdlcyBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBkYXRhTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFTicsXFxuICAgICAgICAnZnItRlInOiAnRlInXFxuICAgIH0sXFxuICAgIGZyYW1lcHJldmlld1RpdGxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJhbWUgcHJldmlldycsXFxuICAgICAgICAnZnItRlInOiAnQXBlcsOndSBkZSBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVwcmV2aWV3VGl0bGVTZXR0aW5nczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCB5b3VyIGxhbmd1YWdlJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9uIGRlIGxhIGxhbmd1ZSdcXG4gICAgfSxcXG4gICAgdW5pcXVlSWRSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lEIG11c3QgYmUgdW5pcXVlJyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXCdJRCBkb2l0IMOqdHJlIHVuaXF1ZSdcXG4gICAgfSxcXG4gICAgaHR0cHNVcmxSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ011c3QgYmUgYSB2YWxpZCBIVFRQUyBVUkwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VSTCBIVFRQUyB2YWxpZGUgcmVxdWlzZSdcXG4gICAgfSxcXG4gICAgbm9Nb2R1bGVTZWxlY3RlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIG1vZHVsZSBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gbW9kdWxlIHPDqWxlY3Rpb25uw6knXFxuICAgIH0sXFxuICAgIHNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uw6knXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lSGVhZGVyTGF5b3V0VGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdDb25maWd1cmF0aW9uIGRlIGxhIHByw6lzZW50YXRpb24nXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc0F2YWlsYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vZHVsZXMgYXZhaWxhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIGRpc3BvbmlibGVzJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZU1vZHVsZXNTZWxlY3RlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vZHVsZXMgc2VsZWN0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vZHVsZXMgc8OpbGVjdGlvbm7DqXMnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lQnV0dG9uQ29uZmlndXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29uZmlndXJlIGxheW91dCcsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqXRyYWdlIGRlIGxcXFxcJ2FmZmljaGFnZSdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVCdXR0b25EZWZhdWx0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzdG9yZSBkZWZhdWx0JyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOodHJlIHBhciBkw6lmYXV0J1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvblNlbGVjdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBtb2R1bGVzJyxcXG4gICAgICAgICdmci1GUic6ICdDaG9peCBkZXMgbW9kdWxlcydcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVCdXR0b25CYWNrOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQmFjayB0byBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lU2VsZWN0ZWRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkaWRuXFxcXCd0IHNlbGVjdCBhbnkgbW9kdWxlcycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBuXFxcXCdhdmV6IHPDqWxlY3Rpb25uw6kgYXVjdW4gbW9kdWxlJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZU1vZHVsZXNFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIG1vZHVsZXMgYXZhaWxhYmxlIGluIHRoaXMgY29uZmlndXJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gbW9kdWxlIGRpc3BvbmlibGUgZGFucyBjZXR0ZSBjb25maWd1cmF0aW9uJ1xcbiAgICB9LFxcbiAgICBob21lUGFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lTmF2aWdhdGVEZWZhdWx0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29uZmlndXJlIEhvbWUgcGFnZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbmZpZ3VyYXRpb24gZGVzIHBhZ2VzIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVOYXZpZ2F0ZU93bjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0N1c3RvbWl6ZSB0aGlzIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJlciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVTdGF0dXNFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhbnkgbW9kdWxlcyB0byBkaXNwbGF5JyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYXVjdW4gbW9kdWxlIMOgIGFmZmljaGVyJ1xcbiAgICB9LFxcbiAgICBob21lU2VsZWN0Tm9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCB5b3VyIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnQ2hvaXNpc3NleiB2b3RyZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NIZWFkZXJBdmFpbGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNb2R1bGVzIGF2YWlsYWJsZScsXFxuICAgICAgICAnZnItRlInOiAnTW9kdWxlcyBkaXNwb25pYmxlcydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0hlYWRlclNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnTW9kdWxlcyBzw6lsZWN0aW9ubsOpcydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0hlYWRlckNvbmZpZ3VyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmVkIEhvbWUgcGFnZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhZ2VzIGRcXFxcJ2FjY3VlaWwgY29uZmlndXJhYmxlcydcXG4gICAgfSxcXG4gICAgdHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1R5cGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1R5cGUnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NFZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCB0aGlzIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnTW9kaWZpZXIgY2V0dGUgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzRHVwbGljYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHVwbGljYXRlIHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdEdXBsaXF1ZXIgY2V0dGUgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgY2V0dGUgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzQ29uZmlndXJlbGF5b3V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29uZmlndXJlIGxheW91dCcsXFxuICAgICAgICAnZnItRlInOiAnUGVyc29uYWxpc2F0aW9uIGRlIGxcXFxcJ2FmZmljaGFnZSdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc1NhdmVzZWxlY3Rpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTYXZlIHlvdXIgc2VsZWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTYXV2ZWdhcmRlciB2b3RyZSBzw6lsZWN0aW9uJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzQWRkRGVmYXVsdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0J1dHRvbkJhY2s6IHtcXG4gICAgICAgICdlbi1VUyc6ICdCYWNrIHRvIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUmV0b3VyIMOgIGxhIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0ZyYW1lc3BhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZXMgbWFuYWdlcicsXFxuICAgICAgICAnZnItRlInOiAnR2VzdGlvbm5haXJlIGRlcyBGcmFtZXMnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NUZXh0RW1wdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGVyZSBpcyBubyBtb2R1bGVzIGF2YWlsYWJsZSBpbiB5b3VyIGN1cnJlbnQgY29uZmlndXJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnSWwgblxcXFwneSBhIGF1Y3VuIG1vZHVsZXMgZGlzcG9uaWJsZXMgcG91ciBjZXR0ZSBjb25maWd1cmF0aW9uJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzU2VsZWN0RGVmYXVsdHZhbHVlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGhvbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2lzaXNzZXogbGEgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzTW9kYWxEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgYWJvdXQgZGVsZXRpbmcgdGhpcyBzZXR0aW5nID8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXR0ZSBjb25maWd1cmF0aW9uID8nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NFcnJvckluVXNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIG5hbWUgYHtuYW1lfWBpcyBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyIGNvbmZpZ3VyYXRpb24sIGNob29zZSBhbm90aGVyIG9uZSBwbGVhc2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG5vbSBge25hbWV9YCBlc3QgZMOpasOgIHV0aWxpc8OpIHBvdXIgdW5lIGF1dHJlIGNvbmZpZ3VyYXRpb24sIHZldWlsbGV6IGVuIGNob2lzaXIgdW4gYXV0cmUnXFxuICAgIH0sXFxuICAgIGFwcExvYWRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FwcCBsb2FkZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdBcHAgbGFuY8OpZSAhJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkUGFzc3dvcmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3VyIHBhc3N3b3JkIG11c3QgYmUgOCB0byAzMiBjaGFyYWN0ZXJzIGxvbmcgYW5kIGNvbnRhaW5zIGF0IGxlYXN0IDEgdXBwZXIvbG93ZXIgY2FzZSBsZXR0ZXIgYW5kIDEgbnVtYmVyJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtb3QgZGUgcGFzc2UgZG9pdCBjb250ZW5pciBlbnRyZSA4IGV0IDMyIGNhcmFjdMOocmVzIGV0IGF1IG1vaW5zIDEgbWFqdXNjdWxlL21pbnVzY3VsZSBldCAxIGNoaWZmcmUnXFxuICAgIH0sXFxuICAgIGNhcmRUZW1wbGF0ZUZ1bGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGFyZWEgY2Fubm90IGNvbnRhaW4gbW9yZSBpdGVtcycsXFxuICAgICAgICAnZnItRlInOiAnQ2V0IHpvbmUgbmUgcGV1dCBwYXMgY29udGVuaXIgcGx1cyBkXFxcXCfDqWzDqW1lbnRzJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkQ29sb3JDb2RlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29sb3IgY29kZSBpcyBpbnZhbGlkJyxcXG4gICAgICAgICdmci1GUic6ICdDb2RlIGNvdWxldXIgaW52YWxpZGUnXFxuICAgIH0sXFxuICAgIG1hbmRhdG9yeVZhbHVlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01hbmRhdG9yeSB2YWx1ZShzKTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGV1cihzKSBvYmxpZ2F0b2lyZShzKSA6J1xcbiAgICB9LFxcbiAgICBwYXNzd29yZFVwZGF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQYXNzd29yZCB1cGRhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNb3QgZGUgcGFzc2UgbWlzIMOgIGpvdXIgISdcXG4gICAgfSxcXG4gICAgZGV0YWlsc1VwZGF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZXRhaWxzIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscyBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBzZXR0aW5nc1VwZGF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXR0aW5ncyB1cGRhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZXMgbWlzIMOgIGpvdXIgISdcXG4gICAgfSxcXG4gICAgYXZhdGFyVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F2YXRhciB1cGRhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnQXZhdGFyIG1pcyDDoCBqb3VyICEnXFxuICAgIH0sXFxuICAgIHVzZXJBc3NvY2lhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBzdWNjZXNzZnVsbHkgYXNzb2NpYXRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyIGFzc29jacOpIGF2ZWMgc3VjY8OocyAhJ1xcbiAgICB9LFxcbiAgICB1c2VyQXNzb2NpYXRlUmVzZW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwgc2VudCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgZW52b3nDqSAhJ1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYXNzb2NpYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VzZXIgZGlzYXNzb2NpYXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIgZMOpc2Fzc29jacOpJ1xcbiAgICB9LFxcbiAgICBtZXNzYWdlRGVsZXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lc3NhZ2UocykgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVzc2FnZShzKSBzdXBwcmltw6lzJ1xcbiAgICB9LFxcbiAgICBtZXNzYWdlUmVwcm9jZXNzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZW50IG1lc3NhZ2UocykgZm9yIHJlcHJvY2Vzc2luZycsXFxuICAgICAgICAnZnItRlInOiAnTWVzc2FnZShzKSDDoCByZWxhbmNlciBlbnZvecOpcydcXG4gICAgfSxcXG4gICAgdXNlckFscmVhZHlFeGlzdHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgdXNlciB5b3Ugd2FudCB0byBhc3NvY2lhdGUgdG8gdGhpcyBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgc3lzdGVtIChhbmQgbWF5YmUgYWxyZWFkeSBhc3NvY2lhdGVkIHRvIG90aGVyIGluc3RhbmNlcykuJyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXCd1dGlsaXNhdGV1ciBxdWUgdm91cyB2b3VsZXogYXNzb2NpZXIgc3VyIGNldHRlIGluc3RhbmNlIGV4aXN0ZSBkw6lqw6Agc3VyIGxlIHN5c3TDqG1lLiBJbCBlc3QgcGV1dCDDqnRyZSDDqWdhbGVtZW50IGTDqWrDoCBhc3NvY2nDqSDDoCBkXFxcXCdhdXRyZXMgaW5zdGFuY2VzLidcXG4gICAgfSxcXG4gICAgdW5leHBlY3RlZEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkLiBQbGVhc2UgdHJ5IGFnYWluLicsXFxuICAgICAgICAnZnItRlInOiAnVW5lIGVycmV1ciBlc3Qgc3VydmVudWUuIE1lcmNpIGRlIHLDqWVzc2F5ZXIuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb25VbmF2YWlsYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZ2lzdHJhdGlvbiBpcyBub3QgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnTFxcXFzigJllbnJlZ2lzdHJlbWVudCBuXFxcXCdlc3QgcGFzIGRpc3BvbmlibGUuJ1xcbiAgICB9LFxcbiAgICBmb3Jnb3RQYXNzd29yZFRpdGxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZXQgcGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1LDqWluaXRpYWxpc2VyIG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgZm9yZ290UGFzc3dvcmRNZXNzYWdlU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dlXFxcXCd2ZSBzZW50IHlvdSBhbiBlbWFpbC4gQ2xpY2sgdGhlIGxpbmsgaW4gdGhlIGVtYWlsIHRvIHJlc2V0IHlvdXIgcGFzc3dvcmQuJyxcXG4gICAgICAgICdmci1GUic6ICdOb3VzIHZvdXMgYXZvbnMgZW52b3nDqSB1biBlbWFpbC4gQ2xpcXVleiBzdXIgbGUgbGllbiBkYW5zIGxcXFxcJ2VtYWlsIHBvdXIgcsOpaW5pdGlhbGlzZXIgdm90cmUgbW90IGRlIHBhc3NlLidcXG4gICAgfSxcXG4gICAgcnVubmluZ0pvYnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSdW5uaW5nIGpvYnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1TDomNoZXMgZW4gY291cnMnXFxuICAgIH0sXFxuICAgIG5vUnVubmluZ0pvYjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJ1bm5pbmcgam9iJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUgdMOiY2hlIGVuIGNvdXJzJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ByaW9yaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdQcmlvcml0w6knXFxuICAgIH0sXFxuICAgIGNyZWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDcmVhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpw6kgbGUnXFxuICAgIH0sXFxuICAgIGxhc3RTdGF0dXNNb2RpZmljYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IHN0YXR1cyBtb2RpZmljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlcm5pw6hyZSBtb2RpZmljYXRpb24gZHUgc3RhdHV0J1xcbiAgICB9LFxcbiAgICBzdGFja3RyYWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RhY2t0cmFjZScsXFxuICAgICAgICAnZnItRlInOiAnU3RhY2t0cmFjZSdcXG4gICAgfSxcXG4gICAgZmlsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllcnMnXFxuICAgIH0sXFxuICAgIHZpZXdMYXN0TWVzc2FnZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IGxhc3QgbWVzc2FnZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGVzIGRlcm5pZXJzIG1lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICB2aWV3U3RhY2t0cmFjZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcgc3RhY2t0cmFjZScsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsYSBzdGFja3RyYWNlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eUhpZ2g6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIaWdoJyxcXG4gICAgICAgICdmci1GUic6ICdIYXV0ZSdcXG4gICAgfSxcXG4gICAgcHJpb3JpdHlNZWRpdW06IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZWRpdW0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01veWVubmUnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5TG93OiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG93JyxcXG4gICAgICAgICdmci1GUic6ICdCYXNzZSdcXG4gICAgfSxcXG4gICAgcHJpb3JpdHlWZXJ5TG93OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmVyeSBsb3cnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Ryw6hzIGJhc3NlJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNDb21wbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbXBsZXRlJyxcXG4gICAgICAgICdmci1GUic6ICdUZXJtaW7DqSdcXG4gICAgfSxcXG4gICAgam9iU3RhdHVzUXVldWVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUXVldWVkJyxcXG4gICAgICAgICdmci1GUic6ICdFbiBhdHRlbnRlJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNJbkVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW4gZXJyb3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VycmV1cidcXG4gICAgfSxcXG4gICAgam9iU3RhdHVzUnVubmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1bm5pbmcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VuIGNvdXJzJ1xcbiAgICB9LFxcbiAgICBtYXJrQXNSZWFkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWFyayBhcyByZWFkJyxcXG4gICAgICAgICdmci1GUic6ICdNYXJxdWVyIGNvbW1lIGx1J1xcbiAgICB9LFxcbiAgICBjYW5jZWxKb2JDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNhbmNlbCB0aGlzIGpvYj8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGFubnVsZXIgY2V0dGUgdMOiY2hlID8nXFxuICAgIH0sXFxuICAgIHBhc3N3b3JkRW1wdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2UgZW50ZXIgeW91ciBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcmVtZW1iZXJNZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0tlZXAgbWUgc2lnbmVkIGluJyxcXG4gICAgICAgICdmci1GUic6ICdHYXJkZXIgbWEgY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBmb3Jnb3RQYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZvcmdvdCBwYXNzd29yZD8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vdCBkZSBwYXNzZSBvdWJsacOpID8nXFxuICAgIH0sXFxuICAgIG5vdFJlZ2lzdGVyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb3QgYWxyZWFkeSByZWdpc3RlcmVkPycsXFxuICAgICAgICAnZnItRlInOiAnUGFzIGVuY29yZSBlbnJlZ2lzdHLDqShlKSA/J1xcbiAgICB9LFxcbiAgICBpbnZhbGlkTG9naW5Vcmw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGxvZ2luIFVSTCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VSTCBkZSBsb2dpbiBpbnZhbGlkZSAhJ1xcbiAgICB9LFxcbiAgICB1c2VyQWxyZWFkeVJlZ2lzdGVyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIHVzZXIgaXMgYWxyZWFkeSByZWdpc3RlcmVkJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1ciBkw6lqw6AgZW5yZWdpc3Ryw6knXFxuICAgIH0sXFxuICAgIHVzZXJBbHJlYWR5UmVnaXN0ZXJlZFRlc3RQcm9kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIG9uIHRlc3Qgb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCcsXFxuICAgICAgICAnZnItRlInOiAnIHN1ciB1biBkZXMgZW52aXJvbm5lbWVudHMgKHRlc3Qgb3UgcHJvZHVjdGlvbiknXFxuICAgIH0sXFxuICAgIHNlbGVjdEVudmlyb25tZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGVudmlyb25tZW50JyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIGVudmlyb25uZW1lbnQnXFxuICAgIH0sXFxuICAgIHRlc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUZXN0JyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0J1xcbiAgICB9LFxcbiAgICBwcm9kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvZHVjdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnUHJvZHVjdGlvbidcXG4gICAgfSxcXG4gICAgdGVzdEFuZFByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUZXN0ICYgUHJvZHVjdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnVGVzdCAmIFByb2R1Y3Rpb24nXFxuICAgIH0sXFxuICAgIGVudkVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIHNlbGVjdCB0aGUgcmVnaXN0cmF0aW9uIGVudmlyb25tZW50JyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzw6lsZWN0aW9ubmVyIHN1ciBxdWVsIGVudmlyb25uZW1lbnQgdm91cyBzb3VoYWl0ZXogdm91cyBlbnJlZ2lzdHJlcidcXG4gICAgfSxcXG4gICAgbG9nb3V0TWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xvZ2dpbmcgb3V0Li4uJyxcXG4gICAgICAgICdmci1GUic6ICdEw6ljb25uZXhpb24uLi4nXFxuICAgIH0sXFxuICAgIGxvZ291dFN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3UgaGF2ZSBiZWVuIHNpZ25lZCBvdXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgw6p0ZXMgbWFpbnRlbmFudCBkw6ljb25uZWN0w6knXFxuICAgIH0sXFxuICAgIGxvZ291dEJ1dHRvbkxvZ2luOiB7XFxuICAgICAgICAnZW4tVVMnOiAnR28gdG8gc2lnbiBpbiBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdBbGxlciDDoCBsYSBwYWdlIGRlIGNvbm5leGlvbidcXG4gICAgfSxcXG4gICAgc2VydmVyQ29ubmV4aW9uRmFpbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvdWxkIG5vdCBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIgZm9yIGluc3RhbmNlJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9ibMOobWUgbG9ycyBkZSBsYSBjb25uZXhpb24gc2VydmV1ciBwb3VyIGxcXFxcJ2luc3RhbmNlJ1xcbiAgICB9LFxcbiAgICBzdGFsZUxvZ2luU2Vzc2lvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgbG9naW4gc2Vzc2lvbiBpcyBleHBpcmVkLiBQbGVhc2Ugd2FpdCwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJlZnJlc2hlZCBpbiA1IHNlY29uZHMuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIHNlc3Npb24gZGUgY29ubmV4aW9uIGEgZXhwaXLDqS4gTWVyY2kgZGUgcGF0aWVudGVyLCBjZWxsZS1jaSBzZXJhIGF1dG9tYXRpcXVlbWVudCBhY3R1YWxpc8OpZSBkYW5zIDUgc2Vjb25kZXMuLi4nXFxuICAgIH0sXFxuICAgIHdyb25nVXNlcm5hbWVQYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgdXNlcm5hbWUvcGFzc3dvcmQhJyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UgaW52YWxpZGUgISdcXG4gICAgfSxcXG4gICAgdXNlckRpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyB1c2VyIGFjY291bnQgaXMgZGlzYWJsZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdDZSBjb21wdGUgdXRpbGlzYXRldXIgZXN0IGTDqXNhY3RpdsOpICEnXFxuICAgIH0sXFxuICAgIG1lbWJlcnNoaXBFZXhwaXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgY29tcGFueSBNZW1iZXJzaGlwIGV4cGlyZWQgb24gPHN0cm9uZz57ZXhwaXJ5RGF0ZX08L3N0cm9uZz4uIFBsZWFzZSBhc2sgeW91ciBjb21wYW554oCZcyBDb21tdW5pdHkgYWRtaW5pc3RyYXRvcjxzdHJvbmc+e2FkbWluQ29udGFjdH08L3N0cm9uZz4gdG8gcmVuZXcgdGhlIE1lbWJlcnNoaXAuJyxcXG4gICAgICAgICdmci1GUic6ICdWb3RyZSBhYm9ubmVtZW50IGEgZXhwaXLDqSBsZSA8c3Ryb25nPntleHBpcnlEYXRlfTwvc3Ryb25nPi4gTWVyY2kgZGUgY29udGFjdGVyIHZvdHJlIGFkbWluaXN0cmF0ZXVyPHN0cm9uZz57YWRtaW5Db250YWN0fTwvc3Ryb25nPiBwb3VyIHJlbm91dmVsZXIgbGUgc2VydmljZS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ291bGQgbm90IHVuc3Vic2NyaWJlIHRoaXMgYWNjb3VudCBmcm9tIHRoaXMgaW5zdGFuY2UvY29tbXVuaXR5LicsXFxuICAgICAgICAnZnItRlInOiAnUHJvYmzDqG1lIGxvcnMgZGUgbGEgZMOpc2Fzc29jaWF0aW9uIGRlIGNlIGNvbXB0ZSBzdXIgY2V0dGUgaW5zdGFuY2UvY29tbXVuYXV0w6kuJ1xcbiAgICB9LFxcbiAgICB1bnN1YnNjcmliZUZhaWxlZEIyYXV0aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJyBJbXBvc3NpYmxlIHVuc3Vic2NyaXB0aW9uOiB0aGVyZSBpcyBubyBzdWJzY3JpcHRpb24gb24gaW5zdGFuY2UgKCopLicsXFxuICAgICAgICAnZnItRlInOiAnIEltcG9zc2libGUgZGUgc2UgZMOpc2luc2NyaXJlOiBpbCBuXFxcXCd5IGEgcGFzIGRcXFxcJ2luc2NyaXB0aW9uIHBvc3NpYmxlIHN1ciBsXFxcXCdpbnN0YW5jZSAoKikuJ1xcbiAgICB9LFxcbiAgICB1bnN1YnNjcmliZUZhaWxlZEluc3RhbmNlTm90Rm91bmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgQ291bGQgbm90IGZpbmQgc2VsZWN0ZWQgaW5zdGFuY2UgZGVmaW5pdGlvbi4gUGxlYXNlIHJlbG9hZCB0aGUgcGFnZSBhbmQgcmV0cnkuJyxcXG4gICAgICAgICdmci1GUic6ICcgSW1wb3NzaWJsZSBkZSB0cm91dmVyIGxlcyBwcm9wcmnDqXTDqXMgZGUgbFxcXFwnaW5zdGFuY2Ugc8OpbGVjdGlvbm7DqWUuIE1lcmNpIGRlIHJlY2hhcmdlciBsYSBwYWdlIGV0IGRlIHLDqWVzc2F5ZXIuJ1xcbiAgICB9LFxcbiAgICB1bnN1YnNjcmliZUZhaWxlZE5vQmFzZVVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJyBJbnZhbGlkIGJhc2VVcmwgZm91bmQgZm9yIHRoZSBjdXJyZW50IGluc3RhbmNlLicsXFxuICAgICAgICAnZnItRlInOiAnIFVSTCBkZSBsXFxcXCdpbnN0YW5jZSBzw6lsZWN0aW9ubsOpZSBpbnZhbGlkZS4nXFxuICAgIH0sXFxuICAgIHVzZXJOb3RBc3NvY2lhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIFVzZXIgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluc3RhbmNlLicsXFxuICAgICAgICAnZnItRlInOiAnIFV0aWxpc2F0ZXVyIG5vbiBhc3NvY2nDqSDDoCBjZXR0ZSBpbnN0YW5jZS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VzZXIgc3VjY2Vzc2Z1bGx5IHVuc3Vic2NyaWJlZCBmcm9tIGNvbW11bml0eScsXFxuICAgICAgICAnZnItRlInOiAnTFxcXFwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGTDqXNhc3NvY2nDqSBkZSBjZXR0ZSBpbnN0YW5jZS4nXFxuICAgIH0sXFxuICAgIG5vUGVybWlzc2lvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhY2Nlc3MgdG8gYW55IGluc3RhbmNlISBQbGVhc2UgY2hlY2sgeW91ciBhY2NvdW50IHNldHRpbmdzIHdpdGggeW91ciBhZG1pbmlzdHJhdG9yLicsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBuXFxcXCdhdmV6IGF1Y3VuIGRyb2l0IGVucmVnaXN0csOpLiBNZXJjaSBkZSB2w6lyaWZpZXIgbGUgcGFyYW3DqXRyYWdlIGRlIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ciBhdmVjIHZvdHJlIGFkbWluaXN0cmF0ZXVyLidcXG4gICAgfSxcXG4gICAgbmV3VmVyc2lvbkF2YWlsYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBwb3J0YWwgbmVlZHMgdG8gYmUgdXBkYXRlZCB0byBhIG5ldyB2ZXJzaW9uLiBQbGVhc2Ugc2F2ZSB5b3VyIGN1cnJlbnQgd29yaywgdGhlIHVwZGF0ZSB3aWxsIGJlIGRvbmUgYXV0b21hdGljYWxseSBpbiA5MCBzZWNvbmRzLi4uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBwb3J0YWlsIGRvaXQgw6p0cmUgbWlzIMOgIGpvdXIgdmVycyB1biBub3V2ZWxsZSB2ZXJzaW9uLiBNZXJjaSBkZSBzYXV2ZWdhcmRlciB2b3MgdHJhdmF1eCBlbiBjb3VycywgbGEgbWlzZSDDoCBqb3VyIHNlIGZlcmEgYXV0b21hdGlxdWVtZW50IGRhbnMgOTAgc2Vjb25kZXMuLi4nXFxuICAgIH0sXFxuICAgIHVwZGF0ZU5vdzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZSBub3chJyxcXG4gICAgICAgICdmci1GUic6ICdNZXR0cmUgw6Agam91ciBtYWludGVuYW50ICEnXFxuICAgIH0sXFxuICAgIG5vdEZvdW5kVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNvdXJjZSBub3QgZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Jlc3NvdXJjZSBpbnRyb3V2YWJsZSdcXG4gICAgfSxcXG4gICAgbm90Rm91bmRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIHJlcXVlc3RlZCByZXNvdXJjZSB3YXMgbm90IGZvdW5kLicsXFxuICAgICAgICAnZnItRlInOiAnTGEgcmVzc291cmNlIGRlbWFuZMOpZSBlc3QgaW50cm91dmFibGUuJ1xcbiAgICB9LFxcbiAgICBzZXR0aW5nczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NldHRpbmdzJyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOodHJlcydcXG4gICAgfSxcXG4gICAgb3RoZXJzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3RoZXJzJyxcXG4gICAgICAgICdmci1GUic6ICdBdXRyZXMnXFxuICAgIH0sXFxuICAgIGRldmVsb3BtZW50VG9vbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZXZlbG9wbWVudCB0b29scycsXFxuICAgICAgICAnZnItRlInOiAnT3V0aWxzIGRlIGTDqXZlbG9wcGVtZW50J1xcbiAgICB9LFxcbiAgICBjb2RlRWRpdG9yQ29uZmlndXJhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvZGUgZWRpdG9yIGNvbmZpZ3VyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbmZpZ3VyYXRpb24gZGVzIMOpZGl0ZXVycyBkZSBjb2RlJ1xcbiAgICB9LFxcbiAgICBuZXdQYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05ldyBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTm91dmVhdSBtb3QgZGUgcGFzc2UnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1QYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpcm0gcGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbmZpcm1lciBtb3QgZGUgcGFzc2UnXFxuICAgIH0sXFxuICAgIHJlZnJlc2hQZXJtaXNzaW9uczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+UmVmcmVzaDxiciAvPnBlcm1pc3Npb25zPC9kaXY+XFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCI8ZGl2PlJhZnJhXFxcXHUwMEVFY2hpcjxiciAvPnBlcm1pc3Npb25zPC9kaXY+XFxcIlxcbiAgICB9LFxcbiAgICBjdHlVbnN1YnNjcmliZToge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+VW5zdWJzY3JpYmUgZnJvbTxiciAvPnRoaXMgQ29tbXVuaXR5PC9kaXY+XFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCI8ZGl2Pk1lIGRcXFxcdTAwRTlzaW5zY3JpcmU8YnIgLz5kZSBjZXR0ZSBDb21tdW5hdXRcXFxcdTAwRTk8L2Rpdj5cXFwiXFxuICAgIH0sXFxuICAgIGRlbGV0ZUFjY291bnQ6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCI8ZGl2PkRlbGV0ZTxiciAvPm15IGFjY291bnQ8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+U3VwcHJpbWVyIG1vbjxiciAvPmNvbXB0ZSB1dGlsaXNhdGV1cjwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgZXhwb3J0UGVybWlzc2lvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCI8ZGl2PkV4cG9ydDxiciAvPnBlcm1pc3Npb25zPC9kaXY+XFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCI8ZGl2PkV4cG9ydGVyPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VzQXV0b3JlZnJlc2g6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBdXRvLXJlZnJlc2ggbWVzc2FnZXMgbGlzdCBkZWxheScsXFxuICAgICAgICAnZnItRlInOiAnRMOpbGFpIGRlIHJhZnJhw65jaGlzc2VtZW50IGRlIGxhIGxpc3RlIGRlcyBtZXNzYWdlcydcXG4gICAgfSxcXG4gICAgZGlzYWJsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdkaXNhYmxlZCcsXFxuICAgICAgICAnZnItRlInOiAnZMOpc2FjdGl2w6knXFxuICAgIH0sXFxuICAgIHByZWZlcnJlZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJlZmVycmVkIGxhbmd1YWdlJyxcXG4gICAgICAgICdmci1GUic6ICdMYW5ndWUgcHLDqWbDqXLDqWUnXFxuICAgIH0sXFxuICAgIHVzZXJEZWxldGVBY2NvdW50Q29uZmlybToge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxwPkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgeW91IGFjY291bnQ/PC9wPlxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiPHA+XFxcXHUwMENBdGVzLXZvdXMgc1xcXFx1MDBGQnIoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyID88L3A+XFxcIlxcbiAgICB9LFxcbiAgICB1c2VyRGVsZXRlQWNjb3VudENvbmZpcm1TdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiXFxcXG4gICAgICAgICAgICA8cD5cXFxcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVxcXFxcXFwiZGFuZ2VyLWNvbG9yIGJvdHRvbS1tYXJnaW4gdGV4dC14eGxhcmdlXFxcXFxcXCI+V0FSTklORzwvaDM+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+QXJlIHlvdSA8c3Ryb25nPlJFQUxMWTwvc3Ryb25nPiBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB5b3UgYWNjb3VudD8gWW91IHdvbid0IGJlIGFibGUgdG8gYWNjZXNzIHRoZSBwb3J0YWwgYW55bW9yZS4uLjwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvcD5cXFxcbiAgICAgICAgXFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCJcXFxcbiAgICAgICAgICAgIDxwPlxcXFxuICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XFxcXFxcXCJkYW5nZXItY29sb3IgYm90dG9tLW1hcmdpbiB0ZXh0LXh4bGFyZ2VcXFxcXFxcIj5BVFRFTlRJT048L2gzPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlxcXFx1MDBDQXRlcy12b3VzIDxzdHJvbmc+VlJBSU1FTlQ8L3N0cm9uZz4gc1xcXFx1MDBGQnIoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyID8gVm91cyBuZSBwb3VycmV6IHBsdXMgYWNjXFxcXHUwMEU5ZGVyIGF1IHBvcnRhaWwuLi48L3NwYW4+XFxcXG4gICAgICAgICAgICA8L3A+XFxcXG4gICAgICAgIFxcXCJcXG4gICAgfSxcXG4gICAgdXNlclVuc3Vic2NyaWJlQ29uZmlybToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1bnN1YnNjcmliZSBmcm9tIHRoaXMgY29tbXVuaXR5PycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIHZvdHJlIGNvbXB0ZSBpbnNjcmlwdGlvbiDDoCBjZXR0ZSBjb21tdW5hdXTDqSA/J1xcbiAgICB9LFxcbiAgICBzZXRwYXNzd29yZFRpdGxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2V0IGEgbmV3IHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXIgdW4gbm91dmVhdSBtb3QgZGUgcGFzc2UnXFxuICAgIH0sXFxuICAgIHBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgc2lnbkluOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2lnbiBpbicsXFxuICAgICAgICAnZnItRlInOiAnU2UgY29ubmVjdGVyJ1xcbiAgICB9LFxcbiAgICBzZXRwYXNzd29yZFN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3VyIHBhc3N3b3JkIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZXQuJyxcXG4gICAgICAgICdmci1GUic6ICdWb3RyZSBtb3QgZGUgcGFzc2UgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLidcXG4gICAgfSxcXG4gICAgaW52YWxpZFBhc3N3b3JkQ29uZmlybToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bhc3N3b3JkcyBhcmUgbm90IGlkZW50aWNhbCcsXFxuICAgICAgICAnZnItRlInOiAnTGVzIDIgbW90cyBkZSBwYXNzZSBuZSBzb250IHBhcyBpZGVudGlxdWVzJ1xcbiAgICB9LFxcbiAgICBjb25maXJtTXVsdGlwbGVNZXNzYWdlc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIG1lc3NhZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGxlcyBtZXNzYWdlcyBzw6lsZWN0aW9ubsOpcyA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtTXVsdGlwbGVSZXByb2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVwcm9jZXNzIHRoZSBzZWxlY3RlZCBtZXNzYWdlcz8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHJlbGFuY2VyIGxlcyBtZXNzYWdlcyBzw6lsZWN0aW9ubsOpcyA/J1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZVJlcHJvY2Vzc1N1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZXNzYWdlcyByZXByb2Nlc3NlZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVzc2FnZXMgcmVsYW5jw6lzJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZVJlcHJvY2Vzc0ZhaWx1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdtZXNzYWdlKHMpIG5vdCByZXByb2Nlc3NlZCcsXFxuICAgICAgICAnZnItRlInOiAnbWVzc2FnZShzKSBub24gcmVsYW5jw6kocyknXFxuICAgIH0sXFxuICAgIGZldGNobXNnRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lc3NhZ2UgY2Fubm90IGJlIGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGUgbWVzc2FnZSBuZSBwZXV0IMOqdHJlIGNoYXJnw6knXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VzRGVsZXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lc3NhZ2VzIGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2VzIHN1cHByaW3DqXMnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VTYXZlRGlzcGxheVNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiXFxcXG4gICAgICAgICAgICA8ZGl2PlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPkRvIHlvdSB3YW50IHRvIHNhdmUgeW91ciBtb2RpZmljYXRpb25zPzwvc3Bhbj48YnIvPlxcXFxuICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cXFxcXFxcInRleHQtbWVkaXVtXFxcXFxcXCI+WW91ciBwcmVmZXJlbmNlcyAocHJlc2VuY2UsIHdpZHRoIGFuZCBvcmRlciBvZiBjb2x1bW5zLCBhY3Rpb24gcmVsYXRlZCB0byBcXFxcdTIwMUNTZWFyY2hcXFxcdTIwMUQgYW5kIFxcXFx1MjAxQ1Jlc2V0XFxcXHUyMDFEIGJ1dHRvbnMuLi4pIHdpbGwgYmUgc2F2ZWQgaW4geW91ciB1c2VyIHByb2ZpbGUuIE5vdGUgdGhhdCB5b3UgY2FuIHNhdmUgc3BlY2lmaWMgc2V0dGluZ3MgZm9yIGVhY2ggZGlzcGxheSBtb2RlIChtb2JpbGUsIG1lZGl1bSBhbmQgbGFyZ2Ugc2NyZWVuKS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8ZGl2PlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlZvdWxlei12b3VzIHNhdXZlZ2FyZGVyIHZvcyBtb2RpZmljYXRpb25zID88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPlZvcyBwclxcXFx1MDBFOWZcXFxcdTAwRTlyZW5jZXMgZCdhZmZpY2hhZ2UgKHByXFxcXHUwMEU5c2VuY2UsIGxhcmdldXIgZXQgb3JkcmUgZGVzIGNvbG9ubmVzLCBhY3Rpb24gZGVzIGJvdXRvbnMgXFxcXHUyMDFDUmVjaGVyY2hlclxcXFx1MjAxRCBldCBcXFxcdTIwMUNSXFxcXHUwMEU5aW5pdGlhbGlzZXJcXFxcdTIwMUQuLi4pIHNlcm9udCBlbnJlZ2lzdHJcXFxcdTAwRTllcyBkYW5zIHZvdHJlIHByb2ZpbCB1dGlsaXNhdGV1ci4gVm91cyBwb3V2ZXogc2F1dmVnYXJkZXIgZGVzIHBhcmFtXFxcXHUwMEU4dHJlcyBzcFxcXFx1MDBFOWNpZmlxdWVzIHBvdXIgY2hhcXVlIG1vZGUgZCdhZmZpY2hhZ2UgKG1vYmlsZSwgbW95ZW4gZXQgZ3JhbmQgXFxcXHUwMEU5Y3JhbikuPC9lbT5cXFxcbiAgICAgICAgICAgIDwvZGl2PlxcXFxuICAgICAgICBcXFwiXFxuICAgIH0sXFxuICAgIG11bHRpcGxlRGVsZXRlRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ21lc3NhZ2Uocykgbm90IGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ21lc3NhZ2Uocykgbm9uIHN1cHByaW3DqXMnXFxuICAgIH0sXFxuICAgIGZldGNoZG9jRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RvY3VtZW50IGNhbm5vdCBiZSBsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIGRvY3VtZW50IG5lIHBldXQgw6p0cmUgY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgY29uZmlybUNsb3NlTWVzc2FnZVN1Ym1pdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjbG9zZSB0aGlzIG1lc3NhZ2Ugc3VibWlzc2lvbiBzZXNzaW9uPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgdGVybWluZXIgY2V0dGUgc2Vzc2lvbiBkZSBjcsOpYXRpb24gZGUgbWVzc2FnZSA/J1xcbiAgICB9LFxcbiAgICBub1ZpZXdBY2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3UgZG9uXFxcXCd0IGhhdmUgYWNjZXNzIHRvIGFueSB2aWV3IG9uIHRoaXMgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBuXFxcXCdhdmV6IGFjY8OocyDDoCBhdWN1bmUgdnVlIHN1ciBjZXR0ZSBwYWdlJ1xcbiAgICB9LFxcbiAgICBub1Jlc3VsdHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyByZXN1bHRzIGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biByw6lzdWx0YXQnXFxuICAgIH0sXFxuICAgIHJlZnJlc2g6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWZyZXNoJyxcXG4gICAgICAgICdmci1GUic6ICdSYWZyYcOuY2hpcidcXG4gICAgfSxcXG4gICAgcmVwcm9jZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVwcm9jZXNzJyxcXG4gICAgICAgICdmci1GUic6ICdSZWxhbmNlcidcXG4gICAgfSxcXG4gICAgbXVsdGlwbGVNc2dSZXByb2Nlc3NJbXBvc3NpYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT25lIG9yIG1vcmUgb2YgdGhlIHNlbGVjdGVkIG1lc3NhZ2VzIGNhbm5vdCBiZSByZXByb2Nlc3NlZC4gUGxlYXNlIGNoZWNrIHlvdXIgc2VsZWN0aW9uIGFuZCByZXRyeSEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VuIG91IHBsdXNpZXVycyBkZXMgbWVzc2FnZXMgc8OpbGVjdGlvbm7DqXMgbmUgcGV1dmVudCBwYXMgw6p0cmUgcmVsYW5jw6lzLiBNZXJjaSBkZSB2ZXJpZmllciB2b3RyZSBzw6lsZWN0aW9uIGV0IGRlIHLDqWVzc2F5ZXIgISdcXG4gICAgfSxcXG4gICAgbXVsdGlwbGVNc2dEZWxldGVJbXBvc3NpYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT25lIG9yIG1vcmUgb2YgdGhlIHNlbGVjdGVkIG1lc3NhZ2VzIGNhbm5vdCBiZSBkZWxldGVkLiBQbGVhc2UgY2hlY2sgeW91ciBzZWxlY3Rpb24gYW5kIHJldHJ5IScsXFxuICAgICAgICAnZnItRlInOiAnVW4gb3UgcGx1c2lldXJzIGRlcyBtZXNzYWdlcyBzw6lsZWN0aW9ubsOpcyBuZSBwZXV2ZW50IHBhcyDDqnRyZSBzdXBwcmltw6lzLiBNZXJjaSBkZSB2ZXJpZmllciB2b3RyZSBzw6lsZWN0aW9uIGV0IGRlIHLDqWVzc2F5ZXIgISdcXG4gICAgfSxcXG4gICAgY29uZmlybU5vZGVEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgbm9kZT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZSBub2V1ZCA/J1xcbiAgICB9LFxcbiAgICByb290VHJlZURpc3BsYXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSb290IHRyZWUgZGlzcGxheWVkOicsXFxuICAgICAgICAnZnItRlInOiAnQXJicmUgcmFjaW5lIGFmZmljaMOpIDonXFxuICAgIH0sXFxuICAgIG9yZ2FuaXNhdGlvbnNDb25maXJtRGVsZXRlTGFzdFBvc2l0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBpcyB0aGUgb25seSBvcmdhbml6YXRpb24gcG9zaXRpb24gaGVsZCBieSB0aGlzIHVzZXIuIElmIHlvdSBkZWxldGUgaXQsIHlvdSB3b25cXFxcJ3QgYmUgYWJsZSB0byByZS1hc3NpZ24gdGhpcyB1c2VyIGFueXdoZXJlIGluIHRoZSB0cmVlLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY29tcGxldGVseSByZW1vdmUgdGhpcyB1c2VyIGZyb20gdGhlIG9yZ2FuaXphdGlvbj8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgw6p0ZXMgc3VyIGxlIHBvaW50IGRlIHN1cHByaW1lciBsYSBzZXVsZSBwb3NpdGlvbiB0ZW51ZSBwYXIgY2V0IHV0aWxpc2F0ZXVyIGRhbnMgbFxcXFwnb3JnYW5pc2F0aW9uLiBTaSB2b3VzIGxhIHN1cHByaW1leiwgdm91cyBuZSBwb3VycmV6IHBsdXMgZHUgdG91dCByw6lhc3NpZ25lciBjZXQgdXRpbGlzYXRldXIgZGFucyBsXFxcXCdhcmJyZS4gw4p0ZXMtdm91cyBjZXJ0YWluIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNvbXBsw6h0ZW1lbnQgY2V0IHV0aWxpc2F0ZXVyIGRlIGxcXFxcJ29yZ2FuaXNhdGlvbiA/J1xcbiAgICB9LFxcbiAgICBub0F2YWlsYWJsZVJlcG9ydHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyByZXBvcnRzIGF2YWlsYWJsZS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIHJhcHBvcnQgZGlzcG9uaWJsZS4nXFxuICAgIH0sXFxuICAgIHNlbGVjdFJlcG9ydDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhIHJlcG9ydCcsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1biByYXBwb3J0J1xcbiAgICB9LFxcbiAgICBwcmludDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ByaW50JyxcXG4gICAgICAgICdmci1GUic6ICdJbXByaW1lcidcXG4gICAgfSxcXG4gICAgc2VydmljZUNvbmZpcm1MZWF2ZVdpdGhvdXRTYXZpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gbGVhdmUgdGhpcyBwYWdlIGFuZCBsb3NlIHlvdXIgdXBkYXRlcz8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgYXZleiBlZmZlY3R1w6kgZGVzIG1vZGlmaWNhdGlvbnMgc2FucyBsZXMgZW5yZWdpc3RyZXIuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHF1aXR0ZXIgY2V0dGUgcGFnZSBldCBwZXJkcmUgbGVzIGRvbm7DqWVzIG5vbiBzYXV2ZWdhcmTDqWVzID8nXFxuICAgIH0sXFxuICAgIHNlcnZpY2VWZXJzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VydmljZSB2ZXJzaW9uOicsXFxuICAgICAgICAnZnItRlInOiAnVmVyc2lvbiBkdSBzZXJ2aWNlIDonXFxuICAgIH0sXFxuICAgIGJhdGNoT3BlcmF0aW9uQ29tcGxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcGVyYXRpb24gY29tcGxldGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ09ww6lyYXRpb24gdGVybWluw6llJ1xcbiAgICB9LFxcbiAgICBiYXRjaE9wZXJhdGlvblByb2Nlc3NlZEl0ZW1zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvY2Vzc2VkIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnRzIHRyYWl0w6lzJ1xcbiAgICB9LFxcbiAgICBlcnJvcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFcnJvcnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VycmV1cnMnXFxuICAgIH0sXFxuICAgIHN1Y2Nlc3Nlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N1Y2Nlc3NlcycsXFxuICAgICAgICAnZnItRlInOiAnUsOpdXNzaXMnXFxuICAgIH0sXFxuICAgIGJhdGNoT3BlcmF0aW9uQWxsR29vZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FsbCBpdGVtcyBoYXZlIGJlZW4gcHJvY2Vzc2VkLiBFdmVyeXRoaW5nIHdlbnQgd2VsbCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1RvdXMgbGVzIMOpbMOpbWVudHMgb250IMOpdMOpIHRyYWl0w6lzICEnXFxuICAgIH0sXFxuICAgIGJhdGNoT3BlcmF0aW9uRXJyb3JzT2NjdXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NvbWUgZXJyb3JzIG9jY3VyZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLicsXFxuICAgICAgICAnZnItRlInOiAnRGVzIGVycmV1cnMgc29udCBzdXJ2ZW51ZXMgbG9ycyBkZXMgdHJhaXRlbWVudHMuJ1xcbiAgICB9LFxcbiAgICBpdGVtSWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIElEJyxcXG4gICAgICAgICdmci1GUic6ICdJRCDDqWzDqW1lbnQnXFxuICAgIH0sXFxuICAgIHN0YXR1c0NvZGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0dXMgY29kZScsXFxuICAgICAgICAnZnItRlInOiAnQ29kZSBIVFRQJ1xcbiAgICB9LFxcbiAgICBlcnJvck1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFcnJvciBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlIGRcXFxcJ2VycmV1cidcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Qcm9jZXNzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXb3JrIGl0ZW0gcHJvY2Vzc2VkIScsXFxuICAgICAgICAnZnItRlInOiAnVMOiY2hlIHRyYWl0w6llICEnXFxuICAgIH0sXFxuICAgIHZpZXc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3JyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlcidcXG4gICAgfSxcXG4gICAgbmFtZUFscmVhZHlVc2VkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBuYW1lIGlzIGFscmVhZHkgdXNlZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIG5vbSBlc3QgZMOpasOgIHV0aWxpc8OpLidcXG4gICAgfSxcXG4gICAgdW5rbm93bjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Vua25vd24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luY29ubnUnXFxuICAgIH0sXFxuICAgIHNlcnZpY2VTdGF0dXNDb25maWdDaGFuZ2VkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VydmljZSBjb25maWd1cmF0aW9uIGhhcyBjaGFuZ2VkIHNpbmNlIGxhc3Qgc3RhcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIGNvbmZpZ3VyYXRpb24gZHUgc2VydmljZSBhIGNoYW5nw6kgZGVwdWlzIGxlIGRlcm5pZXIgZMOpbWFycmFnZSdcXG4gICAgfSxcXG4gICAgc2VydmljZVN0YXR1czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlcnZpY2Ugc3RhdHVzOicsXFxuICAgICAgICAnZnItRlInOiAnw4l0YXQgZHUgc2VydmljZSA6J1xcbiAgICB9XFxufTtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5BVkFJTEFCTEVfTEFOR1VBR0VTID0gW1xcbiAgICB7XFxuICAgICAgICBsYWJlbDogJ0VOJyxcXG4gICAgICAgIGxvY2FsZTogJ2VuLVVTJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYWJlbDogJ0ZSJyxcXG4gICAgICAgIGxvY2FsZTogJ2ZyLUZSJ1xcbiAgICB9XFxuXTtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1Db25maWcuanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjcxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbmV4cG9ydHMuZmxhZ3NEZWYgPSB7XFxuICAgICdldW5yZWFkJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWVudmVsb3BlJyxcXG4gICAgICAgIGljb25Db2xvcjogJ2ZvbnQtY29sb3ItbGlnaHRlcicsXFxuICAgICAgICBmbGFnTGFiZWw6IHtcXG4gICAgICAgICAgICAnZW4tVVMnOiAnVW5yZWFkJyxcXG4gICAgICAgICAgICAnZnItRlInOiAnTm9uIGx1J1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnZHdhcm5pbmcnOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZGFuZ2VyLWNvbG9yJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdXYXJuaW5nJyxcXG4gICAgICAgICAgICAnZnItRlInOiAnQXR0ZW50aW9uJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnY2ltcG9ydGFudCc6IHtcXG4gICAgICAgIGljb25TaGFwZTogJ2ZhcyBmYS1zdGFyJyxcXG4gICAgICAgIGljb25Db2xvcjogJ3dhcm5pbmctY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ0ltcG9ydGFudCcsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGFudCdcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgJ2JpbmZvJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLXNxdWFyZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdpbmZvLWNvbG9yJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdJbmZvJyxcXG4gICAgICAgICAgICAnZnItRlInOiAnSW5mbydcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgJ2Fvayc6IHtcXG4gICAgICAgIGljb25TaGFwZTogJ2ZhcyBmYS1jaXJjbGUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAncHJpbWFyeS1jb2xvcicsXFxuICAgICAgICBmbGFnTGFiZWw6IHtcXG4gICAgICAgICAgICAnZW4tVVMnOiAnT0snLFxcbiAgICAgICAgICAgICdmci1GUic6ICdPSydcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgJ2FhdmlzaWJsZSc6IHtcXG4gICAgICAgIGljb25TaGFwZTogJ2ZhcyBmYS1hcmNoaXZlJyxcXG4gICAgICAgIGljb25Db2xvcjogJ2ZvbnQtY29sb3ItbGlnaHRlcicsXFxuICAgICAgICBmbGFnTGFiZWw6IHtcXG4gICAgICAgICAgICAnZW4tVVMnOiAnQXJjaGl2ZWQnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdBcmNoaXbDqSdcXG4gICAgICAgIH0sXFxuICAgICAgICBpbnZlcnNlZDogdHJ1ZSxcXG4gICAgICAgIGRlZmF1bHRTZWFyY2hTdGF0ZTogdHJ1ZVxcbiAgICB9LFxcbn07XFxuZXhwb3J0cy5sYW5ndWFnZUlzbyA9IFtcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQUEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQWZhcidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQUInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQWJraGF6J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBdmVzdGFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBRicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBZnJpa2FhbnMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0FrYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FNJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0FtaGFyaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0FyYWdvbmVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQVInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJhYmljJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBc3NhbWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQVYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXZhcmljJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBWScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBeW1hcmEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FaJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F6ZXJiYWlqYW5pJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCYXNoa2lyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCZWxhcnVzaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCRycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCdWxnYXJpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0JpaGFyaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQmlzbGFtYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQk0nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQmFtYmFyYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQk4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQmVuZ2FsaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQk8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGliZXRhbiBTdGFuZGFyZCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQlInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQnJldG9uJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCb3NuaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDYXRhbGFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDaGVjaGVuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDaGFtb3JybydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ08nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ29yc2ljYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NyZWUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0N6ZWNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdPbGQgQ2h1cmNoIFNsYXZvbmljJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDaHV2YXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDWScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdXZWxzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnREEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRGFuaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdERScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHZXJtYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0RWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0RpdmVoaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRFonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRHpvbmdraGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0V3ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRUwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXdlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdFTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdFbmdsaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdFTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdFc3BlcmFudG8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NwYW5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VzdG9uaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdFVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCYXNxdWUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0ZBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1BlcnNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0ZGJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Z1bGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0ZJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Zpbm5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0ZKJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ZpamlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRk8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmFyb2VzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRlInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRnJlbmNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGWScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdXZXN0ZXJuIEZyaXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0lyaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdHRCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTY290dGlzaCBHYWVsaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dMJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dhbGljaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdHTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHdWFyYW7DrSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR1UnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnR3VqYXJhdGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hbngnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hhdXNhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdIRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdIZWJyZXcnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hpbmRpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdITycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdIaXJpIE1vdHUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Nyb2F0aWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdIVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdIYWl0aWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdIVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdIdW5nYXJpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0FybWVuaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdIWicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdIZXJlcm8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludGVybGluZ3VhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJRCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJbmRvbmVzaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJbnRlcmxpbmd1ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSWdibydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTnVvc3UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludXBpYXEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0lkbydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSVMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSWNlbGFuZGljJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJdGFsaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJbnVrdGl0dXQnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0pBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0phcGFuZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdKVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdKYXZhbmVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0EnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnR2VvcmdpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tvbmdvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLaWt1eXUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tKJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t3YW55YW1hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLSycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLYXpha2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tMJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0thbGFhbGxpc3V0J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLaG1lcidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS04nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FubmFkYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS08nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS29yZWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLYW51cmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0thc2htaXJpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLdXJkaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLb21pJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLVycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDb3JuaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLWScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLeXJneXonXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0xhdGluJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMQicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMdXhlbWJvdXJnaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMRycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHYW5kYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGltYnVyZ2lzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTE4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGluZ2FsYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTE8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGFvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaXRodWFuaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMdWJhLUthdGFuZ2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0xhdHZpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01HJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hbGFnYXN5J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYXJzaGFsbGVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTUknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTcSBb3JpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNSycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYWNlZG9uaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNTCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYWxheWFsYW0nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01OJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01vbmdvbGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFyYXRoaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsYXnigI4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01UJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hbHRlc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01ZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0J1cm1lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05BJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05hdXJ1J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdOQicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J3ZWdpYW4gQm9rbcOlbCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTm9ydGhlcm4gTmRlYmVsZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTmVwYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOZG9uZ2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05MJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0R1dGNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdOTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J3ZWdpYW4gTnlub3JzaydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTk8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTm9yd2VnaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdOUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTb3V0aGVybiBOZGViZWxlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdOVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOYXZham8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05ZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoaWNoZXdhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdPQycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdPY2NpdGFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdPSicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdPamlid2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09NJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09yb21vJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdPUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdPcml5YSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnT1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnT3NzZXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1BBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1BhbmphYmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1BJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1DEgWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdQTCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdQb2xpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1BTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Bhc2h0bydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUFQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUG9ydHVndWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUVUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUXVlY2h1YSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUk0nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUm9tYW5zaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUk4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2lydW5kaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUk8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUm9tYW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1JVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1J1c3NpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1JXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tpbnlhcndhbmRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTYW5za3JpdCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2FyZGluaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTRCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTaW5kaGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcnRoZXJuIFNhbWknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NhbmdvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTaW5oYWxhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTSycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTbG92YWsnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NMJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Nsb3ZlbmUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NNJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NhbW9hbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU04nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2hvbmEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvbWFsaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1EnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQWxiYW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NlcmJpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3YXRpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTb3V0aGVybiBTb3RobydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1UnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3VuZGFuZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTd2VkaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTVycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTd2FoaWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYW1pbCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGVsdWd1J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdURycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYWppaydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEgnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGhhaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGlncmlueWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1R1cmttZW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RMJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhZ2Fsb2cnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1ROJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Rzd2FuYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVE8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVG9uZ2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1R1cmtpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Rzb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGF0YXInXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1R3aSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGFoaXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1V5Z2h1cidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVWtyYWluaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdVUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdVcmR1J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdVWicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdVemJlaydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVkUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVmVuZGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1ZJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1ZpZXRuYW1lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1ZPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1ZvbGFww7xrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdXQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdXYWxsb29uJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdXTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdXb2xvZidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWEgnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWGhvc2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1lJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1lpZGRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1lPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1lvcnViYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWmh1YW5nJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdaSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDaGluZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdaVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdadWx1J1xcbiAgICB9XFxuXTtcXG5leHBvcnRzLmNvdW50cmllc0lzbyA9IFtcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbmRvcnJhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQUVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVuaXRlZCBBcmFiIEVtaXJhdGVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQUZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFmZ2hhbmlzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQUdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFudGlndWEgYW5kIEJhcmJ1ZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBSVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW5ndWlsbGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWxiYW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBcm1lbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQU9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFuZ29sYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFRXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbnRhcmN0aWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFyZ2VudGluYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbWVyaWNhbiBTYW1vYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBdXN0cmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkF1c3RyYWxpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBcnViYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFYXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCLDhWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXplcmJhaWphblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb3NuaWEgYW5kIEhlcnplZ292aW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJhcmJhZG9zXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJhbmdsYWRlc2hcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVsZ2l1bVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCdXJraW5hIEZhc29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQnVsZ2FyaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFocmFpblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCdXJ1bmRpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJlbmluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkxcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IEJhcnRow6lsZW15XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQk1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJlcm11ZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQnJ1bmVpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvbGl2aWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCUVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQm9uYWlyZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcmF6aWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFoYW1hc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCaHV0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQm91dmV0IElzbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb3Rzd2FuYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCZWxhcnVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJlbGl6ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYW5hZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ29jb3MgW0tlZWxpbmddIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiB0aGUgQ29uZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDRlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlJlcHVibGljIG9mIHRoZSBDb25nb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTd2l0emVybGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJdm9yeSBDb2FzdFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb29rIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2hpbGVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2FtZXJvb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2hpbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ29sb21iaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ29zdGEgUmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNVXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDdWJhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhcGUgVmVyZGVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ3VyYWNhb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNYXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaHJpc3RtYXMgSXNsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN5cHJ1c1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDemVjaCBSZXB1YmxpY1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHZXJtYW55XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiREpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkRqaWJvdXRpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiREtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkRlbm1hcmtcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJETVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRG9taW5pY2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJET1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRG9taW5pY2FuIFJlcHVibGljXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRFpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFsZ2VyaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRWN1YWRvclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFc3RvbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRUdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVneXB0XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRUhcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIldlc3Rlcm4gU2FoYXJhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRVJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVyaXRyZWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3BhaW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRXRoaW9waWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGSVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRmlubGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZKXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGaWppXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRktcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZhbGtsYW5kIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWljcm9uZXNpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGYXJvZSBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZyYW5jZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHYWJvblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdCXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVbml0ZWQgS2luZ2RvbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHcmVuYWRhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0VcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdlb3JnaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHRlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJlbmNoIEd1aWFuYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWVybnNleVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHaGFuYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHaWJyYWx0YXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR3JlZW5sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR01cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdhbWJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWluZWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHUFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR3VhZGVsb3VwZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdRXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFcXVhdG9yaWFsIEd1aW5lYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHcmVlY2VcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU291dGggR2VvcmdpYSBhbmQgdGhlIFNvdXRoIFNhbmR3aWNoIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR3VhdGVtYWxhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1VcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1YW1cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR3VpbmVhLUJpc3NhdVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdXlhbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSG9uZyBLb25nXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSE1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkhlYXJkIElzbGFuZCBhbmQgTWNEb25hbGQgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkhOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJIb25kdXJhc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkhSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDcm9hdGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSFRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkhhaXRpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSFVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkh1bmdhcnlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSW5kb25lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSUVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIklyZWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXNyYWVsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIklzbGUgb2YgTWFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSU5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkluZGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSU9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJyaXRpc2ggSW5kaWFuIE9jZWFuIFRlcnJpdG9yeVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklRXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJcmFxXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIklyYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSWNlbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJdGFseVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKZXJzZXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJKTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSmFtYWljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKb3JkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJKUFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSmFwYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJLRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiS2VueWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJLR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiS3lyZ3l6c3RhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYW1ib2RpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLaXJpYmF0aVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb21vcm9zXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS05cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IEtpdHRzIGFuZCBOZXZpc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOb3J0aCBLb3JlYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTb3V0aCBLb3JlYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLdXdhaXRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJLWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2F5bWFuIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJLWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiS2F6YWtoc3RhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMYW9zXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxlYmFub25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgTHVjaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMSVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGllY2h0ZW5zdGVpblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTcmkgTGFua2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGliZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMZXNvdGhvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxpdGh1YW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxVXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMdXhlbWJvdXJnXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxhdHZpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWJ5YVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1BXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNb3JvY2NvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbmFjb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1EXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNb2xkb3ZhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbnRlbmVncm9cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNRlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgTWFydGluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hZGFnYXNjYXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFyc2hhbGwgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1LXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWNlZG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsaVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1NXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNeWFubWFyIFtCdXJtYV1cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9uZ29saWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFjYW9cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNUFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hcnRpbmlxdWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWF1cml0YW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1TXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNb250c2VycmF0XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbHRhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hdXJpdGl1c1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1WXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWxkaXZlc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1XXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWxhd2lcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWV4aWNvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVlcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGF5c2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vemFtYmlxdWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmFtaWJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5DXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOZXcgQ2FsZWRvbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5pZ2VyXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTkZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5vcmZvbGsgSXNsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTkdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5pZ2VyaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOSVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmljYXJhZ3VhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTkxcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5ldGhlcmxhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5vcndheVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5QXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOZXBhbFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5SXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOYXVydVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5VXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOaXVlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5ldyBaZWFsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiT01cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk9tYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFuYW1hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUEVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBlcnVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQRlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJlbmNoIFBvbHluZXNpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYXB1YSBOZXcgR3VpbmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUEhcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBoaWxpcHBpbmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBha2lzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUExcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBvbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBpdGNhaXJuIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUHVlcnRvIFJpY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFsZXN0aW5lXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUFRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBvcnR1Z2FsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUFdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBhbGF1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUFlcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBhcmFndWF5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUUFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlFhdGFyXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlLDqXVuaW9uXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlJvbWFuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2VyYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUlVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlJ1c3NpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlJXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJSd2FuZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2F1ZGkgQXJhYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvbG9tb24gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZXljaGVsbGVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0RcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlN1ZGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0VcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlN3ZWRlblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTaW5nYXBvcmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgSGVsZW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNsb3ZlbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0pcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlN2YWxiYXJkIGFuZCBKYW4gTWF5ZW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2xvdmFraWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2llcnJhIExlb25lXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU01cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhbiBNYXJpbm9cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2VuZWdhbFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTb21hbGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlN1cmluYW1lXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIFN1ZGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1RcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlPDo28gVG9tw6kgYW5kIFByw61uY2lwZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNWXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFbCBTYWx2YWRvclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNYXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTaW50IE1hYXJ0ZW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3lyaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3dhemlsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVENcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlREXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGFkXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVEZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUb2dvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVEhcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRoYWlsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVEpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRhamlraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVG9rZWxhdVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFYXN0IFRpbW9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVE1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlR1cmttZW5pc3RhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlROXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUdW5pc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVE9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRvbmdhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlR1cmtleVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUcmluaWRhZCBhbmQgVG9iYWdvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlR1dmFsdVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUYWl3YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGFuemFuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJVQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVWtyYWluZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVZ2FuZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJVTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVS5TLiBNaW5vciBPdXRseWluZyBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVuaXRlZCBTdGF0ZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJVWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVXJ1Z3VheVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVemJla2lzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlZhdGljYW4gQ2l0eVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJWZW5lenVlbGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQnJpdGlzaCBWaXJnaW4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVLlMuIFZpcmdpbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVk5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlZpZXRuYW1cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmFudWF0dVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIldGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJXYWxsaXMgYW5kIEZ1dHVuYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIldTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYW1vYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlhLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLb3Nvdm9cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJZRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiWWVtZW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJZVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWF5b3R0ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlpBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTb3V0aCBBZnJpY2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJaTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiWmFtYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlppbWJhYndlXFxcIlxcbiAgICB9XFxuXTtcXG5leHBvcnRzLmNvdW50cmllc05hbWVQcmVTZWxlY3Rpb24gPSBbXFxuICAgIFxcXCJVbml0ZWQgU3RhdGVzXFxcIixcXG4gICAgXFxcIkNhbmFkYVxcXCIsXFxuICAgIFxcXCJGcmFuY2VcXFwiLFxcbiAgICBcXFwiR2VybWFueVxcXCIsXFxuICAgIFxcXCJNZXhpY29cXFwiXFxuXTtcXG5leHBvcnRzLmNvdW50cmllc05hbWUgPSBbXFxuICAgIFxcXCJBZmdoYW5pc3RhblxcXCIsXFxuICAgIFxcXCLDhWxhbmRcXFwiLFxcbiAgICBcXFwiQWxiYW5pYVxcXCIsXFxuICAgIFxcXCJBbGdlcmlhXFxcIixcXG4gICAgXFxcIkFtZXJpY2FuIFNhbW9hXFxcIixcXG4gICAgXFxcIkFuZG9ycmFcXFwiLFxcbiAgICBcXFwiQW5nb2xhXFxcIixcXG4gICAgXFxcIkFuZ3VpbGxhXFxcIixcXG4gICAgXFxcIkFudGFyY3RpY2FcXFwiLFxcbiAgICBcXFwiQW50aWd1YSBhbmQgQmFyYnVkYVxcXCIsXFxuICAgIFxcXCJBcmdlbnRpbmFcXFwiLFxcbiAgICBcXFwiQXJtZW5pYVxcXCIsXFxuICAgIFxcXCJBcnViYVxcXCIsXFxuICAgIFxcXCJBdXN0cmFsaWFcXFwiLFxcbiAgICBcXFwiQXVzdHJpYVxcXCIsXFxuICAgIFxcXCJBemVyYmFpamFuXFxcIixcXG4gICAgXFxcIkJhaGFtYXNcXFwiLFxcbiAgICBcXFwiQmFocmFpblxcXCIsXFxuICAgIFxcXCJCYW5nbGFkZXNoXFxcIixcXG4gICAgXFxcIkJhcmJhZG9zXFxcIixcXG4gICAgXFxcIkJlbGFydXNcXFwiLFxcbiAgICBcXFwiQmVsZ2l1bVxcXCIsXFxuICAgIFxcXCJCZWxpemVcXFwiLFxcbiAgICBcXFwiQmVuaW5cXFwiLFxcbiAgICBcXFwiQmVybXVkYVxcXCIsXFxuICAgIFxcXCJCaHV0YW5cXFwiLFxcbiAgICBcXFwiQm9saXZpYVxcXCIsXFxuICAgIFxcXCJCb25haXJlXFxcIixcXG4gICAgXFxcIkJvc25pYSBhbmQgSGVyemVnb3ZpbmFcXFwiLFxcbiAgICBcXFwiQm90c3dhbmFcXFwiLFxcbiAgICBcXFwiQm91dmV0IElzbGFuZFxcXCIsXFxuICAgIFxcXCJCcmF6aWxcXFwiLFxcbiAgICBcXFwiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5XFxcIixcXG4gICAgXFxcIkJyaXRpc2ggVmlyZ2luIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiQnJ1bmVpXFxcIixcXG4gICAgXFxcIkJ1bGdhcmlhXFxcIixcXG4gICAgXFxcIkJ1cmtpbmEgRmFzb1xcXCIsXFxuICAgIFxcXCJCdXJ1bmRpXFxcIixcXG4gICAgXFxcIkNhbWJvZGlhXFxcIixcXG4gICAgXFxcIkNhbWVyb29uXFxcIixcXG4gICAgXFxcIkNhbmFkYVxcXCIsXFxuICAgIFxcXCJDYXBlIFZlcmRlXFxcIixcXG4gICAgXFxcIkNheW1hbiBJc2xhbmRzXFxcIixcXG4gICAgXFxcIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJDaGFkXFxcIixcXG4gICAgXFxcIkNoaWxlXFxcIixcXG4gICAgXFxcIkNoaW5hXFxcIixcXG4gICAgXFxcIkNocmlzdG1hcyBJc2xhbmRcXFwiLFxcbiAgICBcXFwiQ29jb3MgW0tlZWxpbmddIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiQ29sb21iaWFcXFwiLFxcbiAgICBcXFwiQ29tb3Jvc1xcXCIsXFxuICAgIFxcXCJDb29rIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiQ29zdGEgUmljYVxcXCIsXFxuICAgIFxcXCJDcm9hdGlhXFxcIixcXG4gICAgXFxcIkN1YmFcXFwiLFxcbiAgICBcXFwiQ3VyYWNhb1xcXCIsXFxuICAgIFxcXCJDeXBydXNcXFwiLFxcbiAgICBcXFwiQ3plY2ggUmVwdWJsaWNcXFwiLFxcbiAgICBcXFwiRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiB0aGUgQ29uZ29cXFwiLFxcbiAgICBcXFwiRGVubWFya1xcXCIsXFxuICAgIFxcXCJEamlib3V0aVxcXCIsXFxuICAgIFxcXCJEb21pbmljYVxcXCIsXFxuICAgIFxcXCJEb21pbmljYW4gUmVwdWJsaWNcXFwiLFxcbiAgICBcXFwiRWFzdCBUaW1vclxcXCIsXFxuICAgIFxcXCJFY3VhZG9yXFxcIixcXG4gICAgXFxcIkVneXB0XFxcIixcXG4gICAgXFxcIkVsIFNhbHZhZG9yXFxcIixcXG4gICAgXFxcIkVxdWF0b3JpYWwgR3VpbmVhXFxcIixcXG4gICAgXFxcIkVyaXRyZWFcXFwiLFxcbiAgICBcXFwiRXN0b25pYVxcXCIsXFxuICAgIFxcXCJFdGhpb3BpYVxcXCIsXFxuICAgIFxcXCJGYWxrbGFuZCBJc2xhbmRzXFxcIixcXG4gICAgXFxcIkZhcm9lIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiRmlqaVxcXCIsXFxuICAgIFxcXCJGaW5sYW5kXFxcIixcXG4gICAgXFxcIkZyYW5jZVxcXCIsXFxuICAgIFxcXCJGcmVuY2ggR3VpYW5hXFxcIixcXG4gICAgXFxcIkZyZW5jaCBQb2x5bmVzaWFcXFwiLFxcbiAgICBcXFwiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzXFxcIixcXG4gICAgXFxcIkdhYm9uXFxcIixcXG4gICAgXFxcIkdhbWJpYVxcXCIsXFxuICAgIFxcXCJHZW9yZ2lhXFxcIixcXG4gICAgXFxcIkdlcm1hbnlcXFwiLFxcbiAgICBcXFwiR2hhbmFcXFwiLFxcbiAgICBcXFwiR2licmFsdGFyXFxcIixcXG4gICAgXFxcIkdyZWVjZVxcXCIsXFxuICAgIFxcXCJHcmVlbmxhbmRcXFwiLFxcbiAgICBcXFwiR3JlbmFkYVxcXCIsXFxuICAgIFxcXCJHdWFkZWxvdXBlXFxcIixcXG4gICAgXFxcIkd1YW1cXFwiLFxcbiAgICBcXFwiR3VhdGVtYWxhXFxcIixcXG4gICAgXFxcIkd1ZXJuc2V5XFxcIixcXG4gICAgXFxcIkd1aW5lYVxcXCIsXFxuICAgIFxcXCJHdWluZWEtQmlzc2F1XFxcIixcXG4gICAgXFxcIkd1eWFuYVxcXCIsXFxuICAgIFxcXCJIYWl0aVxcXCIsXFxuICAgIFxcXCJIZWFyZCBJc2xhbmQgYW5kIE1jRG9uYWxkIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiSG9uZHVyYXNcXFwiLFxcbiAgICBcXFwiSG9uZyBLb25nXFxcIixcXG4gICAgXFxcIkh1bmdhcnlcXFwiLFxcbiAgICBcXFwiSWNlbGFuZFxcXCIsXFxuICAgIFxcXCJJbmRpYVxcXCIsXFxuICAgIFxcXCJJbmRvbmVzaWFcXFwiLFxcbiAgICBcXFwiSXJhblxcXCIsXFxuICAgIFxcXCJJcmFxXFxcIixcXG4gICAgXFxcIklyZWxhbmRcXFwiLFxcbiAgICBcXFwiSXNsZSBvZiBNYW5cXFwiLFxcbiAgICBcXFwiSXNyYWVsXFxcIixcXG4gICAgXFxcIkl0YWx5XFxcIixcXG4gICAgXFxcIkl2b3J5IENvYXN0XFxcIixcXG4gICAgXFxcIkphbWFpY2FcXFwiLFxcbiAgICBcXFwiSmFwYW5cXFwiLFxcbiAgICBcXFwiSmVyc2V5XFxcIixcXG4gICAgXFxcIkpvcmRhblxcXCIsXFxuICAgIFxcXCJLYXpha2hzdGFuXFxcIixcXG4gICAgXFxcIktlbnlhXFxcIixcXG4gICAgXFxcIktpcmliYXRpXFxcIixcXG4gICAgXFxcIktvc292b1xcXCIsXFxuICAgIFxcXCJLdXdhaXRcXFwiLFxcbiAgICBcXFwiS3lyZ3l6c3RhblxcXCIsXFxuICAgIFxcXCJMYW9zXFxcIixcXG4gICAgXFxcIkxhdHZpYVxcXCIsXFxuICAgIFxcXCJMZWJhbm9uXFxcIixcXG4gICAgXFxcIkxlc290aG9cXFwiLFxcbiAgICBcXFwiTGliZXJpYVxcXCIsXFxuICAgIFxcXCJMaWJ5YVxcXCIsXFxuICAgIFxcXCJMaWVjaHRlbnN0ZWluXFxcIixcXG4gICAgXFxcIkxpdGh1YW5pYVxcXCIsXFxuICAgIFxcXCJMdXhlbWJvdXJnXFxcIixcXG4gICAgXFxcIk1hY2FvXFxcIixcXG4gICAgXFxcIk1hY2Vkb25pYVxcXCIsXFxuICAgIFxcXCJNYWRhZ2FzY2FyXFxcIixcXG4gICAgXFxcIk1hbGF3aVxcXCIsXFxuICAgIFxcXCJNYWxheXNpYVxcXCIsXFxuICAgIFxcXCJNYWxkaXZlc1xcXCIsXFxuICAgIFxcXCJNYWxpXFxcIixcXG4gICAgXFxcIk1hbHRhXFxcIixcXG4gICAgXFxcIk1hcnNoYWxsIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiTWFydGluaXF1ZVxcXCIsXFxuICAgIFxcXCJNYXVyaXRhbmlhXFxcIixcXG4gICAgXFxcIk1hdXJpdGl1c1xcXCIsXFxuICAgIFxcXCJNYXlvdHRlXFxcIixcXG4gICAgXFxcIk1leGljb1xcXCIsXFxuICAgIFxcXCJNaWNyb25lc2lhXFxcIixcXG4gICAgXFxcIk1vbGRvdmFcXFwiLFxcbiAgICBcXFwiTW9uYWNvXFxcIixcXG4gICAgXFxcIk1vbmdvbGlhXFxcIixcXG4gICAgXFxcIk1vbnRlbmVncm9cXFwiLFxcbiAgICBcXFwiTW9udHNlcnJhdFxcXCIsXFxuICAgIFxcXCJNb3JvY2NvXFxcIixcXG4gICAgXFxcIk1vemFtYmlxdWVcXFwiLFxcbiAgICBcXFwiTXlhbm1hciBbQnVybWFdXFxcIixcXG4gICAgXFxcIk5hbWliaWFcXFwiLFxcbiAgICBcXFwiTmF1cnVcXFwiLFxcbiAgICBcXFwiTmVwYWxcXFwiLFxcbiAgICBcXFwiTmV0aGVybGFuZHNcXFwiLFxcbiAgICBcXFwiTmV3IENhbGVkb25pYVxcXCIsXFxuICAgIFxcXCJOZXcgWmVhbGFuZFxcXCIsXFxuICAgIFxcXCJOaWNhcmFndWFcXFwiLFxcbiAgICBcXFwiTmlnZXJcXFwiLFxcbiAgICBcXFwiTmlnZXJpYVxcXCIsXFxuICAgIFxcXCJOaXVlXFxcIixcXG4gICAgXFxcIk5vcmZvbGsgSXNsYW5kXFxcIixcXG4gICAgXFxcIk5vcnRoIEtvcmVhXFxcIixcXG4gICAgXFxcIk5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJOb3J3YXlcXFwiLFxcbiAgICBcXFwiT21hblxcXCIsXFxuICAgIFxcXCJQYWtpc3RhblxcXCIsXFxuICAgIFxcXCJQYWxhdVxcXCIsXFxuICAgIFxcXCJQYWxlc3RpbmVcXFwiLFxcbiAgICBcXFwiUGFuYW1hXFxcIixcXG4gICAgXFxcIlBhcHVhIE5ldyBHdWluZWFcXFwiLFxcbiAgICBcXFwiUGFyYWd1YXlcXFwiLFxcbiAgICBcXFwiUGVydVxcXCIsXFxuICAgIFxcXCJQaGlsaXBwaW5lc1xcXCIsXFxuICAgIFxcXCJQaXRjYWlybiBJc2xhbmRzXFxcIixcXG4gICAgXFxcIlBvbGFuZFxcXCIsXFxuICAgIFxcXCJQb3J0dWdhbFxcXCIsXFxuICAgIFxcXCJQdWVydG8gUmljb1xcXCIsXFxuICAgIFxcXCJRYXRhclxcXCIsXFxuICAgIFxcXCJSZXB1YmxpYyBvZiB0aGUgQ29uZ29cXFwiLFxcbiAgICBcXFwiUm9tYW5pYVxcXCIsXFxuICAgIFxcXCJSdXNzaWFcXFwiLFxcbiAgICBcXFwiUndhbmRhXFxcIixcXG4gICAgXFxcIlLDqXVuaW9uXFxcIixcXG4gICAgXFxcIlNhaW50IEJhcnRow6lsZW15XFxcIixcXG4gICAgXFxcIlNhaW50IEhlbGVuYVxcXCIsXFxuICAgIFxcXCJTYWludCBLaXR0cyBhbmQgTmV2aXNcXFwiLFxcbiAgICBcXFwiU2FpbnQgTHVjaWFcXFwiLFxcbiAgICBcXFwiU2FpbnQgTWFydGluXFxcIixcXG4gICAgXFxcIlNhaW50IFBpZXJyZSBhbmQgTWlxdWVsb25cXFwiLFxcbiAgICBcXFwiU2FpbnQgVmluY2VudCBhbmQgdGhlIEdyZW5hZGluZXNcXFwiLFxcbiAgICBcXFwiU2Ftb2FcXFwiLFxcbiAgICBcXFwiU2FuIE1hcmlub1xcXCIsXFxuICAgIFxcXCJTYXVkaSBBcmFiaWFcXFwiLFxcbiAgICBcXFwiU2VuZWdhbFxcXCIsXFxuICAgIFxcXCJTZXJiaWFcXFwiLFxcbiAgICBcXFwiU2V5Y2hlbGxlc1xcXCIsXFxuICAgIFxcXCJTaWVycmEgTGVvbmVcXFwiLFxcbiAgICBcXFwiU2luZ2Fwb3JlXFxcIixcXG4gICAgXFxcIlNpbnQgTWFhcnRlblxcXCIsXFxuICAgIFxcXCJTbG92YWtpYVxcXCIsXFxuICAgIFxcXCJTbG92ZW5pYVxcXCIsXFxuICAgIFxcXCJTb2xvbW9uIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiU29tYWxpYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBBZnJpY2FcXFwiLFxcbiAgICBcXFwiU291dGggR2VvcmdpYSBhbmQgdGhlIFNvdXRoIFNhbmR3aWNoIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiU291dGggS29yZWFcXFwiLFxcbiAgICBcXFwiU291dGggU3VkYW5cXFwiLFxcbiAgICBcXFwiU3BhaW5cXFwiLFxcbiAgICBcXFwiU3JpIExhbmthXFxcIixcXG4gICAgXFxcIlN1ZGFuXFxcIixcXG4gICAgXFxcIlN1cmluYW1lXFxcIixcXG4gICAgXFxcIlN2YWxiYXJkIGFuZCBKYW4gTWF5ZW5cXFwiLFxcbiAgICBcXFwiU3dhemlsYW5kXFxcIixcXG4gICAgXFxcIlN3ZWRlblxcXCIsXFxuICAgIFxcXCJTd2l0emVybGFuZFxcXCIsXFxuICAgIFxcXCJTeXJpYVxcXCIsXFxuICAgIFxcXCJTw6NvIFRvbcOpIGFuZCBQcsOtbmNpcGVcXFwiLFxcbiAgICBcXFwiVGFpd2FuXFxcIixcXG4gICAgXFxcIlRhamlraXN0YW5cXFwiLFxcbiAgICBcXFwiVGFuemFuaWFcXFwiLFxcbiAgICBcXFwiVGhhaWxhbmRcXFwiLFxcbiAgICBcXFwiVG9nb1xcXCIsXFxuICAgIFxcXCJUb2tlbGF1XFxcIixcXG4gICAgXFxcIlRvbmdhXFxcIixcXG4gICAgXFxcIlRyaW5pZGFkIGFuZCBUb2JhZ29cXFwiLFxcbiAgICBcXFwiVHVuaXNpYVxcXCIsXFxuICAgIFxcXCJUdXJrZXlcXFwiLFxcbiAgICBcXFwiVHVya21lbmlzdGFuXFxcIixcXG4gICAgXFxcIlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJUdXZhbHVcXFwiLFxcbiAgICBcXFwiVS5TLiBNaW5vciBPdXRseWluZyBJc2xhbmRzXFxcIixcXG4gICAgXFxcIlUuUy4gVmlyZ2luIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiVWdhbmRhXFxcIixcXG4gICAgXFxcIlVrcmFpbmVcXFwiLFxcbiAgICBcXFwiVW5pdGVkIEFyYWIgRW1pcmF0ZXNcXFwiLFxcbiAgICBcXFwiVW5pdGVkIEtpbmdkb21cXFwiLFxcbiAgICBcXFwiVW5pdGVkIFN0YXRlc1xcXCIsXFxuICAgIFxcXCJVcnVndWF5XFxcIixcXG4gICAgXFxcIlV6YmVraXN0YW5cXFwiLFxcbiAgICBcXFwiVmFudWF0dVxcXCIsXFxuICAgIFxcXCJWYXRpY2FuIENpdHlcXFwiLFxcbiAgICBcXFwiVmVuZXp1ZWxhXFxcIixcXG4gICAgXFxcIlZpZXRuYW1cXFwiLFxcbiAgICBcXFwiV2FsbGlzIGFuZCBGdXR1bmFcXFwiLFxcbiAgICBcXFwiV2VzdGVybiBTYWhhcmFcXFwiLFxcbiAgICBcXFwiWWVtZW5cXFwiLFxcbiAgICBcXFwiWmFtYmlhXFxcIixcXG4gICAgXFxcIlppbWJhYndlXFxcIlxcbl07XFxuZXhwb3J0cy5kZWZhdWx0VXNlckltZyA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVpBQUFBR1FDQUlBQUFBUDNhR2JBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINFFvTER5SWk5Zk85M2dBQUlBQkpSRUZVZU5ydG5YZVVYZFY5NzM5NzczTnVuVnVtRjAxUlE3MGdJYnBwQm1QYzR1UVJoNFJrMlg0dkxuaVo5M0FTeDNGYzBvaXhZOGU0NGZvU2x6aE9DUGF6RFFTYkloQWdDMUdFaEFvYWpkcG8ycDEyNTVhNTliUzkzeDhqSVNIVFpqVGxuSHUvbjRWbHpESmFtbjNPL3B6dmIxZVd5ZVVJQUFDOEFFY1RBQUFnTEFBQWdMQUFBQkFXQUFCQVdBQUFBR0VCQUNBc0FBQ0FzQUFBQU1JQ0FFQllBQUFBWVFFQUFJUUZBSUN3QUFBQXdnSUFBQWdMQUFCaEFRQUFoQVVBQUJBV0FBRENBZ0FBQ0FzQUFDQXNBQUNFQlFBQUVCWUFBRUJZQUFBSUN3QUFJQ3dBQUlDd0FBQVFGZ0FBUUZnQUFBZ0xBQUFnTEFBQWdMQUFBQkFXQUFCQVdBQUFBR0VCQUNBc0FBQ0FzQUFBQU1JQ0FFQllBQUFBWVFFQUFJUUZBSUN3QUFBQXdnSUFBQWdMQUFCaEFRQUFoQVVBQUJBV0FBRENBZ0FBQ0FzQUFGNE5EVTBBcG9zNjQ3L1VxWC9JR0UyYXpxUmg1U3huMG5Cc0tjTzZDUHRFUkJNaG54YjFDYVZPL3c3czVIK21mZ0VBd2dLemdWU2tTQ2xGaWtnd0dzd2JQYW5pa1d6eGNLYllreTRkTHhxanBrMm1RNFpObG55ZDM0c1JCVFRTQlBsRW15NldSd0tYTkVYUGI2aloyRlRUR3ZaTFJZd1JJOGJoTVBBYUwxRW1sME1yZ0RQVGsxVEtVWW9SRzhvYjI0ZlN6NDNsRHFTS0I3SWxNMXNpUnhJN014ck5LQ2E5bE5DbS9rWXBDdWtibTZOdmFvcHNhSWhjMEJSdHEvRUp6amhqZ2hGbkVCaUFzTUFadVVjUzJWTFpVbGxTRGVXTkp3ZlRqeVhTVHc1bVM5a1NNWnBLUGtSc2J1dTNxUlNuRkNsRnVtaHZpTHgxVWZ6cTl2Z0ZMZEc0WDlNWTB3WG5aMVNnQU1JQzFlVXBSVlIyWk1GeStyTGxiUVBwUnhQcHA0YXpsQ3NUNThUWUtVOHRWTkpUVTJHUFNMVTBSbTVjM25UVGl1YXVxRDhndUY5d0JuTkJXS0JLUE1VWW1ZN0tXODV3d2ZqeG9kRWZkQStYSmdxa3VVQlNyeUV2cVVpcXp0YllIeXh2L0wzbFRXMDEvaHBkK0FWVEN1YUNzRUFsd2hrcFJUbkxTUm5XODhPVDN6NHc5T3p4SkJFandjZ3I0MFJTa1ZTazFPYkY5UjlhditqU1JiRjZ2eDdSQldNRWMwRllvR0pVeFpSU3liTFZOMW0rKzlESTl3NE5VN1pNbWlEdlRzaEpSYlpEc2NBdHE5dHVXdG15S09Lcjkrcyt3YVZTMEJhRUJieUtZRXdxTlZveWo2WkxYMytoLzhHREk4UThGYWxldDFSMEpCRmR0cXp4ZzJ2Yk5yVkUyOFArZ01ZZENXMUJXTUJycWxLa2h2Sm1UNnJ3clgwREQzZVBFbU9rVmVqR0JrZVNJMXRiWW45NzBlS0xXMk5kRWI5UFFGc1FGdkRFRTJXa2M1YkltM3ZIYzkvWk4vaEl6eGdSVmF5cXpxNFQ1YkwyK0tjdTZMeWdOZFlWQ2VpYzJSTFdnckNBVy9FSm5qUHRQUlA1SCs1UDNMMXZpS1NxQ2xXZGxiYWtPbjlKL1cwYjJpOXVpeTJPQm0ycEVMWWdMT0F1Tk02SXFEdGRmS1IzNGxQUEhLZThRVUpVNzFZOVJ4TFIyMWExZlBqOGpvc2FhK29DZXRtUmVFa2dMTER3Y0VaK3dmdHo1WjJKN0pmM0RPenRTeEZuaEMxNWlzaVJGUFo5Y2xQbk8xYzBiYXdQTXlKVWlCQVdXRWo4Z3VjdDV6ZWprL2QwRC8vbmk4TmtPbFZYQTc0MlVwRlN5OXZpbjlyU2VXMW5YVXZJVjdJUnRTQXNNUDlQamlpa2lVT1p3aThQajkzeHdrQXBYU1RCQ1Z1Rlh4RmJpb0QyZ1kzdDcxdmJ0cm1oeHNTb0ZvUUY1aFBCbUdDMGRUaDcxKzcraHcrUGtTTkpJRmk5WHRRaTJ0QmUrNGt0blRkMDFZZDFZV0JVQzhJQzgxTUc1aXpudnFOam4zNnViM1Iwa2poRHNIcERLQ0xIaVVXRHQ1N2Y4VWVyVzFiR1EwWGJRZENDc01BY1VxT0x3NW5pRHc4a3ZydDNNSnN6TUdJMWJSekpOSEhOc29iYnRuUzl0UzJPOGhEQ0FuTUNaNlJ6L25BaTg3WG4rNTg0TnU1WURzckFtVVl0UlZKMXRFVHZ1R1RwN3l4dDBEaXpNSHNJWVlGWlJEREdHTjEzZlB5dm5qbytNSUl5OEp6ZmV5Smx5K2JhMEo5dDZYenZtclk2djRhRldoQVdtQjAwem15cGZuWms3TE03amcxUDVKa21rQWRteTFtUnNPL210VzEvZGtIbmttZ0FLeDRnTERBTHRqSWQ5UitIUnY3K3FXUGptUkxUT0d3MW16aFM2T0tHODVwdXYyelp1cnBRRWM2Q3NNQ00wVGtyMmZKSEx5YnUyTms3a1N2RFZuT0NWTVRZVmNzYjc3enl2SFYxSWVRc0NBdk1CQjluazViem5SY0d2N3FyTDVQSGhPQmNvaFF4ZHZIaStydXVYcm0rTG9UeExBZ0xUTk5XZ3FmSzFwZDJuZmpYRndiekpRc1RndlBoTEdJYnUyci83NXRYYmFnTHcxa1FGcGlHcmNaSzVtZDNITHZuNExCaE90akpQRi9PSWlLMXZLUDJ4OWV0M2xnYk1ySFd3WDNndSswNmRNN0dTK1puZGh6N3lmNEViRFcvbjI4aVlrY0gwamMvY3JBN1cvWng5QTRJQzd3bWdyRkowL25xN3Y1LzN6OGtwWVN0RnNSWnZRT1pXeDQ3TkpBdjYyaC9DQXU4NnNOZ1pEanlSd2VIdi81YzM5VFVGZHBrWVp6RjJITzlFN2RzNnhrdldScWNCV0dCVitnbWpHeEpQejg2L3RrbkRqdTJoSzBXT21mUnRpUGpIOTkrWk5LMEJaNEZoQVhPNmlCUzBVTW5raDk5NUtCbG94SjBpN04rOXVMdzU1ODlVWElrSGdpRUJVNmppSjVKWlA3a1Z3Y3NDNlBzYm5LV29tODgxL2VkdlFPV1ZIZ3FFQlk0eVlzVGhiZmZ2OCt4SEZTQ0xuVFczeng1OUo2ZVVRZW4wRUJZZ0JHTmwrM0w3M3RCbGl6WXlyWE8rc2pEM2J0SEoyRXNDS3ZhTVJ6NXAxc1BVcVlNVzduYVdWSmU5OS83SjhvV0dnUENxbDRjcGI2M2YrakpJK01ZdDNLOXN4amxqWnNmT29pTHdpQ3NLa1VSdlRDVys4empoMkVycnpqcjJlUEpyKy9waDdJZ3JHb2tiVGpYM3JjWGxhQ251Z3Y3aCsxSGQ0OU9vaVVncktvckJtOThZQjhWVERTRjUzTFdkZmZ2VFJrMldnTENxaUsrdW50Z1QxOEs4Y3FURk16My9Pb0FDa01JcXpxKzBFVEhNNlhiZjNNVVExZmVEVm5QbjVqNGx3TUpQRUFJcS9LUml2NzRrWU5vQjQvM0cvYUo3VWRHaXhhVUJXRlZNb0t4ZnpzMDBqMlVRVk40SHN2NStQWWpxT2tockFxdUpHaWliTjMyeEdFTVhWVUc5eDRjZVdRd2cvTm5JS3hLYld2MlZ6dU9ja3d3VmM0bmlHN2MybDIySll3RllWVWFPbWZiaDdQL2RTQ0J1dzBxQ1MxYitzS3VFem9PVTRhd0t1dExUQ1ZiL3Vtamh3aHo0WldGcmVqT1hYM2Q2UUlPK1lPd0tnZS80SGZ1NlIrZktLQXBLbEphZi9Ia0VReGtRVmlWMHNTTUpzcldsMThZdEhHZ1VpVWlsZHJabDNwOEtPT0R0Q0NzQ2lDb2lUdjNEbElKSjVOVUxKWlUvL1RjaVpQSEtnTUl5N3N3UnVteTlkMERRd1p1RXE3Z2tDWFY4NE9aN2NNSVdSQ1d4d2xyNHM3OVF6WTJPVmY0ZDRuS2p2eks4LzBDd29Ld1BCMnZzb2I5M1JjVFpSdnhxc0p4SFBuMFFQcTUwVW5jdlFwaGVaV1FKcjdmUFdKbnkxak5VQTFmcDd4cGYzbDN2MStnVDBGWTNveFhlZFA1MGNIaG5PVmdOTFlhc0IyNXZUKzllenlIelRvUWx2ZndjMzVmYjNJd2xTZXNacWlhYjFTMlpIMWx6MEJZRjJnTUNNdHJ3dEw0VDdwSHNnYXVHcXdpTE50NWFqQTlVakE0SGpxRTVTRUVZMGZUcFVQak9ZWFZERlZHb1dUOWQrK0VYMEJZRUpaM0NHajhubVBqR2NQRzZGVzFWWVVUaHYzTFkrTStETDFEV0Y1cVZzWWU2UjJmTE9NeTU2cEQyZkxRZVA1d3VvU2hkd2pMRytpYzdSbWJQSkVxRWk0cXFNYVFSYW1pZWUveGNheHZnTEM4UVZBVGR4OGRIeXNoWGxWcFZaZ3VXMXY3SnBDd0lDeFBmRi9Kc09YVEErbWlZV0VBcTBxUnFqZFZmSDQwaDFYdkVKYnI2MEhCbnh1YkhKNHNZWFY3TlgrMXhvcm1yL3RUcUFvaExOY0xpN01kSTlrVTVnZXJ1eXJNbHEybkV4bWhvWDlCV081R0UzeEhJcHZHQUZhVjQ4aXhYSG1zWUdJRktZVGw0dFprTEZVMHg3TWx3bnJScWc5WjZaSzFkd3pEV0JDV20rTVZaL3NtOHVteWpYaFY5Y0tpWk5uYU5RNWhRVmd1UnVkczExZytXY2I4SUlURk1pWHI2ZEZKZ1hGM0NNdTlDVXZ3N1NQWlZORkV3Z0xreU5Sa2VSd2JvU0VzbHpZbFk2bWltY1lBRmpnVnNwSkZjMzh5ajZvUXduSnBQYmd2bVU4aVhvR1R3cUt4a3JVYndvS3czSWxnckNkVFRCczJtZ0pNR1N0VnRwNUtGM0V6QllUbFNtRng2aXNZa3pnUUdaeEtXR1E2VHM1QTRvYXdYTm1VakIzTUdVWEx3WVdhNENXS3BwMHVZZmtvaE9YR0x5cWp2RUVtRWhZNEhiSnlwcDNJbXpoL0ZNSnlYYnhLRm8yOGlRRXM4TEp2MktUcEpMQ3lBY0p5RzRMUmNNSE1JVjZCbDVNejdhR2lJU0FzQ010dENTdFJNSE1XN3NnQkx5c0pNNll6a0RkUUVrSllia3RZYkNoZm5rUkpDRjV1ckx4cEg4a2JIQ3NiSUN5M2xZU0RSVE9Ma2hDOFBHR1I2UmdGRXkwQllibXVKRXdhZGhHYmNzRFpLTXR5REVmaVF3Wmh1WXVzTGFWVVdJUUZ6a3BadGxLR296QzJDV0c1Sy95WEhZbDd2Y0J2WTBscDJGaE9ER0c1RFZ1U2xIZ3R3VzhKaTBvb0NTRXNseVVzUmtoWTRCVS9aSTRzMnhJbElZVGxLaFJaRG9RRmZudXN3SklLZys0UWxxdmVTYklkNVdEQUhieHlTYWlRc0NBc2Q1V0RKVnVhVXNKWTRCVktRcWtNQis4R2hPVW1aWmxTT3FnSHdhc0lxNHlTRU1KeVdWWElzSXNRdk1hZ0FZQ3czSUlpNWVOTVk0d0lJUXVjamNhWlh3aThHUkNXaTR6bDE3aUdEYTdnbGRBNTh3dDh6Q0FzRi9tS2RNNGdMUEJxQ1N1Z2NRVmZRVmd1Z2pFU0dNWUNyL0ExMHprTENBNWZRVml1ZWk4VkNVNElXZUNWRXBaZklHRkJXTzU3TVlreGpGU0FzOUE1OXd0ME5BakxiYjVDd2dLdmtiRHdLWU93M0ZRU1VwMHVtT0NZREFKbmpSWDRCQXY3QkVwQ0NNdEZPRXAxQkgweFhhQXB3Rm41aWdkMG5UUDRDc0p5bDdEYXdyNm9MaEN3d0pueGluVFJHUGJqcllDdzNJVlUxQmIyUjN5Q0VQM0JHY1I5MnVLUXo4RmJBV0c1TFdHMWhQUUlTa0x3c29SRlVWMjBoU0VzQ010OUNhczE3SS9vR3NJL09MTWtqUGhFVzhpUGd6d2dMTGNKUzlVRzlJQlBZR00rT0pPSUxscVJzQ0FzZCtJTCswampDRm5ncFpJdzR0TmFhdndTd29Ld1hCZXlwRm9UQzlYNGRTekZBaTkxTDE5QXEvVnJLQWtoTE5kaEs3VytMdGdRd0RBV21JcFhLaERRVjllRmthNGdMRGRpU2JXK3JxWWhvR05sQTVpcUJ4c0N2ZzBOTlphVWFBd0l5MzBKUzZxVmRlRjR5SWVtQUZNSnF5R29yYXNMMnlnSUlTeDN3b2phYTBQY2g2b1FFQ21xOSt2cjZtc2dMQWpMclNGTHFjME5OZlVCRGVQdXNCWDVSTGcycUF2c0lvU3czSW9sMVliNm1qcS9EbC9CV0xWKzdmSUd4Q3NJeTgwSlM4ck5UWkg2SU1iZDRTdXFDK2diNmlBc0NNdkZTRVVSbi9EVmhnaWJDcXRkV0tvcDZMdTBMWVlwUWdqTDNWV2hvMjd1ckcwTytoQ3lxamxla1UvcmFJbkVzR1FVd25JNWhpT3Y3YWh0Q21FWXE2cmoxYUtRNzNjNzZ3d0g4UXJDY2plT1Vrdmo0WGhkbUFTMlFWY3Z6V0hmRFoxMUpvUUZZWG1nS3JUbGV4YlgxNk1xckZvMEhtdXNxUTNvcUFjaExBOWdTbmw5WjExZEFGVmhsZGFEelVIOS9WMzFxQWNoTEc4d3RVZW5NUjdFclY5VktTeXFEZnJlM0ZGck9maGVRVmplcVFwdlhOWVF4MGJvS2tUdzV2cFFlelNJUS9zZ0xNOWdPUEwzbGpiV2g3RVJ1dXJxd2FhUWZ1dWF0ckxsb0RFZ0xNL2dLTFVrRmx6WFVTczByQ0N0SmhqcnFnMi9lMmtqNWdjaExJOVJzSnhQYjJodkNHR3VzSHJpRlVYOTJrMnJXd2g3M3lFc3oyRkxkV0ZMN0x6bUNPTm81R3FoT2VML2t4Vk5aY1FyQ011TGxHem40eHZiWTM0Y2oxVVYrSFYrOWRMRzVoQ3VuSUN3dklucHlMY3ZhVmhjRzhMZFg5VlFEOVlFZmY5blhWdmV4bkE3aE9YZDExaXA5Njl2QytMdXI0cnZTSUp0V0JSYjF4QnhzTHdkd3ZJdVpVZiswWG5OYlRHRXJBcVBWd0dmOXFuek80dVdqY2FBc0R5ZHNLZzJvSDl3VTRlR3ZkQ1ZpK0RzaXM3YXE5dmpGdUlWaE9WMVNyWnp5OXJXOVUwUkdLdGloUlhVUG5mcFVtd2VoTEFxbzF3Z3YrQ2Z2SGdwRTJqdENvUXgrdjFWTFp1YklqZ05HY0txRUF4SHZtdEp3MVZkZFdqdXlxTXhHcnpqd3NWNTdNV0JzQ29KU2VvZkwxc21mZGlwVTJuOHhZVmRiVFVCcENzSXE2S3dwZHJTSExscGRTdDI2bFJPTVVpMHJqbjZvVFZ0UmF5OWdyQXFqN0lqYjc5b2NWMDhoS2FvREJTamYzalRNaC9tZnlHc3lueS9GWFZFQWwrNllqbWhmcWlFSWw5OWFIUFhXenJxc0pRQndxcFlERWUrWjFuakgyOW9KeHhINmZHUHo4cVc2S2N2N0pMWXdRQmhWWHdkOGJlWExtbXVEK0ZWOXpDQ2YvV2FsZlZCSFFPU0VGYmxGNFp0TmY2N3JsbUYwWGV2WWp1ZnVuelo1YTB4TEx5Q3NLcmpoWmZxdW83YTJ5NWRRcGhkOGh4U2JlNnEvK2o2UlRoREJzS3FJaGlqajUzZnNiSXRqZ0Y0THowMUloTHNxOWVzck1GNk9naXIycWdMNk4rK2JqWDVOWVp2dFVkc3BTem42OWV2V1Y4ZnhoT0RzS29PUmJTcG9lYkhiMStyRk02ZThjTHpNdXkvdm1yRkh5eHZ3c09Dc0txM01MeWhzLzdMMTY5V3BvMXU0R29zNThaTjdSL2VzQ2lvb2N0QVdGV016dGxOSzVwdnZXeTVNbkgybTF0eDVLcjIrTzJYTGF2MWE2Z0ZJYXhxSjZLTDJ6WjN2SFZOSzJISHZ3dVJTa1FEUDNqcjJrVmhQMndGWVFGU1JFMUIvWXRYbm5kZWU1eHdDSnlyYW5hbFNPZS9lTWVHVmJVaDJBckNBcWVkdFRnYStPSDFhMFB4RUJZNnVPaTVLUFVmNzl4d2VRdE9pNFd3d05sOWc5YlZoZjdySGVzb3FHTVJ2Q3V3blcvZXNQYTZqbHFOd1ZjUUZuaWxuUFdtNXVoL3ZtTWQ2UUxPV21BczU0dHZXWFBqaW1hLzRIZ1NFQlo0MWVkeFEzdmREOTYybGpqRDd1Z0Z0TlZmWDduaTV0VXRRUTIyZ3JEQWE0WXN6dWhkaXh1KzlwYlZ4QW5PV3BCSzhKYUxsM3g0NDZLb1QwUE1kUnNhbXNDRnp0STVlLy9xVnA4bVB2TElRVElsRnNMUEg0NzgyS1hML21KTFY5eXZPZEFWaEFYZW9MTVkwWHRYTk91YStNRFdiaW9ZaEhIZitXaDA5Y2tybHQrMnFiTkdGN0FWU2tJd3ZlNWpLZlVueXh0LytyYTE4VmdJWS9Celg0clQzMTIxNHVNWGRNRldFQmFZSVdWSHZudHgvVS9ldG1acFl3VE9tdE1pL0hOWHIvall4ZzZmNExBVmhBVm1UdEdXMTNmVS9ldjFhell2aXBOU0dJYWZkVVNONzB2WHJmN1krUjJjRTQ3bGc3REF1Vkt3bkRlMXhiNTEzYXJybGpZd3poQzFaaWxZS1NKYTBWUnp6dzNyL214ZG15MFZ0aGk0SDViSjVkQUtuaUNnOGVHOGVmc3p4My8wNHJCak9wZzZQRWRiY2M2dlcxSi8reFhMdHpSRmNpYTJuVU5ZWUxiUk9TTkZkK3dmdkd0WGZ6WmJPam1iQ0tadks4MnZ2WDl0MjJjdVh0SWE5aFZ0aVZhRXNNRGNQREJHVVYzNzVmSHhmM3JteEhPSmpPTklySGlZbHFvWVl3MjFvUTl1N3ZqMCtuWmloR3RRSVN4d1dpNmMySlJQcHFUQzZOVC9KaUlpVzZxWnpVbEZmT0pJcHZ5NXA0L2ZmWGpVS2xuRTRhdzNnRlNhTHE3cHF2djRSWXV2NzZ5Yk5PMFp0RDFucFBQVEk3K0sxTlJ2b2s3NmtCUmhMQXpDOGtSVEVqSEdPQ05HSkJoVFJEbkx5UnBXMFphR0kyMnBMS2tNcWNwU09WS1NWQ1RWaXJyd2tsalFuTkVaV0Q3QmxWUi92M2ZncHdjU3ZlTjVrZ3JhZW8xZ1JVUzFrY0Fmcm1uOTdKYkZqU0c5TUtPekVnVmpCZHQ1ZWppcnB0VEZXWWh6SDJPNllGTy9CalVSOVdsUm45QVlrMFJTS2FWSUtzeVNRRmh1aWxHQ01aMHp3MUZadzg2WVZ0cXd4d3k3VkxiN3M2WEQ2VUtpYUtZTk8yODZPZHZKV2pKdk9XVFpaRGxreWQvZHNPalRseXhkM3hBdTJ6TnhGaU9LQnZRbkJsUGYyajN3WUY5cU1tOU1XUk1QNWF4Z1JScS90QzMrdmcyTFByQ210ZXpJbVYyQXFuRTJhVHIvc24vb2I3YjFrRkxrMDBnWGZrM1U2anppRXhGTmkvaDRVOGgzWGp5MEpCYXNEZmxxZlZwZFFJdjc5YmhmQzJyY2tjcFJDRjhRMXNMbEtjR1pqL09DN2ZSTmxvOU5sZ2F5NVJQWjByRnM4VWltZENoYm9sejU1RlpteGs0VmhPejB2MHlNR0pFanQzVFdmZkdxRlplM1Jrc3pjcFlpQ21wY0t2cm1pNGxmSEJ4NWFpaE50a1RVT3EwcW9xNzY4UFhMR20vYjBMNjJJWncxWm5od3ZrL3dzYUw1clQyRFg5eDU3R1R6bmxVS1R2MjlVaWZYeWdYMWpuaHdaVHkwUEJaY0VndDJ4b0pkc2VDeWFDRHUxeHlwTElYUUJXSE5yNmNNUi9aT2xucXlwZTd4L002aHpNT0RhU2RYUGpWd3hVNTY2bzExcXE2bW1xOWRzL0x0bmZVbDIxRXovVk5GL2RxTEU0VnY3Qjk2K09oWTczaCtHbitBeXF3QmlhU2trTy8zbDlULzRaclcvN0dzcVdRN3BsUXphNUdneGc5bml0L1lQZkM5WFgzRStSdWFtVldLNU5TdmlwU2lvSDVSVy95YTl2aTZwc2g1OGRCNThXQkUxeXdwYlpnTHdwbzdWZmtFVjByMTVzb0hVb1dERTRYZGlleldvVXdwV3lJaUVuem11VWFxZUczb242OWU4Y2RMR3kybFpyellXdWNzcUltZkh4dS9wM3Y0bm1Qak5EVVlYNFhhY2lSeGRsRkgzVlVybWo2NXJpM3Ewd3JuY0x0SGpTNTJqZVh1ZVByNGZkMGpKR2E2MEZvcGNoUTVrb1Y5bDdmRkwyK0xyVzJzV1ZVWFhoa1ArVFZ1T2hLbElvUTFtL2dGbDBydEdzOXZIVXdmU0dTM0RXY3k2U0twYy9QVVdjVkxqZjlyVnl6L242dGJHR1BPT2J5L1lWMWtEUHVMQnhLN2U1T1BKakpVTkVud2F0R1dJNG14ZFMzUks3dnEzcnU2OWVLV2FNNTB6bVczVGRRbnRnNW0vbmJIc1owbkptYm5RWjh5bHovaXY2d3R2cmsxZWxWNzdSV3RzWkF1eWc3MkJVRlk1NHpPbVdCc1g2cndpMlBqRHg5UFBqK1lKa3VTeG1kL25FZ3FGdFJ2djJUSmh6ZTAxK2pDT0lmcmN6aGpFVjI4T0ZINHp4UEpmZjNwQndkVFZzNllOYmU2VmxWRUd4ZkZyK2lzZThlUyttdmI2MnlsekhOcnc2RGdQKzFOL3QxdmpoNGVtWno5cGxPS2JFbEVTMXVpYjEzVytLNGw5VmUyeGpYT0RBZGhDOEthRVlJeG4yQTltZEl2am8xdlBaN2MzajlCbGlSTnpPSGljcW00VDN4c2MrY0hON2F2aUFWejUzWk5vYzVaU0JOSE1xWDcraWFlN1UvOXVqK1Z5NVRtUkxVTGlGSlRxV3B6ZS95cXJ2cTNMYTYvYWxHdFV1cGN1cjBpQ2doZWR1VDN1MGYrOFpuZWRMbzRkeTNHaUpRamlXaDFTK3pLcGZVM0xtMjhzalVtbFRKaExRaHJXcStSVC9DMFlmK29lM2hyYi9MUi9qU1ZyYmxWMVptMW9lRHZYdEgwd1kzdE4zVFdGVzE1am5XQ3hsbFE4UDU4K2FIKzlNNysxQU45RThsa2dRUW40ZkhoTFVlU0l5bnN2M1pSN1piMjJQVWR0WmUzeFpVaTg1d1RTa1FYaHpMRjcrOGIrdHJlUVh0ZUZ1VXlJbVZMNHJTeExiNWxjZjJ0YTlwV3g0T0dSSVVJWWIzaFlMVnRNUE90ZllNUEgwdVc4d2JwOHpzR3BCUXBXdG9jK2NpbXpnK3NhZ2xvdk95YzYyWTN3WmhmOExHU3VXMHdzenVSMlRHU2ZYWTRTMFdMTk00NFZ4NFNsMVJUMWQrUzVzaGJ1K3BYTjBjdmE0NnVid2pQaXFvWVVkU25QVHlRdW10My8vMkh4K1o1TGU1SmJXbjhUWjExNzF2WGV2T0tGdXdjZ3JCZUI3L2dPY3Y1eXA2QiszdEdEd3huVHk1UVdLQ2VHUWo3UHJTdTdTUG50NitNaHlkTis5eC95eWtYRnl6blFLcXdPNWsvTnA1L2REQnpjRFJMcGtPQ016ZmZaM1hLVTAzMTRUZTF4amExUkRjMlJTNXNpallFZEZOS2V6YXlpTTZaenRtM2UwYnZldTdFa1pGSm9vVlpnc3NVS2R0cHJRdGR0cXp4N3k3b1doRVBsbTFJQzhMNkxUaGpJWTAvT3BDK2MwLy9ZNzBUVnNraWpTOTRMOVUwZnZXU2hvOXU3bnhYVjEzSmxyTnlHQ1pucEhHdU1ab28yeSttQzN0VGhaN2h5WWNHVTMxamViTGx5Ykg1bHhhN0xxeWtwQ0lwaWJIbWhwcXJGOFUzdDBaWHhFTXI0cUVsMFFCbnpKUnF0cXFtcUUrY21DeC9iLy9RWGZ1SDh0bnl3di80VWhHanl6cnEzcnUrN1grdGJqV1ZnclVnckpjTjlKaTJ2R04zL3dNOW85MmpreTVhdnFRVUViWFgxOXk2dWZPV3RhMUJqYzlzUWZ5ck9Wcm5qQkdORk0yZVRQRklwdFE3a2Q4M1VYZ21tWjlNRjArdW1PZFQvcHFYbjFTcWs0dkZwU0xCUXJIZ2xvYWFqUTAxNXpYVUxJc0ZsOGFDblRWK3daa3QxU3d1QU5BNEMzQitiOS9FZC9jTVBONDNZWnFPaXlZbGJLZWxOblRCNHZwL3ZtVHBra2lnN0VoMFZRaUwvSUtmbUN4OVpOdmhuUU1wbzJUTmZISGdYSDV2YTBLKzN6MnY2YU9iT2k1dWpoWXNaM2JQSFJlTWFad1JVYXBzalJiTjRaSTFWalFITXNVWHhuSTd4M1BEeVFJWjl1bllOZVV2ZGc1T1Y2ZkU5SktlR0tPd2Iwa3N1Q0lhNkl3R1drSytSYkhnb2tpZ0phZzNoM3dOQVowelppczE2d3VWYW5TUktCamYyanYwNDRQRFEra2lrWExkUklSVXhObUZyYkhQWExiMEhVc2E4cFlEWVZXMXNFSzZlQ3FSK2ZQSGVuWVBaeGRxMk9JTnZyaEM0NHZyd3pldmFmdm91cmFHb0Y2d25Ga3ZFamhqbkpGZ2pJaHlscE1zbWlObEsxdTIwa1V6VVRDR0M5Wnd3UmdxR0VNRmM3Qm8wR1I1YXJNZW5UNUFoNTArUm9kZWR1VEtTMm1SZEVGK2pYemEwcEMrUEJaY0Znc3Rpd1hib29FYXZ4YlRSZHluUlh3aXBJa2FuOUFZYzVSeTFKeWNzNjV4RmhEOFYvMnBPM2YxUFQyUUxwZGQrYUY2Q1VjdWJRaC83S0xGdDI3b21KWFJUQWpMazhUODJvOFBEWC91TjhkN3huT3VmbC9wVlA5WEtoelFOeTJLMzdhNTQ1MWQ5VktwdVp0Rm1qck1TekNhR2kwcTJVN0psaVZiRm0ybmFNdWM0emlXTkd4WnRKeTg1UlFzcDJnN09kUEpXN0pvV25sYlNxVmlQaEh6NmJHQUh2Ynh1RStMK3ZTb1R5aE94TG1QczRqR0k3cW84V2tSWFlSMHdlamtNU3h6ZmFUVTFBbUkvZm55bmMvMzNYTm9kSGl5VEVwNVlJV0hWSTBSLzgwYjJyOXkrZktjYlZmdGlvY3FGZGJVYnVIUFB0MzcvVDBEaVd6SlMyc3BsU0xHR3NQK2R5MXYvTVJGaTVmSGdrVjdQaFpITTBaVFJlQlVYVGgxK0plamxLT1VMWldqeUpIS2xtcXFjSnZxVHpwakdtZTY0SUtSenJuR21jNlpPdlZUS0RxNU8zZys5LzhHTlY2eTVQY09EWDluMzlCd01sOXkxWWpWRzNqMFFiOSt5Y3FtKzk2OGlqaXJ6aVh4MVNnc1JoVFN4UHUyOWR4L2NEaFhNajI1ZmxJcXZ5N3FhME8zbmQvKzRUVnRVMnUxRnJBOTZYUTV5TTZxQ09ubFozSXVGQnBuR21OYkI5T2ZmL2JFdnVGc3JteTVlZ1RnTlZLMnhpL3BxdjEvTjZ5TCtiVXFuRHFzUm1GRmRISGRneTl1N3htMVBYMzNqQ0lpVmVQWDE3VEY3cmhzNlJXdHNhbERUUW04SE1GWVFPTkhzNlhQUFgzOFYwZVRxYko1Y3BqZnk1L2NDeGJGNzMzWGhuaEFyelpuVloyd1lqN3RwcTNkUDl1ZmtIWkZUTGdvUlp6VkJuMXZYbHovNXhkMGJtbUtRRnRucXNvdmVIK3UvTTk3K243V016WlpNRTNMcVpDdGxJd3U2S3g5NU4zbmE1eFgxUmFlNmhKV3pLOTllRnZQdiswZExGZllQWFJLYVJxUDZOcjU3ZkdQYitxOHRxTldraktkNnRYVzFKciszbXo1Qzd0TzNIdDRyR2phaHVWVTJoazduRjIwdE9IeGQyNndxK25haXlvU1ZpeWcvK1Z2am41blYxL2VxTkNKWWFXNDRHR05kelJIUDdXcDg4YmxqYXI2OXYzcm5HbWNIVW9YNzNqMnhLK1BqcGN0eDdTZGlqME9UTEJMejJ0KzR1M3JTMDYxZkoycVJWaFJuL2FsM1gzL3RMTTNWVEFyL1BKUlJjUlpXSEJXRi9yQzVvNzNyVzdWR0p2eGZXTGVTUnVrY1U2a2ZuRTArZTBEUXk4TXBNdU90QjFWK1JmTmF2emExUzJQM0xDdVN0Wm5WWVd3QWhwL3FHL2lmei9jM1o4dFZkV1J3WDdCdFpCKzAzbk43MTNWY2tscmRHckJRWVdKYStyS290N0o4dmNPREg2M2UxVG1qVm5jWStpSjcxTW9vSDEwUzljWEwxK1dOU3JmV1pVdkxNSFlwR20vOHhjdjdFbGtxdk5lQnNHWnhwaUlCVzVkMVh6emlwWlZkV0ZMS3E5ZmxzY1pFNHlVVXZjZW4vaksvcUg5L2FtaWd2aW1BQUFMZjBsRVFWU3BKV0JWK0h4SnFhNTQ2QnR2V1hWOVYzM1pydkQ5aGhVdUxFWVUxc1UxRCt6ZmZtaVVxdjQ4Tk00WTV5ellWUFBaMVMzdldkSGNIUFRaODd0dWMxWktQODVZd1pJUDk2ZCtmbXpzMThlVGxtRkwzRDJqMUpaRnRiOTg5NGFZWDYvczJyL0NoVldqaXkvczd2L1N6dVBab29rYlJzLzB1T0lzMGxqejNzNjZ0M1RVWDl3YURldkN6YjErNm5hMWdjbnlnLzBULzM0MHVYY2c1ZUM4bGQ5cW8ydld0RDU4dzdxaVhja0Q4SlVzTEovZ3o0eE0zdkxRaXoxVDkvU0JWL2s0a3lZYW15UHY2Nmg5YzJmOXBxWklVT09LRm5pMGVxckxTYVdPWmtvN2h6TlBKcklQSmJLRlRHbnFvQ2p3aXM4eEh2Sjk0cktsZjdtcHMxQzVoenBVckxBRVl6bkxmczkvNzkvUm15VE84VDYvQVVNb1VrUStzYUkxZG1OSDdYV2Q5YXZyd3o3TzZQUnhER3d1RHJhYjJ1MTg1bmt6ZThkekQvZFBiRTFrOXc1UHlyTDFzbk1nd0d2Z3lEVk4wVzlldi9yaTFwaFpvWWRuVmF5d29qN3grNDhlK3ZrTGcrVGdtendUaFpCU3BIRmZKTEFxRmx3WkN5eUxocFpHQTB0aXdXWHhZRkFUZE1ZdWFDSmk3UFFXd3Bla2R2WXQ3dlRTdHNLVHY3MHQxV2pSN0VrVmptV0xoek9sZzVuU3dVeXBQRm1hdWdqbjVLbGJZSnJPdW5wNTQzKzhmWDFFRnhVNW1GV1p3Z3BvL1A3ZTVDZTNIVDZXTEpEQVN6OGJ5ZXRNa1lYMCttaXdLYURGZFMycWk3RE9JbjQ5b29rYWpkZjQ5QnFkUjN5YXp0bWthZWN0V2JEc3ZPMFVUR2ZTc25PV3pKdDJ6cFladzBtVXpISzJUTTZwVlowblBZY2tkYTRmRzkybjNYWmgxK2N2VzFhUmhhRldlVDhTWnl4dk90L2ZuemlXekh2Z2xDdTNmOUhPbE1ncGwxaHlJcG1mb0ROT1lGRDBzdU1ZMUpuLytrdC96MTdodDlVRTJuaFdueGV6U3RiV1k4bmZXZEp3WVhQVXFMakNzQUw3YzBDdzd4OU1QRFdZUmtFeHB4MkRHRHQ1cXhCbkpCZ0pmdm92N2RSZlovNURmc2IvbnlGSnpWMEk0UzhNWjc1K1lFZ3FWWGs5b05LRTVlUHNZS1o0NytHeDdHUVpNNE9nV2d0RDl1eUoxTStQalFjcXJzS29xSitIRVhIRzd0eWYyREdRUnEwQnFoZkIrcFA1dTd0SFJvdW1WbG1mN1lvU2xsL2p2KzZiZVByWU9Ea1NGUWVvOHNMdzBmN1V2L2VNQ2xaUmRXSGxDRXN3bGpXY3UzdEdENDlNWXF3ZFZEdU1sZlBHTDN2R25rL21mUlhVSFNybkovRUwvcXNUeVcxOUU3QVZBRVRFTlBIc1lPcnVvMk9NS3FmZXFKQytMUmhMR2RaamZhbXhpUUxHMmdFZ0lzV0lIUGxzWCtyWnNWekZoS3dLK1RIOGdqODZrSDdrUkJKajdRQ2M4U1VYenc2bEgreWZVRXBWeG1lOEVvVEZUOFdyRWNRckFGNVdGaEpaOHNrVHFYMnBRbVdFckVyNEdmeUNQem1VZWVENE9PSVZBR2VqOGQ4TXBCOGZTTXVLQ0ZtZUZ4Wm5MRlcySHUxUGpTVHpEUEVLZ0xOREZpUFRmcWczMlowcDZ0NFBXWjcvQWZ5Q1B6TTJlZSt4Y1JJY0o3b0I4SW9oYTl1SjFGTkRtUW80bU5YYndtS01pcGJ6VENJN01wNWpXTTBBd0t2MUU4UGEzcDhleUJ0ZVgvanU3VTZ1YzM0d1hkamFseUtHZUFYQWE0UXM4VUJ2Y2w4eXIwTllDL25sSURxWXpEODNtTVppVVFCZXM2T3o0bVRwdVVRbVhiWTlyU3dQOTNQQjJHREJlSEl3VFlhTm5ZTUF2RzdJK3JlajQzdlRCWitYVHd6MzhCL2RKMWgzcXZEVG8rT2tZelVEQUs5WGpnZytPcG83TUpZekhPbmQ3N3RYaGNVWlpRejdtYUZzT1Z2Q1lsRUFYcGVwTS9VZjYwdjE1dzNoMlM3alZXRnBuQi9PbG41NmJBeWpWd0M4OFc3endQSGswWFNSTXdocmZwRks5YWFMaHhOWkNBdUFOMXdXTWlxWk80WXlxYkxsVVdkNXNyZHp4c2FLNXZiQkRGWG81V3NBekJXQzM5ODNNWkEzUEhxWmxDZUZwVEYyb21EYzA0ZXpHUUNZYm8vblBZbE1JbWVnSkp3L0hLV0dzK1VzTHFBSFlOcFZJWkV0ZHd5bFU5NWNrT1U5WVhIR3hrdm1Zd01wUWprSXdJeXF3bnRQVEF3WFRTOE9ZM2xQV0lMUlFOSDhTVytTTkF5M0F6QVRZUjFMWkVieW5xd0t2ZGZuSGFWR3NxVnlFbWYxQVRCVEpEMCtrRXFYTGMvMUlZOEppek9XTEZrUDlrM2dsUVBnWE9xVW4vVW1SejI0dUlGN3JaMXB1R3o5OERpdXhnSGduS3JDL2tSMk5HZEtyeDF5NHJGdWIwazFuQ21yQ2N3UEFuQ3ViTzJmeUJxMnR6S1dsNFRGR09WTTU2bEVoaGhzQmNBNWRuMzIrRkFtYTlyY1UwZWRjRS85V1ZuT3NuZU1aQkd2QURqbjdzVDNER1p5SmhMV1hDYXNqR0UvTTVnbWpnRXNBTTZ4T3hHWjlwRjAwZkRVL2pZdjlYelRrWDJaRXBWeFhCOEFzMU1WN2toa0NwYmpvWkRsR1dFeFJnVkxQaldNZWhDQVdhc0tuMGhrODViRHZCTUJ2Q01zWW5uYmVUS1JnYkFBbUIwRU81VElGaXpIUXozS1E4S2luR252VFdRd2dBWEFyR0U3QjVKNUR3MWplYWJ6bTFJZW5paVE2V0FBQzRCWnJBcWZIRXFYYk0rRUxHOElpeEVWYmZuRUVPSVZBTE1yQUxadEtGdTBwVmZHM1QwaUxFWWwyM2tjQTFnQXpMYXdUaVN5T2ROQlNUakw1RXpueUJDRUJjQnNvMmozYU5aMHZMR3IwQnZDTWgyMWR6eUhFL3NBbUl1UTlmaFFwdXlSeXdvOUlDeEdWSGJrNDROcHhDc0E1a0pZanc1bERFZDZZanJMQ3dtTGtlSEl4d1pSRHdJd0o4SWFIYzFseWpaNW9TajBnckFVWlExN2NIUVN3Z0pnanRpWnlIamljQ3dQQ011U2F0ZElsaFJlS2dEbXNDbzBwUWVHc2R3dUxFWmtTdFNEQU15dHNMWU5waTBIQ1dzMk1CMjFGU3V3QUpqRFhNQXl5Y0pFeVhTL3NieFJFaVluQ2pobEZJQTVyV1VPVE9RZDVYWmx1VjFZa21pa1lKRGw0STBDWUU1RFZrKzY2UDVoZDdjTHk1RnEvM2dlV3dnQm1HdGhkYWVMU0Zqbm5MQ1U2a2tYY0VJREFITmRFdTVLRld3SllaMWp3bEowTUYzRUFCWUFjNTJ3QmlhS1JHN1BCdTRYbG5vbVhVVENBbUN1RXhhVnJHelpjbm5FNGk1dlE2Vm9Nb1VwUWdEbUFlWCtjWGRYQzBzUmpSUU5NakJGQ01COFZJWGRxWUp5OTdpN3E0VWxsVG80VWNDU1VRRG1TVmpwZ3N2UGNISzVzS2c3aFNsQ0FPYUp2YW1TUk1LYXViQklkYWN3UlFqQVBDV3NBeE41RExxZlU4TGFpWVFGd0R3SmkxVEJjUGxaeVc2ZkpSeEw1cEd3QUppM29xWW5WWEN6c1Z3dHJOR0NRU2FtQ0FHWXY0enc0a1RlemFOWTdoV1dVdFNESmFNQXpLdXcyTUZNVWJuNHRFd1hDNHRVZDZwQU1CWUE4NW13VWtVa3JKa0ppdzZtUy9BVkFQTnByS2ZjUFZIbzZwS3dQMWVHc0FDWXo0U2xzbVUzL3dGZG5iQUdTaFplSVFEbUZVZm1MUnZDbWdrREpSTmpXQURNTXhORkU4S2FFU1VMdmdKZ25zdkNNUmRYTnU0VmxpMFZsVkVTQWpEUHZxTHhvbnRQeFhLdnNNWmRuRXNCcUdER1N5Z0pwODlZQ2NJQ0FNTHlUTUt5c0lzUWdQa3ZDVWZLbUNXY0pvcG9yR2pnNVFGZ0lSSVdCdDFuVUJLV1VSSUNzQUFraW9acmR4TzZ1Q1RFcWxFQUZxSW1QRkUwTVVzNGJVYUxXSVFGd1B6N2lqSW9DYWVOb21Fa0xBQVdoSkpGYnEwSjNadXcrb3ZZbHdQQVFtRExzdTNTMjNQY08wczRnbjA1QUN3UXd3V1h6dEc3VkZqc1pDNEZBQ3dBcnAzeWNxbXdUS25JZ0xBQVdKaThNRjZFc0tiRGFNSEFNbmNBRm9wa0djS2FEbm5UeGtzRHdJSjFRTGVlNGVmV2tsQXB2RFFBTEZnSGxKZ2xuQTZHVzJkVkFhZ0d5ZzdXWVUydnZTQXNBQll1TVRoSVdOTktwSTdDSWl3QUZpd3gyQzY5Y2QydEpTRVNGZ0FvQ1NFc0FNRHJ3VkFTVGxmd0VCWUFTQXhlU1ZpWUpRUUFKYUZuaENVaExBQVdUbGc0cldGYW1DZ0pBVmhBWVdIaGFHV1UwQUJVQXlXVWhOTXNDYkUxQjRBRmdsRUpKZUUwUzJnSHJ3MEFDMFVlSmVIMGhPVWdZUUd3WUdTUXNLWlhFbUlNQzRDRm80U0VOYzJFSlhFREJRQUxoY0tnTzBwQ0FEd0ROajlQVDFoWTZRN0FBb0tFTmIxRWlqY0dnQVVFWTFqVElxaHh2RE1BTEJqQ3JSY0Fabkk1UEIwQWdDZEFrQUVBUUZnQUFBQmhBUUFnTEFBQWdMQUFBQURDQWdCQVdBQUFBR0VCQUFDRUJRQ0FzQUFBQU1JQ0FBQUlDd0FBWVFFQUFJUUZBQUFRRmdBQXdnSUFBQWdMQUFBZ0xBQUFoQVVBQUJBV0FBQkFXQUFBQ0FzQUFDQXNBQUNBc0FBQUVCWUFBRUJZQUFBQVlRRUFJQ3dBQUlDd0FBQVFGcG9BQUFCaEFRQUFoQVVBZ0xBQUFBRENBZ0FBQ0FzQUFHRUJBQUNFQlFBQUVCWUFBTUlDQUFBSUN3QUFJQ3dBQUlRRkFBQVFGZ0FBUUZnQUFBZ0xBQUFnTEFBQWdMQUFBQkFXQUFCQVdBQUE4S3I4ZjlySHNVeVp5YTJWQUFBQUFFbEZUa1N1UW1DQyc7XFxuZXhwb3J0cy5kZWZhdWx0S2V5SW1nID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBWkFBQUFHUUNBSUFBQUFQM2FHYkFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0UW9SRFFBQnpBYnBHUUFBSUFCSlJFRlVlTnJ0dmRsM0c4bVZyNXNST1krWVFRQWtSVWxXbFYyMis1dythNTMvLy9FODNMUDY5blhiVmJaVlVra2NNQU9KUkNhUWMwYmNoNUJVZGxXNVN3TUpZdmg5eTZzZlpEY0o1c2IrWXNnZE8wZ1FSUklBQUJ3Q0ZJOEFBQUJoQVFBQWhBVUFnTEFBQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQVFGZ0FBQUJoQVFBQWhBVUFnTEFBQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQVFGZ0FBQUJoQVFBQWhBVUFnTEFBQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBK0RVVVBBTHdoUkJDT09lYktBclg2eXpMOGl6TDg1eHpycXFxcHV1NnJ0dU80OVZxcXFveXh2QzR3QmQ5MllJb3dsTUFud2RuTEVtUzJYVHFMeGFjY3lyTHdsOC8vZzg0Ri8rWFZaWHJlV2Y5dnVPNmlvSmhFa0JZWUZjVEtzNVlXWmJiS0pxTXgxRVVLWXJ5ajVMNmwzYmp2S29xVmRQNi9YNjkwVkJVbFZMc1NBQUlDenpNdWsrU3BLb3MweXlMdDl1NzI5dXlLR1JaL2hoVi9ZU3FxaXJHTGk0dmE3V2FwdXVhcG4yWWl3RUFZWUV2VlJVaEpFbVNQTXVpS0xxN3VWRmtXYXordmdUR1dGbVd6V2J6ck4rWEZjVzJiV2dMUUZqZzg2R1VpdDMwcXFvbW8xRVlocFRTKzEzSGlYV2lwbW1YVjFlS290aU9JL2JtWVM0QVlZR1BuVkpSV2M2emJMdlpwR2s2bTB5eU5LV2Z0ZnI3ZUcweHhoUkZhWGM2dHV0YXBtblpkbFZWMEJhQXNNQy8valpRS2xPYXhIRVVSVkVVaFVHUTV6bWw5T0ZVOVJOdk1jYW9MTHVlVjZ2WGJkdDJISWRMRW9vaEFJUUZmcnI2STRTSVdxcE5GRzJpcUdKTTdGN3Qvc013eGlSQ2JNdHlQYzl4M1hxalFRaXBxZ3BoQWhEV3FTUExza1RJYXJsY0I4Rm1zOG5TbERHMkR3VUhqREZDaUtacGxtM1g2dlZHczZrb0NyYTNJQ3dJNnlRRFR3aVY1YklvVnI2L21NK0xQQmZsNmZ0V0c4VTU1NXhybXFacVdxMWViN2JidG1XVlpRbHRRVmpnVkZRbEswcWFwdFBKSkZ5dHFxcks4L3l4Vm4rZk5PRlNGRVZSVmNNMHp5OHVMTnZtakdGN0M4SUN4eHRzU2draFdacmUvUEJEbW1WbFZiR3Eybk5QL1h6Q1JRaFJWWlZTZW5sMTVkVnEyTjZDc01BeExnQXBEVmFydTl2Ym9pallVV1E0cFZTVzVYYTMyejgvRjI4WUVXZ0lDeHk4cWdnaDA4bGtQQnJ4WTl5eEZyMGlXdTMyK2NXRmdvWVFFQlk0M0ZTdXluSjhkemVieitsQnJmcytlN1ZvTzg3VnMyZUdZV0JMSHNJQ2g1TzZqSlZsK2ViMTYrMTJLLzF6djVkVDBKYXFLTTlldkxCcys5VCtkZ2dMSE5MS1NPdzliNkxvOXZvNlRkUGRWYWovc3k5a1JaRVlFNnFvR0pNNGwzYitNYXFxVWxYMTdPeXNPeGp3cXBJVkJYTXVDQXZzaGFja1NTckxra2pTYkRwZHpHWnBsdTIrUTU1NGVTZkxzaXpML1l1TFJxT2hLTW82Q0ViRFlab2tqREZSQmJwN2JWRkttODFtLytKQ2ZEYXg0WVd2RFlRRkhrRlZuUE95TFBNc1d5NFdpL2xjVktqdjJBdWkxbFQwaDJsM09vMW1rNzB2anhJSzIyNDJpOWxzSFlabFVZZzU0STQvb2ZnOHpXYXoxVzVianFNb0NwVmxqcjE1Q0F2c0Jrb3BZeXpMc25peldhMVdLOStYeEFtYjNYcUtjeTdMc200WXJ1ZTEybTNIY2RndlZYSUtiV1ZadHB6UHd6Qk1rK1JSNmxURlozTWNwOVZ1TzU2bkc0WWl5K0t2d0RjS3dnSVBNcWVpaEZSVkZjZnhKb3FDMVNwNmdBWlZINmtxVlZVdDIzWWNwOUZxV2JaZC9kcFpHYUd0c2l4WHZoK0ZvVGkwS0hGT2R2N2h5N0swTEt2UmJOcU80N2l1cW1rYzV4TWhMSEMvcXo5S2FWRVV3V29WYjdmaGVyM2Riait5ay9xOXEwclR0RWF6YVZwV3JWN1hkZjFUdTFiSnNrd2thYlZheFhFY0JzRm1zOW45QVViT2VWV1dxcWJWbTAzVE5Cdk5wcTdybUcxQldPQWVWbitFa0N6THB1TnhWVlcrNzM5MkovVXZYRTl4emwzUGE3WmFxcW8ybWsxQ3lKYzBUaUNVS3JJY2h1RjJzMG1UWkQ2YlBjb0dYRlZWRXVmTmRsdlR0RnFqVWF2VnVDUXhIUFNCc01CbnFFcVc1ZVZpc1E2Q1BNOEQzeWVQc2ZvVFZ1b1BCb1pwV3JidHVpNjd2eVBISDJhTzY5V3FLTXZaZUp4bW1VenBqdGVKNG0rMEhjZTJiY00wei9wOTh2NGY4VDJFc01DdjViQXNTNXlQUjZNa2prV1RZaUpKNURFV1RacXVuL1g3aG1FNHJxdXE2c010bWlpbGpQTnRGS1ZwdWxvdWZkOVhGT1ZSOXVZVVJYRTlUOWYxczE3UE1FMzBzWUd3d0w5VWxhS3FTWkxNSnBONHMwbVNwQ3hMYWVkRkFHSmIycXZWT3QydWFacUdhWXFyS0hiekJEam5lWjZuYWJyeS9jVjBLaEd5NDdlZjB2dENEY013VE12cWRMdTFlcjBvQ21nTHdnSS9vcWpxZHJNWjNkMGxTVkxrK2FPVVdiS3E0cHczbXMxdXI2Y2JocXFxajFKbStlNEN4S3JLMG5RZEJKUHh1Q3pMeHlxRlZWVlZONHl6ZnI5ZXIyT1JDR0VCaVZKYUZzWHQ5ZlY2dlg2c1RnUGk5L2I2L1dhcnBSdkcvcHkvRXl2VE1BeEh3MkgyU0llTmhFTk55M3J5OUtsbFdlZ0dBV0dkOURKd0hRUnZYcjkrcktGYnRQSHNEUWJ0VG1kdkw0NFhrNTF3dlo1T0p1RjYvVmphWW96MUI0UEJ4UVhtV1JEV2lkcHFkSGMzdkx2Yi9YcEhyTGtjMXozcjlWcnQ5cUYwN0tTVXBra3lHZzU5M3llUDBZbUJNZWE0N292Zi9wYWlDUVNFZFdxMnVuN3paajZiN2Y1SURhWFVkcHduVDU4YXBubUlOVWVFRUltUW03ZHYxNnRWVVJTN2Z5bWg2Zm8zZi9qRDNrNUlJU3h3L3puMzl2WHI1V0t4UzF1Snd6RmV2WDU1ZFNWVGV1aDdNY0lYeS9sOE5CeFdWYlhUUDRkeldWWC8rRC8rQjVwdFFWZ25NYmRhK2Y3cjc3L2ZoYTA0bDk1M2ZlbjJldDJ6TTRtUVk2cmtGaFplcjllajI5c3N6NnV5M05FTFZzNE55L3JtRDMvQWZoYUVkZVM2S3ZQOHozLzYwME1ubGRpbzFuUmRVOVZ1cjlmcWRFUXlIK3NZSU10eUhNZmo0VEJKRW5FWDdBNmU4TFBmL0tiWmF1RzlJWVIxdE1peS9GLy8rWjlGVVR4Y0ZvbXVMNVpsYWJyZVB6KzNMS3RpN0JUYVA0bURQbHlTN3E2djR6ak8walRMc2dmdFkwTW8vY08vL1pzNEE0RHZOb1IxaEJrVnJGWnZmL2poSWI3Zm5QT3FxaXpMTWt6VHRLeitZQ0RMOG1uV09vcTE5bkt4V0M0V1ZWVkZZU2hjOWhDL3ExYXZ2L2o2YTF5TXVETVVQSUpkSnRMdDlmVzlHK1JES3dWTjA1cXRsbGV2SzdKY2x1WEpacEg0dzF2dGRyUGRqcmZiK1hTYVpkbDJzeW5MOHQ1cnVMYWJUWjduQ25yR1k0WjFmTk9ySkVsZS9mM3Y0b1RnL1dSbVdjcUs0cml1YmR1TlJzTnlIT2w5MlRyNGNaMG95MmtjcjlmclRSUnRvaWhOMDN2c3owTUlhWFU2VjArZllwS0ZHZFpSUVNrVlBhM3VhL1duYVZxajIvVTh6M1ljMDdMdXNldkxNZkZqMjRsZXI5RnN4cHRORkVYQmFwVWt5YjJzRXhsajRYcU41d3hoSFdIcUpISDhoVyt2T0dNVlk2WnBpcVdmWVJoaXh4ZkQrOGNvWGxHVVdyUHBlRjZqMmR4dXQvNWlFZDVIajJsS1NGV1dFbXF5SUt4am92cXk2WTlJT2R0eHp2cDl5N0kwVFZOVWxXTlc5WW5Qa0ZjVklVVE1TVjNQSzR0aU1oNkg2elZqN1BQSzRrVG4xVGlPYmNmQk5oYUVkVlRaSWtrUytiei9SODZkV3UzSmt5Y1NwYnFtaWE0djZPVDdKZXM0U1pJTXd5Q21xZWs2WjJ3Mm15M2V0Mm4rakorV1pabmplUndSZ2JDT0EwSklXWlpja2o1ajRXQ2E1bGUvKzUyb2plVHY1Z2tZeWU5cHdzVzVhUHQxZm5IUkh3d200L0YwUFA1VVp3bGhZVUVJWVIzWGt2QVRiNWY1UUpabGYvM0xYMnpYZmZIMTE2TEZPaDdtZlk0bGxNcVV6cWJUNldUQ3F1b3pabGhpdFk1emhSRFdzUTNvbnowUktNdHl2VnI5di8vMy81cW0rZlQ1YzlPeXF2dXJqVGhaUkUzV0Q2OWVpVDJzTDVxM1loU0JzTUJQazRLeGVMdjk5ci8reXpETjgvUHpScXVGbDRPZmh6aDRlSGR6RTY3WG1CbEJXT0FobHpDRVpHbjYrdFVyOWZxNk54aTAybTJrM0NjOXZTZ003MjV1NGpoKzBHT0dBTUlDLzVSNFpWbGUvL0REOFBhMjFXNmY5ZnV5TEtPbDNMOTZWcXlxS3NhQzFXb3lHcVZwdXZzN3hBQ0VCU1JaVVRqbnM4bGtPcG0wV3ExdXI2ZnB1aUxMWkZjWGMrMjVwOFIyZUZtV3kvbDhNWnZsUmFFb3lxTTBwQVlRRm5nSGxXVkprbGFyMVd3NmJiYmJ6VmJMZGh4TjAraXBhb3RTeWhqTDh6eUo0MkMxbWsybm9pZ0Vxb0t3d0I1TktEUmRqOEl3OEgzZE5IdTlubWxabG1VcEQzbGo4MzZxYXJ2WnhISHNMNWVCNzh1WVVrRllZSisxcGFocVdSUTMxOWVVMHU3Wm1XWGJ0dU1ZaG5IRTJoTGI1MlZacm9NZ1M5UFpkSnFtcVV5cHFtbjRTa0JZNEFBU1dKeU1tNHpIbE5KYXZXNDdqdXQ1anV0S25CL1Q4VVBSY1NGTmt2VjZuY1N4Ny90Rm5tUDFCMkdCZzBSb0sxaXRmTi8zWE5kMkhOdHhtcTBXSWVUUWE3aEUyZWNtaWxhK242YnBPZ2c0WXhTcWdyREFvU1A2cDJ5MzJ5aUtkTU5ZcjllNnJvc2V5cDk5WU9oeExVd0ltVTJubXloS2ttUVRSV0tlUlhaN3d5T0FzTUNEcnhPTFBGL081N0lzYjZMSU1NMU90K3M0enE3djlmdUN6MTlWMWQzTlRacW1vamZ4aDhVdmdMREFjV3BMRkNpRjYvVW1pcUwxMnJUdFJyUFo2WGJMb3RoUGJZazNDWnN3bk0vbjJ5aEtzNHhWRlhsL2x5cUFzTUJKckJNbFNVclROTXV5YUwyZWpzZnRUcWZWNlZCSzkrZGt0V2dIdWxxdDVyTlpzdDJXNys5SnhaRWFDQXVjNklSTGtxU3FxdUx0OWphT3g4Tmh1OVBwOUhxcXFqNnV0c1FkWmY1aU1abE04aXo3TVBXRHFpQXNBQ1JKa2pqblJWR01SNlB4YU5ScXQzdURnYTdydTYvZW9wUldWVFVhRHVlVFNZbDJGQURDQXIvS2NyR1lUYWYxZXIxL2ZyNnpidVdFa0R6UFo5UHBaRFRDVmpxQXNNQ25MY3FpS0ZwLzk1MmlLTTlmdkxCcysrRTJ1VG5uV1piZDNkd0VxNVdpS0k5b0swM1Q4anhIOUNFc2NKQ0kwM2t2Ly9hM3FxcWV2M2hScTljcHBiSXMzOHVjUzNSVHlOTDAxY3VYb3N2d281UjlpdG9JWGRkZi9QYTNsTkwvNS8vOEg1enBnYkRBWVd1TFVucjk1bzBrU1kxRzQ4blRwK3o5OVEyZllhNTNWM0p3N2krWHc5dGJVYUcrNHhvRjhiRlZWWlVJNlhTNy9jRkFFbTJ6MEhzYXdnSkhveTFKa29JZ1dQN0hmemlPYy83a2lhN3JxcXArWkI4YlliY2l6eG5uNDd1N2xlOXpjY0ptdHd0QXpybm9iQ0hMOHZuRlJhMWVsOTVmL0NVK0pRSU5ZWUYzdVhJRWY0Ull1Q1ZKOHZLNzd3elQ3SnlkZVo2bjZicWlLUC9xbGFKWVY2WkprcWJwYkRJSncvRGRZWnJkZW9wekxzdXlZUmlHWmZWNlBkdDEyYzl1b2lXUzlCbEJ3aFVVRU5ZeGNrU2pOeUZFVnBROHoyK3ZyMVZONjNTN2p1dWFocUVieG9jYmFENTBmZGx1TnR2dGRqR2JKVW15KzhNMEgrNGZOQzNMZHB4T3R5dktOWDV4OWNjNS80d2dZVllHWVdHR2RTRGFrdVdxTEllM3Q2cXExbW8xcjE2M2JOdHhIRW1Ta2lTSnQ5c29pZ0xmVDlOVWx1WGRxNHBWbFdYYmxtMjd0VnE5WHRjMHJhb3EzRFlFWVlGVG5qZ1NzUjVjTHBlcjFjcHhYY2QxRlVXSnduQVRSZmxqTktoaVZVVUlzUjNIcmRWYzEzVmNWMWFVcWl6TFg5MVQvNnhaTUphRUVCYVdoSWVIbUVCRlliZ09BaXJMRXVlVTBoMnJxaXhMUlZFYXJWYTlYdGROMDNWZHpqbGpESy8vSUN3QWZnRlJBN0ZqUVFzcktZcHlmbm5wT0k1aG1vWmhNTVkrZWZYM1djdDI3R0ZCV0FCOGdxcE0wenpyOXkzTDBnMURyRTgvYzZNS1pRMFFGZ0FQZ1NoS3FOVnFnNHNMVlZYVjl6ZWJIVlBUZWdCaGdXTlFsU1JKN1c2M1B4aUlMWDlSbFlycll5RXNBUFpMVlp5eDUxOTk1WHJlajV0bDc0L2FBQWdMZ0wyZ3FpckxOSjg4ZjI1WkZ0cjRRVmdBN0srcTJ1MTJ0OSszTEFzektRZ0xnRDJGRU5MdWRIcURnYXFxSDA3OEFBZ0xnUDN5bEticjdVNm4yKzFTV1Q2SVc4Z0FoQVZPQ05IMVJWRVUwelRiblU2cjIyVlY5VG1WbndEQ0F1QkJWVVVwTlUzVHRLeDJ1OTFvdGZJOEw0c0NUd1pBV0dDUFBDVzZ2amlPbytsNi8veGMwL1dxTExNc3c4TUJFQmJZRzFVeFZqSG11SzVsV1pabG5mWDdraVF4eHZaaVZvVjlmUWdMZ0IrRklFbTFlbDAzakhxejZicXVKRW43dFV1RjlqSVFGZ0FmbG9HcXBwMzErN1Y2SGUvK3dHZEE4UWpBTGxFVlJkenR2S2RGVldndkEyRUJjRENySnh6NmdiQUFBQURDQWdCQVdBQUFBR0VCQUFDRUJRQ0FzQUFBQU1JQ0FBQUlDd0FBWVFFQUFJUjFRcUNFR3NFRkVOWkJJTXN5Wnd5dFMvWmNPcklzZitZSlI4NHBwYmpMWndlZ1c4T0RwZ0NobEJaRjRTK1h3V3BWbGlXZXlYNkdTWmJsTE12V1VSU0ZvYXg4V2xKd3pqZWJ6V3d5c1YxWDEzWHAvVDJ2QU1JNk1GV2xTYklPZ3MxMkc2M1hlWjdMc293bnMxL3JDMG9sU2NyemZESWVpMkRsZWE0b241d1UyODNtN1hicjFXcVdiZGNhRGNkeE9PZlFGb1IxR0RsQUNObHV0NHZaTEUzVDdXWlRscVZNS1d5MWgyR0t3dEJmTExJOFh3ZUIrTWZQc05VSDhRVkJFQVJCdUY3cmh0RnN0YnhhalZES2NJa0doTFdmaUIyUWxlOHY1dk95TExlYmpmZ3FRMVg3cFNwWmxqaGZ6T2ZySU1qU05JbGovdDQ0OXpKZjIyNjNVUlJ0dDF0ZDExM1hQZXYxeEUxbGVQSVExaDZ0L3JnazNWeGZ4OXR0bnVkWm1vcC94TVBacXpncHNsd1V4ZWp1TGx5djh5ekw4NXdRUWlnbDkvMTlrR1U1UzlNMFNlTE5aaDBFaXFvK2ZmNWNWZFg5YlZzSVlaMklxbVJGeVpMazdkdTNaWjZuYWNvWUkvYzBYSVA3TlVpZVpTKy8vMTU0cXFxcWh4NVJDQ0dFa0lxeHpXWkRDUG43ZDkvSml0SWZESnF0VmxtVzJONkNzSGFkQTVxbXpXZXoyV1NTcG1sWmx1SWVVTHpZM2tOVnJZUGc5dWFtS3N1aUtDVE9wZDJHU2Z5dU5Fa2tRdDcrOE1QdzdxN1phZzNPejlIU0hzTGF5UTRJcFpJa3pTYVQrV3hXRk1XSDd4eFV0Vitxb2xTUjVlSGQzWEt4eUxQc3g0WFlZNFdKRUVtU3lySXN5M0tVSk5QSnBObHU5M285c1U1RXZDQ3NCMUZWVVJURDRkQ2Z6OHV5aEtIMkUxbVdpendmMzk0dUZ3dXg5TnUzVDhnNUw0dGlOaDR2cHROYXJUYTR1TkJORXk4VElhejdKTXV5OFhDNDh2MFAyeE40Sm51bktrbzMyKzEwUEQ2VU1ESEdmTjlmTHBlZTUvWFB6eDNYeFpZOGhQVkZJNkVrU1ZFWVRpZVR0ZS9MbWdaUDdXMmt0cHZOOE81dUUwV0hkVVJHV0hXejJYejNsNzg0am5NMkdEUWFEZXd3UUZpZk9QUnhYcFhsSm9wdWIyN3lMSk5sV2RFMFBKYjlYRnVGVVRRWkR1UHRWdFcwd3kxNVUxVTF5N0kzcjE2OWxhVExwMCs5V2sxVFZVS3BSQWlPb0VKWXZ6eldTWkpVRmtXV1pWRVkzbDVmVTBxcExIOWU2VE40MkRDVlpaWmxtekFjM3Q1V2pDbUtvaDdGaUNLRWUzdDl6YXJxck45dnRscTZyaXVxU2dqQmFoSEMrcWNjU0pNa0w0cjVkTHBhTGlWQ0ZGWEZrOW5EMVZNY3gzbVdyWU5nUEJvcGlrSXBWWTZ1Nm8xU1NpbWR6MmJUeWNUenZONWdvR21hYnBveXBhaUVPR2xoaVR2VHQ1dE5scWF6MlV6c2dNaTduVkp4emxIRDlhdWU0b3lGWWNpcWFqd2NicUtJeXJLMjJ5blY3c01rdExYZGJsLys5YSttWlhWN1BjTTBiZHRXRkVWOEdBanJoSEpBMUNpc2ZEL0xzdmwwbW9tTnF0MnFpakhHT1RkTTAvVzhQRTJqS09LY28wcitIOE1reTdJNFFKNWwyV1EwS3ZLY3l2S09KNytNTWNhWTQ3cVdaYVZwdW9raWFZZUhHUWdoaXFybWVYN3o1bzJzcXQxdTF6Qk4xM1YxdzVCT3NvL05hUWxMakZwUkZHMmlLRW1TeFd3bUhMRjdWYkdxcWplYnBtVTVydHRvTk5Ja1dmbCtITWZoZWwwV0JaWGxVNTV3aVRkOThYYTczV3lpS0JLdHhIWS8rYTJxaWxMcWVaNXBXZlZtMDNYZDdYWWIrSDZlNTh2Rmd1K3dhWjg0QkNaeFBoNk5pQ1ExbWszSGRYWERhRFNicDliSGhnUlJkQXAvcHl6TEVpR3I1VEtPNHpBSXR0c3RZMnpITDVVNDU2eXFxQ3kzMm0zRE1PcU5obUdhd2w5aXJWRVVSYmhleDl2dHl2ZlROSlVwSmNjMTRlS2NtNVoxOWZTcFpkdS91S2loc2l4SlVoUUVZUlJ0b21qekdMTk96bmxWVllxaU5KcE4yN2JkV3MxOEh5YnhTWXFpQ0ZhckpJNkRJRWpqV0ZhVUhZOHU0Z3VqNjNxdDBUQU5vOUZ1cTRweUlpZXJqMXhZWW1qS3N5eFlyYUl3M0c0MmFaWkpqNUVEWlZtYWxsV3YxMTNQc3gxSDAzWE8yRSsrWWU5T3pGWlZ2TjF1TnB0Z3RRclhhMW1XajJhZCtLK0U5YTdqQmVmTHhlSmRtTkwwc1ZSbEdFYXoxWEpjMTdadFZkTitZY09JRUpuU29paEVtTlpCRUFhQnJDaTcvN1NjYzFWVmJjY1I4M1RiY1lxaU9HNXRIYTJ3eE9JLzJXNFg4M2tZaGorMkU5bjVZTWlxeW5hY2RxZmp1SzZtNjZxcS91cW1LYVcwWWl6UHNpU08vZVZTbEc0ZlFWK3Rud3VMRUtJb1NwcW0vbklaK0g2VzUwV2VTenV2bkJRbFhWNjkzbXkxWE0vVE5PMWo5clkvaENuZWJwZUxSUmdFZlBkaDRweHhyaWlLcnV1MjQzUzZYZHQxMmZHZXJENUNZVkZLQ2FYYnpXWTZIbTgybS9MOUVlVmRxNnFxdUNUVmFyWE8yWmxsV1lxcWlrbkVKemxYa3FROHo4dXFtazhtSzk4djh2eWc2eTMrVVZpU0pDbUtzdDFzcHROcHRGNVhWVlVVeGU3bmtsVlZTWVRVUEs5L2ZxNXBtcUtxc2l4L1VyYUxNQlZGa2FYcGNyRllMaGE3MzIwUXo1WVFvbXFhYVZuZGJyZFdxM0ZDanUrSTRsRUpTMnlDcmxhcjZXaVVwbW5GR0dkczk3dlg0dXZlYXJYT0JnTlZWV1ZaL3NMQ1AwSklXWmFzcXRaQk1Cb09SV0lmNHE2OEVOYXo1ODh0MjQ2aTZPNzZXblNuWW84UnBxcXFaRmx1ZFRwbnZSNmxWRlZWNmYxNXJNK0xrU1JKVlZreXpoZnorV3c2TGZKODkyRVMycEpsV2RXMHMxNnYyV29SUW81cHRuVWt3aEpHOEpmTHU1dWJkOHJnWEhvTVZjbUswdWwwQmhjWEgvWm83MzNiSXQ1dWI2NnZreVNoaDFhOXhUbTNiZHR4M1hVUS9HTnpua2NKMC9uRlJhUFJJSlRlYjVqRUxpUWhaQjBFdzl2YkxNc2Vhd3RTek9nSEZ4ZXRkbHRSMWVPWWJSMjhzRVJWNFh3MnU3dTkvZFExMS8ybW9xd29UNTg5ODJvMU1jbzk5Ry9Ncyt6MitucTlYaDljMGVrakhqUmhqQm1tZVhsMTVYbmVMcVoxbkZlTS9mMnZmODNUbEQvU2tXYVJJTFZHNCtuejU0K1lJQkRXdTJpOGZ2a3lDc1BIblRVWWh2SDFOOTg4eXFZNEllVDI3ZHZsY29telpyOGFKc3UyZi9QVlYrS2x4NjdESkVrMzE5ZnoyZXh4WC9ncWl2TE43Mzh2SC9JMjZLRUtLOC96VjMvL2U1Wmxqelc1SUlSVVpkbnQ5d2ZuNTU5L1kvQTlmUkpKa3Z6RjR2YjJsblBPMFhqM0p3K0hrR2F6ZWZYMEtmK0NMYXI3bWxjR1FYRDl3dy9TNDMwU3NSUzRmUEtrMVc3dlo0UERveElXNXp4TDArczNiemFieldOdFBJdmZlMzV4MFdxM0pVcjNSQkJpWVpna3lRL2ZmeStLY1I1bEozdC9FQlBleTZ1cmVyTXBVN29ublloRm1NTDFlbmgzbHlhSkpFbWNzVWZaYk5VMGJYQiszdXAwRHV0N2NrakNxcXBxZEhjM20wNGY3ZVdMb2hpR2NkYnIxUnNOYVM5UGNvazNSRWtjajhmajlXckZKYWs2cFc3T290YVVVcW9ieHNYbHBldDU3R2ZWdVhzU0prcHBITWZpTERlcnFtcm4xaEJEbW0zYjU1ZVhydWNkU2dlYmd4SFdkck81dTduWmJEYTdQay9EbUt3b2lxcGFsdFhyOSsxRHVJWDh3K251eFh5K1hDektvaWpMVWpyZVBwWWkwMlJGa1NtdE5ScWRUc2QyblAwL3F2TGgvckhwZENwZW01WkZzZU13TWNZVVJUbS92R3kxMndmaHJNTVExaWFLYnErdjR6amVtYTFFQVlHbXFycGh1TFZhcTlXeUhLYzh0SE1Qb2daU0ZKSEhTWkpuMlpGcFM0UkRWVlhkTUdxMVdydmIxVFR0NEU3VkthcGE1UGxxdFZvdGwxbWFacnNOay9pcW4xOWNuUFg3Kysrc2ZSY1dJU1NKWTdGcHRSdGJpU1c5cG1tTzY3cXUyMnkxbEFPL3MxZThFd2pYNjNVUWJEYWJKSTRmb2taczk3c3dFaUdHWVRpTzQzcGVvOWxVRkVWTUpBODNUSVJTZjdHSXdsQjBFOWxsbUJoalQ2NnUydDB1WmxoZlJGbVcxei84RUFUQkRtekZxb3BRYWp1TzY3cVc0N1JhTFhFYTlqZ21JNVJTV1piRE1CUmRFTUwxV3ZSc09iZ0psNmhRdHl6THE5ZHQyeGI3aWNjVUppckxVUmhHNi9WMnV3MkRvS29xOHZCaDRwekxzdnpzeFF2WGRTR3N6MytJTjIvZnpxWlQ5U0VyUjhTZWxDekw0cnk3N2JyT0lXeFVmZjYraWFLa1NSS3UxM21lenlhVFF6bm9JeUpDS1cxMU9yWnRXN2J0ZVY1WlZmeEl3MFFwTGZJOFdLM0V5WEJSTWYrZ1lXS01XWmIxbTYrL1Z2ZTRVR3V2aFpVa3lYZC8vdlBEemEzRUJFclg5WGFuWTFxVzY3cWFydS9uZTZWN3p3ZENxY1Q1eXZmTHNsd3VGdUY2VGUvN2tNcjloa25UOVg2L0x5dEtyZEhRVlBVVXdpVDYyRlJWRllWaGxxYUx4VUowOFg2NE1KVmwyVDgvUDcrNGdMQStoNzkrKzIyYUpBOHhxb2krdDdadDl3WURWZE5zMnhZYlBhZFdMeTYrK25FY2l6blhiRG9WcjY3MjVPTXh4c3F5YkRTYnJYWmIwelR4OXYwRSt3S0xJelh4ZHB2bnViOWNycGJMQisxajg4MGYvNmpyT29UMXlkT3J2L3pwVC9jK08yVlZ4VGh2dGxyZGJsZlJOTkZNOHNUUHRYeG9rSklteVNhS3BwTkprZWU3YjZUNWoxUlZ4U1dwMCtrMG1rM2RNQXpEUUpoRTBXbVdaVm1XYmFMbzd1Ym1JVVlYeHRqNTVlVlpyd2RoZlJvM2I5OHVGNHQ3ekJueHB1L2k2c3B6WFhIZEczTGc1eW5CcWlyUDh6aU9oN2UzYVpyS08rOHVYNWFsb2lpOWZyOVdyMnU2THRydEkwdy9HVjZxcXNxeUxJbmptN2R2eTdLODl6RDlyLy85di9mem1lL3BKUlNFMHNWOGZpOXI5UTk5YnkrZlBuVmRWM25meWhZNThJdlBpbENxRzRhbTYxNnRsc1R4YURnVWJacDM4SlpLbkJkNSt2eTViZHZpOWxDRTZaZWZsQ1JSU2szVE5BekRxOWUzbTgxc012R1hTMDNUN2lWTVZWbHVOeHZSWkJFenJJOGlTOU0vLytsUFgzNlpUVkVVOVVianJOZHpQVTg2M2xMdkJ5Vk5rdmxzTnB0T0gyN1RwS29xcjFickRRYXU2KzZtT2MveFNTeEwwK2w0dkZndXY3eExHdWY4OHVxcTNlbEFXQi9MYXJWNjgrclZGODZ3V0ZYMXo4OEg1K2NTYnZyK3dubTRxcTU4Ly9YTGx3K1ViTDErLy9McTZrVHVmWG00bFNJaHhGOHUzNzU1STMzWlkrU2NOMXV0cTJmUHNDVDg2STJNUFAveVlaYks4bVEwbWs0bXZjR2cwK2tvaW9KcytOUWtrRGdQMSt1YjYrczhUZW5EekxBSUlkUHhlRG9lbno5NTBtZzJINlZmMVJITXNJTFZhakljYnJiYmU3bGtjMi9QRE96cERHc3lHbzFIby90YUduRE9pNklRelRRTXc4Q0s0Mk9lV0ZtV3dXbzF2TGxodTdwdVM5UXJ0THZkczE3dnZyWmpqajVNVlZtR1lYano5cTI0OHZLK2ZySmxXVjkvOHcxbVdCKzlxWEd2dFRiaWJPQjhOcHVNUnJiclhqMTlxbXFhMkgzSFlQN1RKMTlWWlZITVpyUDVkQ3FPYTlCZGlVTm9jVG1iemNiamVxTXh1THpVTkUxY3k0Z3cvZE8zV1pMS3NpeUtJdkQ5MjVzYjhZanVkLzY3dDBlZGxEME95djMvVEVWVjB5VDU2N2ZmeXJMODlQbHp3elJWVlgyM1ZEemhsQkJuOVBNc3k3SnNOcDM2eStVajN0NUtLRlVvamFMbzJ6Lzl5WGFjd2NXRllacTZya05ib21nMnp6TEcyTnZYcjdmYjdZZkxmazRINVFTakx0NTJ2ZjdYNXNOdUFBQVlNVWxFUVZUK2UxbVdPMmRualVaRDFUUmQxMCt0MGwxczB6TEdObEZVRk1YdzdpN2ViaFZGMlljY0VGZnNaVm4yK3VWTFF1bVRwMDhOMHpRTVEvdkZxNWhQSUV4RlVZakNxOUhkWFpabHNpemZ5MTRWaEhVd0NHMko3ZDVHczlsc3RYUmROeTNyRkE1L2lMTzFhWm9tY1p4bDJlMzFOV2VNeXZLK0RkZmlxTFlrU2RkdjNraVMxT2wyYS9XNjZQeHpLa2MrQ2NteUxFMlNNQXdYczVsb3NIR2FxanAxWWYzanZzbks5LzNsMG5IZFpxdGxHSVpYcXhGSytUR21oRGp4SDBWUm5xYXIxU3BZcmFxcVVoUkYydS8yV0dKMFdjem5pL25jc3UzdTJabXFxbDZ0Smk2TGw0NDNUR2tjaCt1MTcvdGlQM0Yvam5sQ1dJK3ZyZTFtczRraVhkZWI3YlpwbWw2dHB1djYwUlFIS1lwU1ZWVzRYc2R4dlBMOTdXWWpjVTRQYW1VaHdwVEU4WnZYcnczRGFEU2J0dU00cm5zMFlSSXpYODc1eXZmVEpGbXRWc2wyeXppSHB5Q3NmNWtQUlZHTWgwTk4wMnpIY1QzUDlUelhkY3V5UE5COEVIdDJvcjk3RklaUkZJa0dHSWZiY2ZSZEsvUThINDlHbXE0N2p1TzZicTFlTjB6emNMdVlFVUlVV1U2ekxBeUNLSXFpTUV6VFZJUUpyb0t3ZmowZnFxcGErWDRVaG9acDJyYmRiTFhFNFo0RDZtd3B2dTVabGswbmt6QUlralF0OHZ5Z1ZmWHpNSlZGc2ZMOWNMMFdLL3BHcyttNDdtRnBTMVFreE52dFpMa1VhOEFzejBWN1dDUWpoUFZwK3lhaUNWRzgzVVpocUJsR3U5MXVOQnBVbHZlOGQ3aEk1azBVemVmelRSUVZlVjZXNWRHbzZpZC9xYWpKRUwzcWd5QXdEYU45ZGxhdjEvZC9kUG13RVRHYnpaSTR6dEpVM0d3S1ZVRllYNVFTa2lTbGFacW1hYkxkam9mRFpydmRQVHVqc3J5SHUvSlVsaVhPTjFGMGQzdGJGa1ZSRkZWVjdXMHIwZnROZmk1SldacG1hUm9ueVIwaFo0TkJzOW1VRmFYYXY5RkY3S243eStWc09zMnpURng4ZTVRanl2M240MzRlelJrTmg5UHhlQThQWjRpWE5ZU1FScVBST3o4WExaWDM0UzJWMkt4ZHpHYmo4VmlTcENMUHBSUHVUc0U1VnhTRkVPTFZhbGZQbnRHOXVmbjV4ekNOUnFMeDBYNTJwOUIxL1pzLy9oRXpyR09ZY0lrS29PVnk2ZnUrcnV2UFg3elFEZU1ScXhuRmNQM0Q5OStIWVNoeWdIeHhnNUVqQ0pNd2xOamhVbFgxTjE5OXBUMXFiVENsdEN6TG03ZHZWNzR2UHA2SUVZNU1RbGk3eUFmeDFVK1M1THUvL0lVUTh1ekZpMXF0dHVOOEVMZlN2MzN6Sm9uakQ3OFhDZkNUcVZaWmxtVlpmdnZuUDJ1YTFyKzRhTFZhT3k0NkpZU1VSZkhYdi84OXp6THhlOUh6QzhKNnpKVGduTDkrK1pKUzJ1NTBuang5dW9NdGVVcHBzRnJkM2Q2S3k1ekJ4NFFweTdLM3IxL2Z2SG5UR3d6T2VyMGRPRXVXNWVWaWNYZHpjOUEzdkVKWXh3bGpiRHFaVENlVFdyMSs5ZXpaUTd6ckVmTTNmN0VZM2QySlV4cVBOY0VraERSYkxVVlJSbmQzOUtEZWFqSEc3bTV1Um5kM3JYWjdjSDR1eTdKMDc1TWR6Z21sdzl2YjVXSWhybjE4UkUxZlBYdDJkM056TktmTklLeDd6bVJKa3RaQjhQLzl4Mzk0dFZwL01MQWQ1MTZXYWVLeW4vRnc2QzhXWlZVOVZqY0ZLc3N5cGIxK3Y5bHVxNm82dXJzN3hIcGE4ZWptczlsOE5uTmQ5OG5UcDZxbWZhZ3kvMEpCNUhrK0dZMld5NlhFK1NPOG4rVmNqQ2VhcnAvMWV1S0U3UEQyVnZ3N2hBVitXVnVpRE9ydjMzMW4ybmF2MzNjOVR4d0UrNlI4RUJ2OFZWVVZlVDRhRG9QVjZsM3A4MjVuTkp4ejhVczF3K2ozKy9WR2cwc1NxNnBEdngxZXFHU3oyZnpYZi82blY2dDFlejNYODhSZitubGhTdUo0T3BtczEyc2lmdmh1QlNIQ1JCWEZzcXhldisvV2FoTG5qREYyWEFjdElheUgxSmFpWkduNit2dnZUZE5zdGR2MVJ1Tmo3cTBpaEVpRXNMTE15ektLb3VWc0ZnU0JxcXE3OTVRb0RsQVV4Zlc4VnFkVHE5ZkxvamgwVC8zOGFhdWFGc2Z4cTVjdkxkTnNkYnYxZWwzMGQ1Uis3YzRlOGVLdnlQUE5aak9mVHFNb2ttVlozdm5NVjVUYXFKcm11bTZuMjNVOHJ5cExkbHhoZ3JCMm1BK3FXaGJGOE81dU1oNjNPeDJ2VnJOc1c3UUEvc25PZ2xnNVZtV1pKTWwyczVsTnArSm1RRTNUZHB3QWtpUXBpbUphbHUwNG9tR3htT2dkZDVqeW9oamUzbzZIdzg3Wm1ldTZJa3cvMTlhSEJsVlJGRzNDMEY4dTR6amVmUjh4OGFsVVZiVnMyM0djVnJ0dFdGWlpGRWNjSmdocmR3a2hSdXpaZERvZURydTludTA0dG0zYmppTzA5YTd6VVpwR1ViVGRiSmFMUlZXV3UyK2xJR1pWaG1rNmp1TTRUcXZUb2JMTXF1cEVYbko5T0JZekhZOW40M0c5MmZScU5kdHhyUGRkMHNRcU1rdlQ5WHFkSnNsME9oVWJWVHRXRmFzcVFxbHBtbzdyV3BiVk9UdVRKSWt4ZHR5cWdyQWVBYkdUNVMrWGkvbGNuS25XZEwzZWFLUkpzZzZDN1hZYnJGYnZPaC90VmxWQ21yYmplSjVudTI2dFhoZlhDMWNuK1Q1ZWFDdFlyZnpsMHZVOHIxYXpiZHVyMThQMWVydmRiamViNVh3dUs4cU9WMytjYzlGbnNkM3BhSWJoZVo1WHJ4L0JaaUtFdGUrSWwwZHBtdDdkM3FxcXVvbWlORW5XNi9XanZGU3FHQ09FZExwZHk3SXN4M0ZkbHpIR1Rpa0gvdnN3eGR0dHRGNmJ0bDFicjhNd1RPSlliSHZ0V0ZWVlZabW0yV2cyZGNNUUJTV01zYklvVGkwb0VOWWpMMEFZWS9QWmpMeGZNKzQ0QjFSTnUzcnlSRllVcjFiVE5JMHhoaExIbjRkSlVkVTh5MmJUNmU1YktUREdPR09PNTRsZXVLN25pVVY2ZGFvakNvUzFGeVA1am5PZ0xNdDNiZXdOdzNYZER5L21FWXYvUmxzN1Brd2p3dEZzdFJyTnBtRVlwbVdKWWViRUo3OFExZ2toZWdPYzlYcGVyV1pabHFpV1BMVkxhUFljb1NRdVNaZFhWN1p0aTV2b3BGOHJzSUN3d0ZGUkZJV202NE4rdjFHdnE3b3VPdVJBVmZ1bXFySXNUZFBzWDEwNW52ZWg4ZzR4Z3JCT0tBZkVadTJUcDArOVdrMTQ2c04vaGVlelY2cHFOQnJkWHM5eEhFS3BPQ1NFR0VGWUo1UURuSFBIOC9yOXZsZXJpYW9GUEpaOWd6RW1FZEpvTkFZWEY3cW1TUmhPSUt6VHBONW9uRjllR29ZaGVqL0JWbnVvS2xsUmVtZG52WDVmVmhRWUNzSTZ5WEFxU3IzUnVIcjJUTndjYy9SWFdCOGlvb1NsMit1Sm5seFkra0ZZSjRmbytuSitlZG51ZEtvVEx0TFpjOFN4MFA1ZzBPNTJpNkxBY0FKaG5SQ2luWWpvcHZEc3hRdlRORkgydWJkaFVsVlYxYlRuTDE2SVM2cnpFemowQjJHQmR3a2dsbjZpNjB2Ly9GemtBR1pWK3hZbXpybW1hYktpdUo3MzVPcEtYRHlCRVFYQ09pVlZjYTRaaHFacDlYcTkyK3RSU2pHcjJqZkVpei9UTkNtbFo3MWVvOW5jbjB2R0lDeXdxeHlRSk1kMU5VMXJ0ZHUxUnVOZEt3V2t3VjZGcWFxb0xOdU9veHRHOSt6TWRWM3g2Z05oZ3JCT1NGV3lvdFE4enpTTVZyZHJtYVpvVDR3bnMyK1RYMW1XWGM5ekhLZlJiSnFXSlVwMjhXUWdyTk5LQThkMTI1Mk81M21HWlZWbFdlRzkwbDVpMmZaWnIrZDZudWg0QVZWQldDYzZ2YW8zR3AxdTl6UTdIeDBLaEJESGRjOTZ2U3pQb1NvSTY5UkJEaHpFWkxpc0tnbjFudzhQeFNNQTRCN21XWGdFRUJZQUFFQllBQUFJQ3dBQUlDd0FBSUN3QUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQVB3Q3g5VldrT0lwZzgvODZsQktLRVdjOWh4WmxpVkpPcG93N1d1TFpJSU9qdnNMSVlRUTR2ditZajRYK1hEcWs1aDlIVkVrU1pxT3g1eHo4b2tKUmZZMUFmZFVXQXJTWUk4blZtRVkzdDNjSkhFc3pJVm5zbStQUU1RbENJTGI2K3Npeno5blhxYnNxeG4yZEI2cjRIYU1mWnhZSlVueTV2WHJORW1ncW4xR2pDaHBIQlA2T1hzK25ITVZ3dm9rVE11cXFrcUJ0dlpreWNONVdaYmYvKzF2YVpwU1NxR3F2UTFUSE1kM056ZWJLSkpsK2ZOczlTRUJJYXhQZVY2bWllL2ZQc3lwV0ZsS2hQenQyMitGcWlqRmErVjloREdXWmRuTjlmVW1ER1ZLdjNCamtURm0yVGFFOVFsUVNoM1hGYnNrK0RvK3l1cXZMQW91U1Q5OC8zMFVSVkRWM29hcEtJcXFMTisrZWJPSkl2ckZxdm9BaFBYSms5dCt2Ly9xKysveEVtckhDU0JKVWxtV1JaNlBoc09WNzk5akRvQjdqQk1sSkV0VHh0aTlxNHB6M215MUZFWGhlMWxhdEwrYlJMYmpJRlYycjZva1NaYnorV0krSjRUZytYOXNrdTh3VEpUU05FbktxaHJlM0t6WDYzc2ZVYXFxNnA2ZDhYMHRoTnhmWVNtcU9yaTR1SG56UmxGVnBNU0Q1b0JZV1d3M205VnE1UzhXakRHbzZ0T2U0YTVVbGFWcG1xYno2ZFQzZmZvQUl3cm4zSFhkdlYwUDdyV3dKRWxxTnB1TDJTekxNdXhrUFJDVTBySXNvekFNVnFzZ0NJbzhWeFFGdHRxN0VZWFNJczlGbUZhK3p6bC91Qmc5ZWZac245TnRyNFdscU9yRmt5ZXZYcjZFc080ZFdaYkxzbHd1RnV2MU9seXY4eXhURkFWMUpIdW9xcklvMXN0bHNGcUY2M1ZabHJJc1AxQTZGRVZ4Zm5GaEdNWmVPMkhQWSthNmJuOHdHQTJIR1BidlVWV01zZmxzRmdaQkZFVjVuc3VVUWxYN09hSUVpNFh2Ky9GMm0yZVovSkNUMzdJc085MXViekRZODhuQnZuOU5xU3ozQmdQTytXZzRSRko5K1FLUUVES2ZUdGRCc05sdWl6ekh6dnAraG9senZwak5Gb3RGbHFaWmxzbXkvS0JuUDhxeWJMZmJGMCtleUxMTTk3dnZ3TDRyZ0hOT0tSMWNYRWlTTkI2TlVHYjkyVGtneS9KMFBQWjlQNG5qc2l6Sis4T3hZTzlHbE5sc01aL25XWmJuK1E3S1NzcXliSGM2RjVlWHFxcnl2ZStTY2dCekZuSFd2SDkrcm1uYWFEZ3NpNEppVXZBcCt5Q0tvaXdXaStsb2xHVlpXWmE3T1FiSUdJTVFQMjFFVVpUSmFMU1l6L004TDR0Q3ZCWjg2TXppblBmUHp3Zm41NFFRZmdnOW5RNWprU1djMWVwMDZzM203YzNOYXJuRTRkdVBVWlVzeSt2MSt1YnQyN0lvZHFhcXFxbzBUZXQwdStQaFVGYVVVd2dULzdJd2laRjRNWnRsZVY3dEtreGxXVHFPYy9YOHVXRVlZaEY2RUk5YU9hd01WQlRsNmJObmcvUHp0ei84c04xc01JYi9LMlJaM202M1A3eDZWZVM1K0M3dVJsV3FxdjdtNjY5dDJ5YVMxR3kzNzY2djEwRnc5SlYwbi8xa05VMmJUYWVUMFNqTHNwMkZpVEdtS01ydmZ2OTd5N1pGQnZIRDZaZDVlTnZZaEJCZDEzLzMrOS9IY1N4YW5VQmJQMWxjcEVueTV2WHJlSWNuTWF1cTBuWDkyWXNYdFZydHd6K2Fwdm5WNzM2MzNXNUh0N2ZyOVJydlRQNHA4V1I1SFFSL3U3bEowM1RISzVXdmZ2dGIxL01POWJrZDZpU2NjOU0wLysxLy9zOTFFTnhlWDZkcGloVWlJU1JOa3R1Ym0zVVFQRnkxenMrSGE4TXcraGNYeldiekY4ZHEyN2EvL3VhYktJcUd0N2VpN1FuQ2xNVHh6WnMzbSsxMloyT3RVTlhUNTg5YjdUWmo3SUJGZjlDeHI2cktjZDAvL3Z1L3I1Ykw0ZDJkYUN4M21tbVFKb2s0cml6TDhzNmtvR2xhYnpCb3RkdUVrUDhtRGNTQmoyLys4SWYxZW4xM2M1UHRjRTZ4SXgxOGZKalNkSGg3NnkrWHFxcnV6RmF5TFBmUHozdjlmbFZWQjIycmd4ZldPMjJWWmExZWI3WmFpL2w4TWg1bmFjcFA1ZzRMem5tYXByUEpaREdmNzZ5ekFpRkVWZFh1MlZuMzdFd2loREgycXc5Y3ZKRHlQTy9mL3YzZkY3UFpaRHpPcyt6UWsrZkhCL0tyWVdJc3piTFplRHlkVGxWVlZYZXlxU2YyZkZ2dDl2bmxwV2pCZUF4TDZhUEoyN0lzbTYxV3M5VmF6dWV6MlN4TDA2cXFqblhDUlFpcHFpcExVMUd6STcyL0hPV2hIektsVkRlTWVxTWhYb1JYVmZWSjl4dHh6c3VpYURTYjNiT3owWERvTDVkcGtoeDltSklrOFJlTDhXaWtxcXFtYWJzSms2YnJJa3lVMHFxcWp1YVJIdFUrcUJpeFc5MXVxOU5aekdiTHhTSkpVL0dlK0hoeWdOS3FMTk1rOFpmTDJYVDZvT2RnZjVJRHR1Tll0djNrNmtvc3hyL2twK1Y1M2owN0c1eWYzMTVmYnphYjdXWnpWTm9paEVoU1daWnBIUHUrUHhtUFpWbmVtYXBNMC9UcTliTmVUOU8wc2l5UHlWYkhKcXgzMnFvcVNaSTZaMmZ0czdQcGVCeUY0U2FLeXJJODlKZUpZcWdNZzJBVFJkUFJpTzFFVmFMKzA2dlZETU80dkxwNk42dTZwNStjNTNuLy9GeVc1ZHVibXlTT296QThqakFWZVI3SDhYcTFtczFta2lUdFlBSElHU09VT283anVHN243TXd3akxJc2oyTU5lUHpDRW9pODZ2WDdaNzNlWkRSS2ttVGwrd2RhZmkzcStwYUxSWmFtNCtGUXFPcWhYY1VZSTRUVUd3M0ROQWNYRi9MRHJDd1lZNHl4ODRzTHp2bGtQTjV1TmxFWUZrVnhpQzhUWlZuTzh6d01ndlY2dlp6UHE1MjBGUk9yaWxxOWJscFdwOXMxVGJPcXFxTlUxWkVMNngrMTFUOC9aNHlabHBXbDZXSSs1NHdkeXVFZTBVeDlNWnZsV1RZZWowVnJ2WjJweXJidGRyZXJhVnBWVlErNnNuZ1hwc0dnTEV0L3VZekNNRnl2RDBoYlZKWTU1NHY1UEFyRGxlOVhaVWtmL2wydGNIMnIxVElzcTkzcEdJYkJHRHRpVmIxYmJRZFJKSjBHc2l4WFpibGNMT0k0bnMvbmZPLzdhbkxPNjQyR3Fxckx4VUkwUXRyRmFwcVFXcjB1L2lOeVlNZXZYS25vQUxWZXI0TWdXSzJxcXRyek1CRkNiTnMyVEhPNVdGUlZ0WU1wUEdlc0tNdE90MnRaVnF2ZDFneUQ3enhNRU5idUJzTWl6OFAxT2d6RC9XOEhUQWpaa2FvWUUzNXN0RnF1NitxNkxnb1JIdXV2RmwyYk4xRVVyRmJMeFdJMzd4YSs4QUh1UWxXY2wwWFJiTGU5V3EzZWFEeHVtQ0NzblE3amVaN0hjZXd2RnF2bGt1MTlQanpvY0YweFZtODBXcDJPNnppcXBrbjdjYmlNRUNJUlVoWkZ2Tm40eStWOFBqL2wyOFlZWTFWVjFldjFkcmRyTzQ2dTY5SkJuUUdFc080akg4UTlNWEU4bjgxV3ZpK2RXSXNvVWJ4V3E5ZlArbjNic2hSVjNjTWVJKy9DVkJSWmxrM0g0OFZpb1p4R0I0aC9EQk9yS3R0eGVvT0JzMDhqQ29UMU9QbkFPV2VNcFVreUdZMVdxOVdKOUFnc3k5SjJuTXNuVDB6VEZFMWc5amtIUkVTS3Nxeks4dWJ0MjEwZWxueGtWVEZtbXViZzRzS3IxY1EzODJSVkJXSDl3dmNqejdMcnQyK2pNRHppRldKVlZicGhQUHZOYjB6RE9NUldpRlZWc2FwNi9lcFZ2TjFTUXFRajFSWmpUTmYxd2ZsNW85VVNGYUVucmlvSTYxL1BQb3JpNWQvK2RuelhpekhHVkVWNTl0VlhsbVVkK3VLWGMxN2srYXRYcjdJNEpzZTFrT2VjSzRweWZua3BPaXVnRFFtRTlYRWplVmwrOTVlL0hNZkpCdkdXN2VyWnMzcWpjVXdETlNGa3U5MitmZk1tTzVwR0hZUmNQWDE2NkUxZ0lLeEh5NGM4ei8vMjdiZnNrT3RjWkZrZW5KOTNlajNHbUhTTXl3cEthUkFFdzl2YncyMWNJemFubmo1LzNtZzJzZlNEc0w0MEh6YWJ6WnZYcjZ1eVBLQnhUM1FYNlhTN290RC91Tk5BWE5uZ0w1ZWo0YkRJODBNSms1ajVjczZmUEhuU2FMZXhwdzVoM1ZzK0VFb0QzeDhOaDN2ZXlFbmtnS3dveldiei9QTHlIbzhySDhUUVFnaFpMaGJqNFZDYy90M2JkYUlJRTZHMDErOTN1bDFDS2NjYUVNSzY5M3lRSkdtNVdNeG5zeXhOeGJtdC9Va0pjYm1BcXFxTlpyTTNHTWl5ZkRxcStxY3d5VExuZk9YNzQ3dTdxcXJFN1g1N3BTb3F5NnFxTmx1dFhyOVBaWm1kWkpnZ3JCMGhybnBmTGhiK2NwbkVjVkVVai81eVhhaEsxN1I2czlrNU94T05rQkFtMGVKaVBwM21lUzd1VDM1OFZWRnFtS1pYcTMzb1Y0V0VnckIyZ2FJb1JWbXVsc3RndGRwdU5ubWVQMG8raUxPUXBtWFZhN1ZXdDZ2cmVsVlYyQWY1aWJibTgzbmcrL0YyVytRNWZhUXdVVXB0Mi9acXRXYW5ZNWxtVVJTSURvVDFDTm9xaTJMcCs1c3dERmFyM1J4VS9wQURoQkRYODd4YXJkbHE2YnJPVHViSS9tY3NFaGxqeS9rOENzTjFFT3ltcDhJL2hzbHgzWHE5WG1zMGJOc3V5eEpoZ3JBZWRSaFhsS29vL09VeVRwTDVkUHJRSFNERWxyL25lYlZHbzk1b1BFb1RtQU9kYlJWRnNRNEMwYmptb2ZzcmZHaXRWNnZYWGM5ekhBZXFnckQyYkJpdnFwWHZKM0U4R1kzNEExd01JUTZYdVo3WDduUnN4N0VzQzZyNkRHMWxXYmJkYnYzbE12QjlzYTkwNzZyaW5EZWF6VnE5N3JxdWlUQkJXUHVyTFVxcnFvckNNQXJEeVhnczZvUHVSMVZWWlRuTytjV0ZwdXVXWloxYUk2VDcvTklUUWlsTjAxUmNPM1NQalRwRUE0eFd1OTFvTm0zSE1Rd0RZWUt3RGtOYlJWR2tTU0pxSUw1RVcySldwUnZHcytmUFpVV0JxdTVSVzRTUUxNdnlQSjlOSnN2RjRrdjZiUWxWMVJ1TmJxOW5XWloyMmsxZ0lLeERUWW15TFBNc200ekgvbkpKQ2Zta1k3cWM4NnFxVE11NmV2Wk0wN1NUN2RuMjRFR1NwS0lvOGpTZHpXYno2VlQwQmZ1RU1FbFNWWmFPNjE1Y1hocUdvV2dhUVpnZ3JJTkdYR2sxdkwwTlBycmZWbEVVNGhKQTA3S1V2ZTlYZFRSaFNwTmtPcG5NcDFOVjAzNDFUR0tkTG5yMUdLWjVzazFySWF3amhmTTBUY2ZqOFdJMis5Qi83a05XQ0IrSmxZWG5lZjJMQzgvejBGcmtNYUxFMHpTZGpzZUwrZnpEV3Y3SFFMeVBVMWxWcnV1ZVAzbml1QzZDQkdFZGVVcUU2M1VTeDBtUzVIbk9HUk1IbFhYRE1DM0w4enhOMXpHZjJvY0pWeGlHOFhhYkprbFJGS3lxS0tXeW9waVdaUmlHVjZ0cG1vWXdRVmdBQVBETFVEd0NBQUNFQlFBQUVCWUFBTUlDQUFBSUN3QUFJQ3dBQUlRRkFBQVFGZ0FBUUZnQUFBZ0xBQUFnTEFBQWdMQUFBQkFXQUFCQVdBQUFBR0VCQUNBc0FBQ0FzQUFBQU1JQ0FFQllBQUFBWVFFQUFJUUZBSUN3QUFBQXdnSUFBQWdMQUFCaEFRQUFoQVVBQUJBV0FBRENBZ0FBQ0FzQUFHRUJBQUNFQlFBQUVCWUFBTUlDQUFBSUN3QUFJQ3dBQUlRRkFBQVFGZ0FBUUZnQUFBZ0xBQUFnTEFBQWdMQUFBQkFXQUFCQVdBQUFBR0VCQUNBc0FBQ0FzQUFBQU1JQ0FFQllBQUFBWVFFQUFJUUZBSUN3QUFBQXdnSUFBQWdMQUFCaEFRQUFoQVVBQUJBV0FBRENBZ0FBQ0FzQUFHRUJBQUNFQlFBQUVCWUFBTUlDQUFBSUN3QUFJQ3dBQUlRRkFBQVFGZ0FBUUZnQUFBZ0xBQUFnTEFBQWdMQUFBQkFXQUFCQVdBQUFBR0VCQUNBc0FBQ0FzQUFBQU1JQ0FCd04vejl0ckhpMHFZWndzZ0FBQUFCSlJVNUVya0pnZ2c9PSc7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RGF0YS5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNzIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZnVuY3Rpb24gZm9ybWF0SXRlbXNPcHRpb25zKGl0ZW1zKSB7XFxuICAgIHJldHVybiBpdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcXG4gICAgICAgIHJldHVybiB7IHZhbHVlOiBpdGVtLmlkLCBsYWJlbDogaXRlbS5pZCArIFxcXCIgKFxcXCIgKyBpdGVtLnByaWNlICsgXFxcIiBcXFwiICsgaXRlbS5jdXJyZW5jeSArIFxcXCIpXFxcIiB9O1xcbiAgICB9KTtcXG59XFxuZXhwb3J0cy5mb3JtYXRJdGVtc09wdGlvbnMgPSBmb3JtYXRJdGVtc09wdGlvbnM7XFxuZnVuY3Rpb24gZ2V0SXRlbXNGcm9tTGluZShsaW5lcywgaW5kZXgpIHtcXG4gICAgcmV0dXJuIGxpbmVzLmZpbmQoZnVuY3Rpb24gKGxpbmUpIHtcXG4gICAgICAgIHJldHVybiBsaW5lLmlkID09PSBpbmRleDtcXG4gICAgfSkuaXRlbXM7XFxufVxcbmV4cG9ydHMuZ2V0SXRlbXNGcm9tTGluZSA9IGdldEl0ZW1zRnJvbUxpbmU7XFxuZnVuY3Rpb24gY2FsY3VsSXRlbUFtb3VudChsaW5lLCBpdGVtKSB7XFxuICAgIHZhciBkaXNjb3VudCA9IGxpbmUuZGlzY291bnQ7XFxuICAgIHJldHVybiByb3VuZERlY2ltYWwobGluZS5xdWFudGl0eSAqIGl0ZW0ucHJpY2UgKiAoMSAtIChkaXNjb3VudCA/IGRpc2NvdW50IDogMCkgLyAxMDApLCAyKTtcXG59XFxuZnVuY3Rpb24gZGlzcGxheUl0ZW1BbW91bnQobGluZSkge1xcbiAgICBpZiAoIWxpbmUuaXRlbSkgcmV0dXJuIFxcXCIwIFxcXCIgKyBsaW5lLml0ZW1zWzBdLmN1cnJlbmN5O1xcbiAgICB2YXIgaXRlbSA9IGxpbmUuaXRlbXMuZmluZChmdW5jdGlvbiAoaXRlbSkge1xcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT09IGxpbmUuaXRlbTtcXG4gICAgfSk7XFxuICAgIHJldHVybiBjYWxjdWxJdGVtQW1vdW50KGxpbmUsIGl0ZW0pICsgXFxcIiBcXFwiICsgaXRlbS5jdXJyZW5jeSArIFxcXCIgXFxcIjtcXG59XFxuZXhwb3J0cy5kaXNwbGF5SXRlbUFtb3VudCA9IGRpc3BsYXlJdGVtQW1vdW50O1xcbmZ1bmN0aW9uIGRpc3BsYXlUb3RhbEFtb3VudChsaW5lcykge1xcbiAgICB2YXIgdG90YWwgPSBsaW5lcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbGluZSkge1xcbiAgICAgICAgaWYgKCFsaW5lLml0ZW0pIHJldHVybiBhY2M7XFxuICAgICAgICB2YXIgaXRlbSA9IGxpbmUuaXRlbXMuZmluZChmdW5jdGlvbiAoaXRlbSkge1xcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmlkID09PSBsaW5lLml0ZW07XFxuICAgICAgICB9KTtcXG4gICAgICAgIHJldHVybiBjYWxjdWxJdGVtQW1vdW50KGxpbmUsIGl0ZW0pICsgYWNjO1xcbiAgICB9LCAwKTtcXG4gICAgcmV0dXJuIHRvdGFsICsgXFxcIiBcXFwiICsgbGluZXNbMF0uaXRlbXNbMF0uY3VycmVuY3k7XFxufVxcbmV4cG9ydHMuZGlzcGxheVRvdGFsQW1vdW50ID0gZGlzcGxheVRvdGFsQW1vdW50O1xcbmZ1bmN0aW9uIHJvdW5kRGVjaW1hbChudW1iZXIsIHByZWNpc2lvbikge1xcbiAgICB2YXIgdG1wID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiB8fCAyKTtcXG4gICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogdG1wKSAvIHRtcDtcXG59XFxuXFxuLyoqKi8gfSksXFxuLyogMjczICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbmV4cG9ydHMuZGVmYXVsdCA9IHtcXG4gICAgYW1vdW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQW1vdW50JyxcXG4gICAgICAgICdmci1GUic6ICdNb250YW50J1xcbiAgICB9LFxcbiAgICBkZXNjcmlwdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rlc2NyaXB0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXNjcmlwdGlvbidcXG4gICAgfSxcXG4gICAgZGlzY291bnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNjb3VudCAoJSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhYmFpcyAoJSknXFxuICAgIH0sXFxuICAgIGlkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUkZRIElEJyxcXG4gICAgICAgICdmci1GUic6ICdJZGVudGlmaWFudCBSRlEnXFxuICAgIH0sXFxuICAgIGlzc3VlX2RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJc3N1ZSBEYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEYXRlIGRlIGNyw6lhdGlvbidcXG4gICAgfSxcXG4gICAgaXNzdWVfdGltZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lzc3VlIFRpbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0hldXJlIGRlIGNyw6lhdGlvbidcXG4gICAgfSxcXG4gICAgbGluZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xpbmUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xpZ25lJ1xcbiAgICB9LFxcbiAgICBsaXN0X2l0ZW1zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGlzdCBvZiBpdGVtcycsXFxuICAgICAgICAnZnItRlInOiAnTGlzdGUgZGVzIGFydGljbGVzJ1xcbiAgICB9LFxcbiAgICBub3RlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm90ZScsXFxuICAgICAgICAnZnItRlInOiAnTm90ZSdcXG4gICAgfSxcXG4gICAgcXVhbnRpdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdRdWFudGl0eScsXFxuICAgICAgICAnZnItRlInOiAnUXVhbnRpdMOpJ1xcbiAgICB9LFxcbiAgICByZnFfaW5mbzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JGUSBpbmZvJyxcXG4gICAgICAgICdmci1GUic6ICdJbmZvIGR1IFJGUSdcXG4gICAgfSxcXG4gICAgc2VsZWN0X2l0ZW06IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYW4gaXRlbScsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5leiB1biBhcnRpY2xlJ1xcbiAgICB9LFxcbiAgICB0b3RhbF9hbW91bnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUb3RhbCBhbW91bnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vbnRhbnQgdG90YWwnXFxuICAgIH0sXFxuICAgIHZhbGlkYXRpb25fY29kZV9sYWJlbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSB2ZXJpZnkgeW91ciB2YWxpZGF0aW9uIGNvZGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHbDqXJpZmllciBsZSBjb2RlIGRlIHZhbGlkYXRpb24nXFxuICAgIH1cXG59O1xcblxcbi8qKiovIH0pXFxuLyoqKioqKi8gXSk7XCIsXCJjb21waWxlZENvbnRlbnRcIjpudWxsLFwiYnl0ZUNvbnRlbnRcIjpudWxsfV19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MTM4LCJtaW5FeHRyYVNlcnZpY2VWZXJzaW9uIjoiIiwibWF4RXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVBPLUJ1aWxkRW1haWwiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVBPLUJ1aWxkRW1haWxcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQnVpbGQgdGhlIGVtYWlsIG5vdGlmaWNhdGlvbiBzZW50IGJ5IHRoZSBIYW5kbGVQdXJjaGFzZU9yZGVyIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDUxMjIyNDQsXCJyZXZpc2lvbklkXCI6XCIwZGYyNGJlOWJkNDE3ZTVjNTdhMmJlM2VkMmMyMzdlNFwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGphdmEubmV0LlVSTEVuY29kZXJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ1N1YmplY3QnLCAnUGxhdGZvcm0gNiBEZW1vIEFwcCAtIFB1cmNoYXNlIE9yZGVyIHRvIHJldmlldydcXG5cXG5wNi5waXBlbGluZS5wdXQgJ0Zyb20nLCAnbm8tcmVwbHlAcGxhdGZvcm02LmlvJ1xcblxcbmRlZiBJTlNUQU5DRV9JRCA9IHA2LmNvbmZpZ3VyYXRpb24uZ2V0KFxcXCJhcHBsaWNhdGlvbmlkXFxcIilcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpdGVtSWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGl0ZW1QayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGl0ZW1JZHMpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5leGlzdHMoaXRlbVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5cXG5kZWYgcG9ydGFsQmFzZVVSTCA9ICdwb3J0YWwucGxhdGZvcm02LmlvJ1xcbmlmICgnZGV2Jy5lcXVhbHMoSU5TVEFOQ0VfSUQpKSB7XFxuICAgIHBvcnRhbEJhc2VVUkwgPSAnZGV2LnBvcnRhbC5hbWFsdG8uY29tJ1xcbn1cXG5cXG5kZWYgaHRtbExpbmsgPSBcXFwiaHR0cHM6Ly8kcG9ydGFsQmFzZVVSTC8jL2VkaXQtdHJhbnNhY3Rpb24vJElOU1RBTkNFX0lEL3A2X2RlbW8uVHJhbnNhY3Rpb25zL1xcXCIrVVJMRW5jb2Rlci5lbmNvZGUoJ1tcXFwiJyt0cmFuc2FjdGlvbklkKydcXFwiXScsICd1dGYtOCcpXFxucGlwZWxpbmUucHV0ICdocmVmJywgaHRtbExpbmssICd0ZXh0L3BsYWluJ1xcblxcbmRlZiBkb2NOdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uQnVzaW5lc3NEb2NOdW1iZXIudGV4dCgpXFxuZGVmIHRvdGFsQW1vdW50ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09ICdUb3RhbCBBbW91bnQnfS5WYWx1ZS50ZXh0KClcXG5cXG5pZiAoZG9jTnVtYmVyID09IG51bGwpIHtcXG4gICAgZG9jTnVtYmVyID0gJydcXG59XFxuXFxuaWYgKHRvdGFsQW1vdW50ID09IG51bGwpIHtcXG4gICAgdG90YWxBbW91bnQgPSAnJ1xcbn1cXG5cXG5cXG5wNi5waXBlbGluZS5wdXQgJ2RvY051bWJlcicsIGRvY051bWJlciwgJ3RleHQvcGxhaW4nXFxucDYucGlwZWxpbmUucHV0ICd0b3RhbEFtb3VudCcsIHRvdGFsQW1vdW50LCAndGV4dC9wbGFpbidcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNjQ1MTIyMjQ0LCJtaW5FeHRyYVNlcnZpY2VWZXJzaW9uIjoiIiwibWF4RXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVBPLUhhbmRsZUFjdGlvblJlamVjdE9yZGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiV0ZIYW5kbGVQTy1IYW5kbGVBY3Rpb25SZWplY3RPcmRlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJIYW5kbGUgVHJhbnNhY3Rpb25JbmZvIHVwZGF0ZXMgZm9yIGEgUmVqZWN0ZWQgT3JkZXIgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBIYW5kbGVQdXJjaGFzZU9yZGVyIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDUxMjIyNjEsXCJyZXZpc2lvbklkXCI6XCI0ODNmNWYzMzQxMWM3MzU4MTRmODg4NjVmOWU0Y2ZjM1wiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXRcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpdGVtSWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGl0ZW1QayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGl0ZW1JZHMpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5leGlzdHMoaXRlbVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXFxuU2ltcGxlRGF0ZUZvcm1hdCB0cmFuc2FjdGlvbl9zZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpXFxuXFxuZGVmIGZvcm1hdGVkRGF0ZSA9IHRyYW5zYWN0aW9uX3NkZi5mb3JtYXQoY3VycmVudERhdGUpXFxuXFxuZGVmIHJlYXNvbiA9IHA2LnBpcGVsaW5lLmdldCAncmVhc29uJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZSA9ICdSZWplY3RlZCdcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSByZWFzb25cXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZSA9ICdIYW5kbGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IGZvcm1hdGVkRGF0ZVxcblxcbmRlZiB0cmFuc2FjdGlvbklkID0gdHJhbnNhY3Rpb25JbmZvLklkLnRleHQoKVxcblxcbmRlZiBpcGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdUcmFuc2FjdGlvbkluZm8nLCB0cmFuc2FjdGlvbklkKVxcblxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIGlwaywgJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjE2NDUxMjIyNjEsIm1pbkV4dHJhU2VydmljZVZlcnNpb24iOiIiLCJtYXhFeHRyYVNlcnZpY2VWZXJzaW9uIjoiIn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IkhhbmRsZVF1b3RlVHJhbnNhY3Rpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJIYW5kbGVRdW90ZVRyYW5zYWN0aW9uXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkhhbmRsZSB0aGUgcmVjZXB0aW9uIG9mIGEgUXVvdGUgKGZsaXAgdG8gYSBQdXJjaGFzZU9yZGVyIFVCTCBEb2N1bWVudCwgY3JlYXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcgVHJhbnNhY3Rpb25JbmZvLCBzdG9yYWdlIHRvIGZpbGUgc3lzdGVtKSAtIFNjcmlwdCBjYWxsZWQgYnkgdGhlIEJsb2NrY2hhaW5FdmVudEhhbmRsZXIgc2NyaXB0XCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxNjQ3MjQ3OTA2LFwicmV2aXNpb25JZFwiOlwiN2ExODQ4ZWQ2ZDBiMzBjYmE0ZTNjOTYwNjU2ZmUyZjBcIixcIm1haW5TY3JpcHRcIjpcIi8qKlxcbiAqIFlvdSBjYW4gY2FsbCBhbm90aGVyIHNjcmlwdCBieSB1c2luZyAnSW5jbHVkZScgdGFnc1xcbiAqIFxcbiAqIEBpbmNsdWRlIFJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcXG4gKi9cXG5cXG5pbXBvcnQgamF2YS51dGlsLlVVSURcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIHF1b3RlQ29udGVudCA9IHA2LnBpcGVsaW5lLmdldCAndWJsJ1xcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKGZhbHNlLCB0cnVlKVxcbmRlZiBxdW90ZSA9IHNsdXJwZXIucGFyc2VUZXh0KHF1b3RlQ29udGVudClcXG5cXG5kZWYgYXBwbGljYXRpb25JZCA9ICdEZW1vQXBfRGV2J1xcblxcbi8vIENhbGN1bGF0ZSBpc3N1ZSBkYXRlIGFuZCB0aW1lXFxuZGVmIG5vdyA9IGhlbHBlci5ub3coKVxcbmRlZiBmb3JtYXR0ZWREYXRlID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJ5eXl5TU1kZCdUJ0hIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5kZWYgaXNzdWVEYXRlID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJ5eXl5LU1NLWRkXFxcIikuZm9ybWF0KG5vdylcXG5kZWYgaXNzdWVUaW1lID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxuZGVmIHNlbGxlck5hbWUgPSBxdW90ZS5TZWxsZXJTdXBwbGllclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiBidXllck5hbWUgPSBxdW90ZS5PcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eS5QYXJ0eS5QYXJ0eU5hbWUuTmFtZS50ZXh0KClcXG5kZWYgdG90YWxBbW91bnQgPSBxdW90ZS5RdW90ZWRNb25ldGFyeVRvdGFsLlBheWFibGVBbW91bnQudGV4dCgpXFxuZGVmIHRvdGFsQ3VycmVuY3kgPSBxdW90ZS5RdW90ZWRNb25ldGFyeVRvdGFsLlBheWFibGVBbW91bnQuJ0BjdXJyZW5jeUlEJy50ZXh0KClcXG5cXG5kZWYgcXVvdGVJZCA9IHF1b3RlLklELnRleHQoKVxcbmRlZiBjb21tZW50cyA9IHF1b3RlLk5vdGUudGV4dCgpXFxuXFxuaW50IG5iTGluZXMgPSBxdW90ZS5RdW90YXRpb25MaW5lLnNpemUoKVxcblxcbmRlZiB0cmFuc2FjdGlvblR5cGUgPSAnUHVyY2hhc2VPcmRlcidcXG5kZWYgcHVyY2hhc2VPcmRlcklkID0gVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKVxcbmRlZiBzdGF0dXMgPSAnUmVjZWl2ZWQnXFxuZGVmIHN0YXR1c01lc3NhZ2UgPSAnUmVjZWl2ZWQgYnkgRGVtbyBBcHAnXFxuXFxuZGVmIHNvdXJjZVVSSSA9IFxcXCJmaWxlOi8vJFA2X0RBVEEvcmVzb3VyY2VzL2RvY3VtZW50cy9RdW90ZS9cXFwiICsgcXVvdGVJZCArIFxcXCIueG1sXFxcIlxcbmRlZiB0YXJnZXRVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUHVyY2hhc2VPcmRlci9cXFwiICsgcHVyY2hhc2VPcmRlcklkICsgXFxcIi54bWxcXFwiXFxuXFxuZGVmIG9yZGVyTGluZXMgPSAnJ1xcblxcbnF1b3RlLlF1b3RhdGlvbkxpbmUuZWFjaCB7IG15TGluZSAtPlxcblxcbiAgICBvcmRlckxpbmVzICs9IFxcXCJcXFwiXFxcIjxjYWM6T3JkZXJMaW5lPlxcbiAgICA8Y2JjOk5vdGU+JHtlc2NhcGVYbWwobXlMaW5lLk5vdGUudGV4dCgpKX08L2NiYzpOb3RlPlxcbiAgICA8Y2FjOkxpbmVJdGVtPlxcbiAgICAgIDxjYmM6SUQ+JHtlc2NhcGVYbWwobXlMaW5lLklELnRleHQoKSl9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpRdWFudGl0eSB1bml0Q29kZT1cXFwiJHtlc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LidAdW5pdENvZGUnLnRleHQoKSl9XFxcIj4ke2VzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUXVhbnRpdHkudGV4dCgpKX08L2NiYzpRdWFudGl0eT5cXG4gICAgICA8Y2JjOkxpbmVFeHRlbnNpb25BbW91bnQgY3VycmVuY3lJRD1cXFwiJHtlc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLkxpbmVFeHRlbnNpb25BbW91bnQuJ0BjdXJyZW5jeUlEJy50ZXh0KCkpfVxcXCI+JHtlc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLkxpbmVFeHRlbnNpb25BbW91bnQudGV4dCgpKX08L2NiYzpMaW5lRXh0ZW5zaW9uQW1vdW50PlxcbiAgICAgIDxjYWM6UHJpY2U+XFxuICAgICAgICA8Y2JjOlByaWNlQW1vdW50IGN1cnJlbmN5SUQ9XFxcIiR7ZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5QcmljZUFtb3VudC4nQGN1cnJlbmN5SUQnLnRleHQoKSl9XFxcIj4ke2VzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUHJpY2UuUHJpY2VBbW91bnQudGV4dCgpKX08L2NiYzpQcmljZUFtb3VudD5cXG4gICAgICAgIDxjYmM6QmFzZVF1YW50aXR5IHVuaXRDb2RlPVxcXCIke2VzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUHJpY2UuQmFzZVF1YW50aXR5LidAdW5pdENvZGUnLnRleHQoKSl9XFxcIj4ke2VzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUHJpY2UuQmFzZVF1YW50aXR5LnRleHQoKSl9PC9jYmM6QmFzZVF1YW50aXR5PlxcbiAgICAgIDwvY2FjOlByaWNlPlxcbiAgICAgIDxjYWM6SXRlbT5cXG4gICAgICAgIDxjYmM6RGVzY3JpcHRpb24+JHtlc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLkl0ZW0uRGVzY3JpcHRpb24udGV4dCgpKX08L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgIDxjYmM6TmFtZT4ke2VzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uSXRlbS5OYW1lLnRleHQoKSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpJdGVtPlxcbiAgICA8L2NhYzpMaW5lSXRlbT5cXG4gIDwvY2FjOk9yZGVyTGluZT5cXG4gICAgXFxcIlxcXCJcXFwiXFxufVxcblxcblxcbmRlZiBvcmRlckNvbnRlbnQgPSBcXFwiXFxcIlxcXCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiIGVuY29kaW5nPVxcXCJVVEYtOFxcXCI/PlxcbjxPcmRlciB4bWxucz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6T3JkZXItMlxcXCJcXG4gIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIlxcbiAgeG1sbnM6Y2JjPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25CYXNpY0NvbXBvbmVudHMtMlxcXCI+XFxuICA8Y2JjOlVCTFZlcnNpb25JRD4yLjE8L2NiYzpVQkxWZXJzaW9uSUQ+XFxuICA8Y2JjOkN1c3RvbWl6YXRpb25JRD51cm46d3d3LmNlbmJpaS5ldTp0cmFuc2FjdGlvbjpiaWljb3JldHJkbTAwMTp2ZXIxLjA8L2NiYzpDdXN0b21pemF0aW9uSUQ+XFxuICA8Y2JjOlByb2ZpbGVJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiQklJXFxcIiBzY2hlbWVJRD1cXFwiUHJvZmlsZVxcXCJcXG4gICAgPnVybjp3d3cuY2VuYmlpLmV1OnByb2ZpbGU6QklJMDE6dmVyMS4wPC9jYmM6UHJvZmlsZUlEPlxcbiAgPGNiYzpJRD4ke2VzY2FwZVhtbChwdXJjaGFzZU9yZGVySWQpfTwvY2JjOklEPlxcbiAgPGNiYzpJc3N1ZURhdGU+JHtlc2NhcGVYbWwoaXNzdWVEYXRlKX08L2NiYzpJc3N1ZURhdGU+XFxuICAgPGNiYzpJc3N1ZVRpbWU+JHtlc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICA8Y2JjOk5vdGU+SW5mb3JtYXRpb24gdGV4dCBmb3IgdGhlIHdob2xlIG9yZGVyPC9jYmM6Tm90ZT5cXG4gIDxjYmM6RG9jdW1lbnRDdXJyZW5jeUNvZGU+U0VLPC9jYmM6RG9jdW1lbnRDdXJyZW5jeUNvZGU+XFxuICA8Y2JjOkFjY291bnRpbmdDb3N0Q29kZT5Qcm9qZWN0MTIzPC9jYmM6QWNjb3VudGluZ0Nvc3RDb2RlPlxcbiAgPGNhYzpRdW90YXRpb25Eb2N1bWVudFJlZmVyZW5jZT5cXG4gICAgPGNiYzpJRD5RdW90ZUlEMTIzPC9jYmM6SUQ+XFxuICA8L2NhYzpRdW90YXRpb25Eb2N1bWVudFJlZmVyZW5jZT5cXG4gIDxjYWM6T3JkZXJEb2N1bWVudFJlZmVyZW5jZT5cXG4gICAgPGNiYzpJRD5SamVjdGVkT3JkZXJJRDEyMzwvY2JjOklEPlxcbiAgPC9jYWM6T3JkZXJEb2N1bWVudFJlZmVyZW5jZT5cXG4gIDxjYWM6T3JpZ2luYXRvckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPk1BRk88L2NiYzpJRD5cXG4gIDwvY2FjOk9yaWdpbmF0b3JEb2N1bWVudFJlZmVyZW5jZT5cXG4gIDxjYWM6Q29udHJhY3Q+XFxuICAgIDxjYmM6SUQ+MzQzMjI8L2NiYzpJRD5cXG4gICAgPGNiYzpDb250cmFjdFR5cGU+RnJhbWV3b3JrQWdyZWVtZW50SUQxMjM8L2NiYzpDb250cmFjdFR5cGU+XFxuICA8L2NhYzpDb250cmFjdD5cXG4gIDxjYWM6QnV5ZXJDdXN0b21lclBhcnR5PlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYmM6RW5kcG9pbnRJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+NzMwMDA3MjMxMTExNTwvY2JjOkVuZHBvaW50SUQ+XFxuICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+NzMwMDA3MDAxMTExNTwvY2JjOklEPlxcbiAgICAgIDwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgPGNiYzpJRD5QYXJ0eUlEMTIzPC9jYmM6SUQ+XFxuICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICA8Y2FjOlBhcnR5TmFtZT5cXG4gICAgICAgIDxjYmM6TmFtZT4ke2VzY2FwZVhtbChidXllck5hbWUpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjEyMzQ1Njc4OTAxMjM8L2NiYzpJRD5cXG4gICAgICAgIDxjYmM6UG9zdGJveD5Qb0JveDEyMzwvY2JjOlBvc3Rib3g+XFxuICAgICAgICA8Y2JjOlN0cmVldE5hbWU+UsOlZGh1c2dhdGFuPC9jYmM6U3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QWRkaXRpb25hbFN0cmVldE5hbWU+Mm5kIGZsb29yPC9jYmM6QWRkaXRpb25hbFN0cmVldE5hbWU+XFxuICAgICAgICA8Y2JjOkJ1aWxkaW5nTnVtYmVyPjU8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6RGVwYXJ0bWVudD5QdXJjaGFzaW5nIGRlcGFydG1lbnQ8L2NiYzpEZXBhcnRtZW50PlxcbiAgICAgICAgPGNiYzpDaXR5TmFtZT5TdG9ja2hvbG08L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgIDxjYmM6UG9zdGFsWm9uZT4xMTAwMDwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+UmVnaW9uWDwvY2JjOkNvdW50cnlTdWJlbnRpdHk+XFxuICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPlNFPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDxjYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgICAgIDxjYmM6UmVnaXN0cmF0aW9uTmFtZT5Kb2huc3NvbnMgQnlnZ3Zhcm9yIEFCPC9jYmM6UmVnaXN0cmF0aW9uTmFtZT5cXG4gICAgICAgIDxjYmM6Q29tcGFueUlEIHNjaGVtZUlEPVxcXCJTRTpPUkdOUlxcXCI+NTUzMjMzMTE4MzwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICAgIDxjYWM6UmVnaXN0cmF0aW9uQWRkcmVzcz5cXG4gICAgICAgICAgPGNiYzpDaXR5TmFtZT5TdG9ja2hvbG08L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PlJlZ2lvblg8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgIDwvY2FjOkNvdW50cnk+XFxuICAgICAgICA8L2NhYzpSZWdpc3RyYXRpb25BZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5TGVnYWxFbnRpdHk+XFxuICAgIDwvY2FjOlBhcnR5PlxcbiAgPC9jYWM6QnV5ZXJDdXN0b21lclBhcnR5PlxcbiAgPGNhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYmM6RW5kcG9pbnRJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+NzMwMjM0NzIzMTExMTwvY2JjOkVuZHBvaW50SUQ+XFxuICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgPGNiYzpJRD5TZWxsZXJQYXJ0eUlEMTIzPC9jYmM6SUQ+XFxuICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICA8Y2FjOlBhcnR5TmFtZT5cXG4gICAgICAgIDxjYmM6TmFtZT4ke2VzY2FwZVhtbChzZWxsZXJOYW1lKX08L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOlBhcnR5TmFtZT5cXG4gICAgICA8Y2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj4wOTg3NjU0MzIxMTIzPC9jYmM6SUQ+XFxuICAgICAgICA8Y2JjOlBvc3Rib3g+MzIxPC9jYmM6UG9zdGJveD5cXG4gICAgICAgIDxjYmM6U3RyZWV0TmFtZT5LdW5nc2dhdGFuPC9jYmM6U3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QWRkaXRpb25hbFN0cmVldE5hbWU+c3VpdGUxMjwvY2JjOkFkZGl0aW9uYWxTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj4yMjwvY2JjOkJ1aWxkaW5nTnVtYmVyPlxcbiAgICAgICAgPGNiYzpEZXBhcnRtZW50PlNhbGVzIGRlcGFydG1lbnQ8L2NiYzpEZXBhcnRtZW50PlxcbiAgICAgICAgPGNiYzpDaXR5TmFtZT5TdG9ja2hvbG08L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgIDxjYmM6UG9zdGFsWm9uZT4xMTAwMDwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+UmVnaW9uWDwvY2JjOkNvdW50cnlTdWJlbnRpdHk+XFxuICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPlNFPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDxjYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgICAgIDxjYmM6UmVnaXN0cmF0aW9uTmFtZT5Nb2Rlcm5hIFByb2R1a3RlciBBQjwvY2JjOlJlZ2lzdHJhdGlvbk5hbWU+XFxuICAgICAgICA8Y2JjOkNvbXBhbnlJRCBzY2hlbWVJRD1cXFwiU0U6T1JHTlJcXFwiPjU1MzIzMzIyODM8L2NiYzpDb21wYW55SUQ+XFxuICAgICAgICA8Y2FjOlJlZ2lzdHJhdGlvbkFkZHJlc3M+XFxuICAgICAgICAgIDxjYmM6Q2l0eU5hbWU+U3RvY2tob2xtPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5SZWdpb25YPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgICAgPGNhYzpDb3VudHJ5PlxcbiAgICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPlNFPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgICAgPC9jYWM6UmVnaXN0cmF0aW9uQWRkcmVzcz5cXG4gICAgICA8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICA8L2NhYzpQYXJ0eT5cXG4gIDwvY2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICA8Y2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjA5ODc2NzgzMjExMjM8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPk1vZGVybmEgUHJvZHVrdGVyIEFCPC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgIDwvY2FjOlBhcnR5PlxcbiAgPC9jYWM6T3JpZ2luYXRvckN1c3RvbWVyUGFydHk+XFxuICA8Y2FjOkFudGljaXBhdGVkTW9uZXRhcnlUb3RhbD5cXG4gICAgPGNiYzpQYXlhYmxlQW1vdW50IGN1cnJlbmN5SUQgPVxcXCIke2VzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX1cXFwiPiR7ZXNjYXBlWG1sKHRvdGFsQW1vdW50KX08L2NiYzpQYXlhYmxlQW1vdW50PlxcbiAgPC9jYWM6QW50aWNpcGF0ZWRNb25ldGFyeVRvdGFsPlxcbiAgJHtvcmRlckxpbmVzfVxcbjwvT3JkZXI+XFxuXFxuXFxcIlxcXCJcXFwiXFxuXFxuXFxuZGVmIHRhcmdldEZpbGUgPSBwNi51cmkuZmlsZUZyb21VcmwodGFyZ2V0VVJJKVxcblxcbkZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZSh0YXJnZXRGaWxlLCBvcmRlckNvbnRlbnQsJ1VURi04JylcXG5cXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gXFxcIlxcXCJcXFwiPFRyYW5zYWN0aW9uSW5mbz5cXG4gICAgPElkPiR7cHVyY2hhc2VPcmRlcklkfTwvSWQ+XFxuICAgIDxDcmVhdGlvbkRhdGU+JHtmb3JtYXR0ZWREYXRlfTwvQ3JlYXRpb25EYXRlPlxcbiAgICA8VHJhbnNhY3Rpb25UeXBlPlB1cmNoYXNlIE9yZGVyPC9UcmFuc2FjdGlvblR5cGU+XFxuICAgIDxUcmFuc2FjdGlvbk51bWJlcj4ke3B1cmNoYXNlT3JkZXJJZH08L1RyYW5zYWN0aW9uTnVtYmVyPlxcbiAgICA8U291cmNlU3lzdGVtPkRlbW8gQXBwPC9Tb3VyY2VTeXN0ZW0+XFxuICAgIDxUYXJnZXRTeXN0ZW0vPlxcbiAgICA8U2VuZGVyLz5cXG4gICAgPEZpbmFsUmVjaXBpZW50PlN1cHBsaWVyPC9GaW5hbFJlY2lwaWVudD5cXG4gICAgPFRyYW5zZmVyUHJvdG9jb2w+QmxvY2tjaGFpbjwvVHJhbnNmZXJQcm90b2NvbD5cXG4gICAgPERlbGl2ZXJlZFZpYT5BbWFsdG88L0RlbGl2ZXJlZFZpYT5cXG4gICAgPFNvdXJjZURvY3VtZW50Rm9ybWF0PlVCTDwvU291cmNlRG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxTb3VyY2VEb2N1bWVudFVSST4ke3NvdXJjZVVSSX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1Bpdm90RG9jdW1lbnRVUkk+XFxuICAgIDxQaXZvdERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1Bpdm90RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRhcmdldERvY3VtZW50Rm9ybWF0PlVCTDwvVGFyZ2V0RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxUYXJnZXREb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1RhcmdldERvY3VtZW50VVJJPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRlY2huaWNhbFN0YXR1c0NvZGU+JHtzdGF0dXN9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3N0YXR1c01lc3NhZ2V9PC9UZWNobmljYWxTdGF0dXNNZXNzYWdlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9UZWNobmljYWxTdGF0dXNEYXRlPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0NvZGUvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0RhdGUvPlxcbiAgICA8RmxhZ3M+e1xcXCJhYXZpc2libGVcXFwiOiB0cnVlfTwvRmxhZ3M+XFxuICAgIDxPcmdQYXRoPi8ke2FwcGxpY2F0aW9uSWR9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtlc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkJ1eWVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtlc2NhcGVYbWwoYnV5ZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7ZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke2VzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+JHtlc2NhcGVYbWwodG90YWxBbW91bnQpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke2VzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkFwcGxpY2F0aW9uPC9LZXk+XFxuICAgICAgPFZhbHVlPnA2X2RlbW88L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+ICAgIFxcbjwvVHJhbnNhY3Rpb25JbmZvPlxcXCJcXFwiXFxcIlxcblxcbmRlZiBpcGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdUcmFuc2FjdGlvbkluZm8nLCBwdXJjaGFzZU9yZGVySWQpXFxucDYudHJhbnNhY3Rpb24uc2F2ZUFuZFJvdXRlKHRyYW5zYWN0aW9uSW5mbywgJ3A2X2RlbW8uVHJhbnNhY3Rpb25JbmZvJywgaXBrLCAnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fRGlzcGF0Y2hlcicpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NzI0NzkwNiwibWluRXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiIsIm1heEV4dHJhU2VydmljZVZlcnNpb24iOiIifSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uRGVjbGluZSIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvbkRlY2xpbmVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFJGUSBUcmFuc2FjdGlvbkluZm8gdXBkYXRlIGZvciBEZWNsaW5lZCBSRlEgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBIYW5kbGVSZXF1ZXN0Rm9yUXVvdGF0aW9uIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDUxMjIzNDQsXCJyZXZpc2lvbklkXCI6XCI2NjU2Y2JkNzNkMzhhMjhkYmYwN2UyZTFmMjliZWVkMVwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuaW1wb3J0IGphdmEudXRpbC5VVUlEXFxuXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgcmZxSWQgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5kZWYgcmVhc29uID0gcDYucGlwZWxpbmUuZ2V0ICdyZWFzb24nXFxuXFxuZGVmIG5vdyA9IGhlbHBlci5ub3coKVxcblxcbi8vIEZldGNoIHRoZSBSRlEgdHJhbnNhY3Rpb24gaW5mb1xcbmRlZiByZnFQayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIHJmcUlkKVxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZ2V0KHJmcVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG4vLyBEZWNsaW5lIFJGUSBsb2NhbGx5XFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcblxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZSA9ICdEZWNsaW5lZCdcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSByZWFzb25cXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHJmcVBrKVxcblxcbi8vIERlY2xpbmUgUkZRIG9uIHRoZSBibG9ja2NoYWluXFxuZGVmIGRlY2xpbmVJZCA9IFVVSUQucmFuZG9tVVVJRCgpXFxuaGVscGVyLmRlY2xpbmVSRlEoZGVjbGluZUlkLCBVVUlELmZyb21TdHJpbmcocmZxSWQpLCBub3cpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NTEyMjM0NCwibWluRXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiIsIm1heEV4dHJhU2VydmljZVZlcnNpb24iOiIifSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVQTy1IYW5kbGVBY3Rpb25BY2NlcHRPcmRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFRyYW5zYWN0aW9uSW5mbyB1cGRhdGVzIGZvciBhbiBBY2NlcHRlZCBPcmRlciAtIFNjcmlwdCBjYWxsZWQgYnkgdGhlIEhhbmRsZVB1cmNoYXNlT3JkZXIgV29ya2Zsb3cgU3RlcFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTY0NTEyMjM2MixcInJldmlzaW9uSWRcIjpcIjFmMjczOGMzOWI3ZjM3YWFhMDQ5OTIwYWRhNTg4OWJjXCIsXCJtYWluU2NyaXB0XCI6XCJpbXBvcnQgZ3Jvb3Z5Lmpzb24uKlxcbmltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdFxcblxcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIGl0ZW1JZHMgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG5kZWYgaXRlbVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgaXRlbUlkcylcXG5cXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmV4aXN0cyhpdGVtUGspXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoKVxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBzbHVycGVyLnBhcnNlVGV4dCh0cmFuc2FjdGlvbkluZm9Db250ZW50KVxcblxcbmRlZiBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKClcXG5TaW1wbGVEYXRlRm9ybWF0IHRyYW5zYWN0aW9uX3NkZiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KFxcXCJ5eXl5TU1kZCdUJ0hIOm1tOnNzXFxcIilcXG5cXG5kZWYgZm9ybWF0ZWREYXRlID0gdHJhbnNhY3Rpb25fc2RmLmZvcm1hdChjdXJyZW50RGF0ZSlcXG5cXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSAnQWNjZXB0ZWQnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZSA9ICdIYW5kbGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IGZvcm1hdGVkRGF0ZVxcblxcblxcbmRlZiBzYWxlc29yZGVybnVtYmVyID0gcDYucGlwZWxpbmUuZ2V0ICdzYWxlc29yZGVybnVtYmVyJ1xcblxcbmlmIChzYWxlc29yZGVybnVtYmVyIT1udWxsICYmICEnJy5lcXVhbHMoc2FsZXNvcmRlcm51bWJlcikpIHtcXG4gICAgXFxuICAgIGludCBuYktleVZhbHVlcyA9IHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5zaXplKClcXG4gICAgdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlW25iS2V5VmFsdWVzLTFdICsge1xcbiAgICAgICAgICAgICBLZXlWYWx1ZSB7XFxuICAgICAgICAgICAgS2V5KFxcXCJTYWxlcyBPcmRlciBOdW1iZXJcXFwiKVxcbiAgICAgICAgICAgIFZhbHVlKHNhbGVzb3JkZXJudW1iZXIpXFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXFxuZGVmIHRyYW5zYWN0aW9uSWQgPSB0cmFuc2FjdGlvbkluZm8uSWQudGV4dCgpXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoJ1RyYW5zYWN0aW9uSW5mbycsIHRyYW5zYWN0aW9uSWQpXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZUFuZFJvdXRlKGdyb292eS54bWwuWG1sVXRpbC5zZXJpYWxpemUodHJhbnNhY3Rpb25JbmZvKSwgJ3A2X2RlbW8uVHJhbnNhY3Rpb25JbmZvJywgaXBrLCAnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fRGlzcGF0Y2hlcicpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NTEyMjM2MiwibWluRXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiIsIm1heEV4dHJhU2VydmljZVZlcnNpb24iOiIifSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiQmxvY2tjaGFpbkV2ZW50SGFuZGxlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkJsb2NrY2hhaW5FdmVudEhhbmRsZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIGV2ZW50cyByZWNlaXZlZCBmcm9tIHRoZSBibG9ja2NoYWluXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4NDEyLFwicmV2aXNpb25JZFwiOlwiNjJhMWYyNDZjMmZmZWQ1NGZhYjhlZDhiYzhlZDI4Y2JcIixcIm1haW5TY3JpcHRcIjpcIi8qKlxcbiAqIFlvdSBjYW4gY2FsbCBhbm90aGVyIHNjcmlwdCBieSB1c2luZyAnSW5jbHVkZScgdGFnc1xcbiAqIFxcbiAqIEBpbmNsdWRlIFJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcXG4gKi9cXG5cXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG5kZWYgdG9waWNzID0gcDYucGlwZWxpbmUuZ2V0KCdsb2dUb3BpY3MnKS5zcGxpdCgnLCcpXFxuZGVmIGV2ZW50SGFzaCA9IHRvcGljc1swXVxcbmRlZiBkYXRhID0gcDYucGlwZWxpbmUuZ2V0KCdsb2dEYXRhJylcXG5cXG5pZiAoZXZlbnRIYXNoID09IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIuUkZRUmVjZWl2ZWRFdmVudEhhc2gpIHtcXG4gICAgZGVmIChyZnFJZCwgaXNzdWVkQXQsIHVibCkgPSBoZWxwZXIucmVhZFJGUVJlY2VpdmVkRXZlbnQodG9waWNzLCBkYXRhKVxcblxcbiAgICBwNi5waXBlbGluZS5wdXQoXFxcInVibFxcXCIsIHVibClcXG4gICAgcDYuY29udHJvbC5jYWxsICdwNl9kZW1vLlJlY2VpdmVSRlFUcmFuc2FjdGlvbidcXG59XFxuZWxzZSBpZiAoZXZlbnRIYXNoID09IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIuUkZRRGVjbGluZWRFdmVudEhhc2gpIHtcXG4gICAgZGVmIChzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0KSA9IGhlbHBlci5yZWFkUkZRRGVjbGluZWRFdmVudCh0b3BpY3MsIGRhdGEpXFxuXFxuICAgIGxvZy5pbmZvIFxcXCJSRlEgXFxcIiArIHJmcUlkICsgXFxcIiB3YXMgZGVjbGluZWQuXFxcIlxcbn1cXG5lbHNlIGlmIChldmVudEhhc2ggPT0gUkZRU21hcnRDb250cmFjdEhlbHBlci5RdW90ZVJlY2VpdmVkRXZlbnRIYXNoKSB7XFxuICAgIGRlZiAoc3VwcGxpZXIsIHJmcUlkLCBxdW90ZUlkLCBpc3N1ZWRBdCwgdWJsKSA9IGhlbHBlci5yZWFkUXVvdGVSZWNlaXZlZEV2ZW50KHRvcGljcywgZGF0YSlcXG5cXG4gICAgcDYucGlwZWxpbmUucHV0KFxcXCJ1YmxcXFwiLCB1YmwpXFxuICAgIHA2LmNvbnRyb2wuY2FsbCAncDZfZGVtby5IYW5kbGVRdW90ZVRyYW5zYWN0aW9uJ1xcbn1cXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4NDEyLCJtaW5FeHRyYVNlcnZpY2VWZXJzaW9uIjoiIiwibWF4RXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGUiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFJGUSBUcmFuc2FjdGlvbkluZm8gdXBkYXRlIGFuZCBRdW90ZSBjcmVhdGlvbiAtIFNjcmlwdCBjYWxsZWQgYnkgdGhlIEhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb24gV29ya2Zsb3cgU3RlcFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTY0NTEyMjQwMCxcInJldmlzaW9uSWRcIjpcImYxNzg4ZDYxZWYzZjlmZjk4ZjdlNzQ0Zjg1OTVhZmE4XCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsXFxuaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0XFxuXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIHhtbCA9IHA2LnBpcGVsaW5lLmdldFhtbCAneG1sJ1xcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIHJmcUlkID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuLy8gRmV0Y2ggUkZRIGZyb20gZGF0YWJhc2VcXG5kZWYgcmZxUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCByZnFJZClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmdldChyZnFQaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuLy8gQ2FsY3VsYXRlIGlzc3VlIGRhdGUgYW5kIHRpbWVcXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZURhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXktTU0tZGRcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZVRpbWUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcIkhIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5cXG4vLyBVcGRhdGUgdGhlIFJGUVxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZSA9ICdRdW90ZSBwcm92aWRlZCdcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSAnJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZSA9ICdIYW5kbGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG5kZWYgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCggdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKSlcXG5cXG5TdHJpbmcgcmZxQ29udGVudCA9IEZpbGVVdGlscy5yZWFkRmlsZVRvU3RyaW5nKHNyY0ZpbGUpXFxuZGVmIHJmcSA9IHNsdXJwZXIucGFyc2VUZXh0KHJmcUNvbnRlbnQpXFxuXFxuZGVmIHNlbGxlck5hbWUgPSByZnEuU2VsbGVyU3VwcGxpZXJQYXJ0eS5QYXJ0eS5QYXJ0eU5hbWUuTmFtZS50ZXh0KClcXG5kZWYgYnV5ZXJOYW1lID0gcmZxLk9yaWdpbmF0b3JDdXN0b21lclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiByZnFJc3N1ZURhdGUgPSByZnEuSXNzdWVEYXRlLnRleHQoKVxcblxcbnRyYW5zYWN0aW9uLnNhdmUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCByZnFQaylcXG5cXG5kZWYgbGluZXNDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICdsaW5lcydcXG5cXG4vLyBDcmVhdGUgUXVvdGUgZG9jdW1lbnRcXG5cXG5Kc29uU2x1cnBlciBqU2x1cnBlciA9IG5ldyBKc29uU2x1cnBlcigpXFxuZGVmIG15TGluZXMgPSBqU2x1cnBlci5wYXJzZVRleHQobGluZXNDb250ZW50KVxcblxcbkRlY2ltYWxGb3JtYXQgdWJsX2RmID0gbmV3IERlY2ltYWxGb3JtYXQoXFxcIiMwLjAwXFxcIilcXG5cXG5kZWYgcXVvdGF0aW9uTGluZXMgPSAnJ1xcblxcbmRlZiB0b3RhbEFtb3VudCA9IG5ldyBCaWdEZWNpbWFsKDApXFxuZGVmIHRvdGFsQ3VycmVuY3kgPSAnJ1xcblxcbmRlZiBxdW90ZUlkID0gVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKVxcblxcbnJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5lYWNoIHsgbXlMaW5lIC0+IFxcblxcbiAgICBkZWYgaW5wdXRMaW5lID0gbXlMaW5lcy5maW5kIHsgaXQuaWQgPT0gbXlMaW5lLklELnRleHQoKSB9XFxuICAgIGRlZiBpdGVtRGV0YWlsID0gaW5wdXRMaW5lLml0ZW1zLmZpbmQgeyBpdC5pZCA9PSBpbnB1dExpbmUuaXRlbSB9XFxuICAgIFxcbiAgICBCaWdEZWNpbWFsIHVuaXRQcmljZSA9IG5ldyBCaWdEZWNpbWFsKGl0ZW1EZXRhaWwucHJpY2UpXFxuICAgIFxcbiAgICBpZiAoaW5wdXRMaW5lLmRpc2NvdW50IT1udWxsICYmICEnJy5lcXVhbHMoaW5wdXRMaW5lLmRpc2NvdW50KSAmJiAhJzAnLmVxdWFscyhpbnB1dExpbmUuZGlzY291bnQpKSB7XFxuICAgICAgICBCaWdEZWNpbWFsIGRpc2NvdW50ID0gIG5ldyBCaWdEZWNpbWFsKDEwMCkuXFx0c3VidHJhY3QobmV3IEJpZ0RlY2ltYWwoaW5wdXRMaW5lLmRpc2NvdW50KSlcXG4gICAgICAgIHVuaXRQcmljZSA9IHVuaXRQcmljZS5tdWx0aXBseShkaXNjb3VudCkuZGl2aWRlKG5ldyBCaWdEZWNpbWFsKDEwMCkpXFxuICAgIH1cXG4gICAgXFxuICAgIGRlZiBsaW5lUXR5ID0gbmV3IEJpZ0RlY2ltYWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LnRleHQoKSlcXG4gICAgXFxuICAgIGRlZiBsaW5lQW1tb3VudCA9IGxpbmVRdHkubXVsdGlwbHkodW5pdFByaWNlKVxcbiAgICBcXG4gICAgdG90YWxBbW91bnQgPSB0b3RhbEFtb3VudC5hZGQobGluZUFtbW91bnQpXFxuICAgIHRvdGFsQ3VycmVuY3kgPSBpdGVtRGV0YWlsLmN1cnJlbmN5XFxuICAgIFxcbiAgICBxdW90YXRpb25MaW5lcyArPSAgXFxcIlxcXCJcXFwiPGNhYzpRdW90YXRpb25MaW5lPlxcbiAgICAgIDxjYmM6SUQ+JHtlc2NhcGVYbWwobXlMaW5lLklELnRleHQoKSl9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpOb3RlPiR7ZXNjYXBlWG1sKG15TGluZS5Ob3RlLnRleHQoKSl9PC9jYmM6Tm90ZT5cXG4gICAgICA8Y2FjOkxpbmVJdGVtPlxcbiAgICAgICAgPGNiYzpJRD4ke2VzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uSUQudGV4dCgpKX08L2NiYzpJRD5cXG4gICAgICAgIDxjYmM6UXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7ZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5RdWFudGl0eS4nQHVuaXRDb2RlJy50ZXh0KCkpfVxcXCI+JHtlc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LnRleHQoKSl9PC9jYmM6UXVhbnRpdHk+XFxuICAgICAgICA8Y2JjOkxpbmVFeHRlbnNpb25BbW91bnQgY3VycmVuY3lJRD1cXFwiJHtlc2NhcGVYbWwoaXRlbURldGFpbC5jdXJyZW5jeSl9XFxcIj4ke2VzY2FwZVhtbCh1YmxfZGYuZm9ybWF0KGxpbmVBbW1vdW50KSl9PC9jYmM6TGluZUV4dGVuc2lvbkFtb3VudD5cXG4gICAgICAgIDxjYWM6UHJpY2U+XFxuICAgICAgICAgIDxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD1cXFwiJHtlc2NhcGVYbWwoaXRlbURldGFpbC5jdXJyZW5jeSl9XFxcIj4ke2VzY2FwZVhtbCh1YmxfZGYuZm9ybWF0KHVuaXRQcmljZSkpfTwvY2JjOlByaWNlQW1vdW50PlxcbiAgICAgICAgICA8Y2JjOkJhc2VRdWFudGl0eSB1bml0Q29kZT1cXFwiJHtlc2NhcGVYbWwoaXRlbURldGFpbC51b20pfVxcXCI+MTwvY2JjOkJhc2VRdWFudGl0eT5cXG4gICAgICAgIDwvY2FjOlByaWNlPlxcbiAgICAgICAgPGNhYzpJdGVtPlxcbiAgICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uPiR7ZXNjYXBlWG1sKGlucHV0TGluZS5pdGVtKX08L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPGNiYzpOYW1lPiR7ZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX08L2NiYzpOYW1lPlxcbiAgICAgICAgPC9jYWM6SXRlbT5cXG4gICAgICA8L2NhYzpMaW5lSXRlbT5cXG4gICAgPC9jYWM6UXVvdGF0aW9uTGluZT5cXG4gICAgXFxcIlxcXCJcXFwiXFxufVxcblxcbmRlZiBxdW90ZVVCTCA9IFxcXCJcXFwiXFxcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPFF1b3RhdGlvbiB4bWxucz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6UXVvdGF0aW9uLTJcXFwiIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIiB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gIDxjYmM6VUJMVmVyc2lvbklEPjIuMDwvY2JjOlVCTFZlcnNpb25JRD5cXG4gIDxjYmM6Q3VzdG9taXphdGlvbklEPk9JT1VCTC0yLjE8L2NiYzpDdXN0b21pemF0aW9uSUQ+XFxuICA8Y2JjOlByb2ZpbGVJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiMzIwXFxcIiBzY2hlbWVJRD1cXFwidXJuOm9pb3VibDppZDpwcm9maWxlaWQtMS4yXFxcIj5Qcm9jdXJlbWVudC1RdW9TaW0tMS4wPC9jYmM6UHJvZmlsZUlEPlxcbiAgPGNiYzpJRD4ke2VzY2FwZVhtbChxdW90ZUlkKX08L2NiYzpJRD5cXG4gIDxjYmM6Q29weUluZGljYXRvcj5mYWxzZTwvY2JjOkNvcHlJbmRpY2F0b3I+XFxuICA8Y2JjOlVVSUQ+JHtlc2NhcGVYbWwocXVvdGVJZCl9PC9jYmM6VVVJRD5cXG4gIDxjYmM6SXNzdWVEYXRlPiR7ZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgPGNiYzpJc3N1ZVRpbWU+JHtlc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICA8Y2JjOk5vdGUgbGFuZ3VhZ2VJRD1cXFwiZGEtZGtcXFwiPkJlc3RpbGxpbmcgYWYgY29tcHV0ZXJlPC9jYmM6Tm90ZT5cXG4gIDxjYWM6UmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPkc4NjdCPC9jYmM6SUQ+XFxuXFx0PGNiYzpVVUlEPiR7ZXNjYXBlWG1sKHJmcUlkKX08L2NiYzpVVUlEPlxcblxcdDxjYmM6SXNzdWVEYXRlPiR7ZXNjYXBlWG1sKHJmcUlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgPC9jYWM6UmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgICA8Y2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+TEVWMDAxMjM8L2NiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYmM6RW5kcG9pbnRJRCBzY2hlbWVJRD1cXFwiREs6Q1ZSXFxcIj5ESzE4Mjk2Nzk5PC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUlEPVxcXCJESzpDVlJcXFwiPkRLMTgyOTY3OTk8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7ZXNjYXBlWG1sKHNlbGxlck5hbWUpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgIDxjYmM6QWRkcmVzc0Zvcm1hdENvZGUgbGlzdEFnZW5jeUlEPVxcXCIzMjBcXFwiIGxpc3RJRD1cXFwidXJuOm9pb3VibDpjb2RlbGlzdDphZGRyZXNzZm9ybWF0Y29kZS0xLjFcXFwiPlN0cnVjdHVyZWRESzwvY2JjOkFkZHJlc3NGb3JtYXRDb2RlPlxcbiAgICAgICAgPGNiYzpTdHJlZXROYW1lPkFybmUgSmFjb2JzZW5zIEFsbMOpPC9jYmM6U3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+MTU8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+S8O4YmVuaGF2biBTPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICA8Y2JjOlBvc3RhbFpvbmU+MjMwMDwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPkRLPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDxjYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgICAgIDxjYmM6UmVnaXN0cmF0aW9uTmFtZT5EZWxjb21wdXRlciBBL1M8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+MTgyOTY3OTk8L2NiYzpDb21wYW55SUQ+XFxuICAgICAgPC9jYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgPGNhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICAgPGNhYzpQYXJ0eT5cXG4gICAgICA8Y2JjOkVuZHBvaW50SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjU3OTgwMDA0MTY2MDQ8L2NiYzpFbmRwb2ludElEPlxcbiAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjU3OTgwMDA0MTY2MDQ8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7ZXNjYXBlWG1sKGJ1eWVyTmFtZSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgPGNiYzpBZGRyZXNzRm9ybWF0Q29kZSBsaXN0QWdlbmN5SUQ9XFxcIjMyMFxcXCIgbGlzdElEPVxcXCJ1cm46b2lvdWJsOmNvZGVsaXN0OmFkZHJlc3Nmb3JtYXRjb2RlLTEuMVxcXCI+U3RydWN0dXJlZERLPC9jYmM6QWRkcmVzc0Zvcm1hdENvZGU+XFxuICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QmVybnN0b3JmZnN2ZWo8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj4xNjE8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+Q2hhcmxvdHRlbmx1bmQ8L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgIDxjYmM6UG9zdGFsWm9uZT4yOTIwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+REs8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPkdlbnRvZnRlIEtvbW11bmU8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+REsxMjM0NTY3ODwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICA8L2NhYzpQYXJ0eT5cXG4gIDwvY2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcblxcdDxjYWM6UXVvdGVkTW9uZXRhcnlUb3RhbD5cXG4gICAgPGNiYzpQYXlhYmxlQW1vdW50IGN1cnJlbmN5SUQgPVxcXCIke2VzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX1cXFwiPiR7ZXNjYXBlWG1sKHVibF9kZi5mb3JtYXQodG90YWxBbW91bnQpKX08L2NiYzpQYXlhYmxlQW1vdW50PlxcbiAgPC9jYWM6UXVvdGVkTW9uZXRhcnlUb3RhbD5cXG4gICR7cXVvdGF0aW9uTGluZXN9XFxuPC9RdW90YXRpb24+XFxuXFxcIlxcXCJcXFwiXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdRdW90ZSdcXG5kZWYgY29tbWVudHMgPSAnJ1xcbmludCBuYkxpbmVzID0gcmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLnNpemUoKVxcblxcbmRlZiBzdGF0dXMgPSAnQ3JlYXRlZCdcXG5kZWYgc3RhdHVzTWVzc2FnZSA9ICdDcmVhdGVkIGJ5IERlbW8gQXBwJ1xcblxcbmRlZiBzb3VyY2VVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvXFxcIiArIHRyYW5zYWN0aW9uVHlwZSArIFxcXCIvXFxcIiArIHF1b3RlSWQgKyBcXFwiLnhtbFxcXCJcXG5cXG5kZWYgIHNvdXJjZUZpbGUgPSBwNi51cmkuZmlsZUZyb21Vcmwoc291cmNlVVJJKVxcbkZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZShzb3VyY2VGaWxlLCBxdW90ZVVCTCwnVVRGLTgnKVxcblxcbmRlZiBhcHBsaWNhdGlvbklkID0gJ0RlbW9BcHBfRGV2J1xcblxcbmRlZiBuZXdUcmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHtlc2NhcGVYbWwocXVvdGVJZCl9PC9JZD5cXG4gICAgPENyZWF0aW9uRGF0ZT4ke2VzY2FwZVhtbChmb3JtYXR0ZWREYXRlKX08L0NyZWF0aW9uRGF0ZT5cXG4gICAgPFRyYW5zYWN0aW9uVHlwZT4ke2VzY2FwZVhtbCh0cmFuc2FjdGlvblR5cGUpfTwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHtlc2NhcGVYbWwocXVvdGVJZCl9PC9UcmFuc2FjdGlvbk51bWJlcj5cXG4gICAgPFNvdXJjZVN5c3RlbT5EZW1vIEFwcDwvU291cmNlU3lzdGVtPlxcbiAgICA8VGFyZ2V0U3lzdGVtLz5cXG4gICAgPFNlbmRlci8+XFxuICAgIDxGaW5hbFJlY2lwaWVudD5TdXBwbGllcjwvRmluYWxSZWNpcGllbnQ+XFxuICAgIDxUcmFuc2ZlclByb3RvY29sPkJsb2NrY2hhaW48L1RyYW5zZmVyUHJvdG9jb2w+XFxuICAgIDxEZWxpdmVyZWRWaWE+QW1hbHRvPC9EZWxpdmVyZWRWaWE+XFxuICAgIDxTb3VyY2VEb2N1bWVudEZvcm1hdD5VQkw8L1NvdXJjZURvY3VtZW50Rm9ybWF0PlxcbiAgICA8U291cmNlRG9jdW1lbnRVUkk+JHtlc2NhcGVYbWwoc291cmNlVVJJKX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke2VzY2FwZVhtbChzb3VyY2VVUkkpfTwvUGl2b3REb2N1bWVudFVSST5cXG4gICAgPFBpdm90RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvUGl2b3REb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRGb3JtYXQ+VUJMPC9UYXJnZXREb2N1bWVudEZvcm1hdD5cXG4gICAgPFRhcmdldERvY3VtZW50VVJJPiR7ZXNjYXBlWG1sKHNvdXJjZVVSSSl9PC9UYXJnZXREb2N1bWVudFVSST5cXG4gICAgPFRhcmdldERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1RhcmdldERvY3VtZW50Q29udGVudFR5cGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNDb2RlPiR7ZXNjYXBlWG1sKHN0YXR1cyl9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke2VzY2FwZVhtbChzdGF0dXNNZXNzYWdlKX08L1RlY2huaWNhbFN0YXR1c01lc3NhZ2U+XFxuICAgIDxUZWNobmljYWxTdGF0dXNEYXRlPiR7ZXNjYXBlWG1sKGZvcm1hdHRlZERhdGUpfTwvVGVjaG5pY2FsU3RhdHVzRGF0ZT5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNDb2RlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNEYXRlLz5cXG4gICAgPEZsYWdzPntcXFwiYWF2aXNpYmxlXFxcIjogdHJ1ZX08L0ZsYWdzPlxcbiAgICA8T3JnUGF0aD4vJHtlc2NhcGVYbWwoYXBwbGljYXRpb25JZCl9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtlc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QnV5ZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke2VzY2FwZVhtbChidXllck5hbWUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7ZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke2VzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+JHtlc2NhcGVYbWwodWJsX2RmLmZvcm1hdCh0b3RhbEFtb3VudCkpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke2VzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkFwcGxpY2F0aW9uPC9LZXk+XFxuICAgICAgPFZhbHVlPnA2X2RlbW88L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIHF1b3RlUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdUcmFuc2FjdGlvbkluZm8nLCBxdW90ZUlkKVxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZShuZXdUcmFuc2FjdGlvbkluZm8sICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlUGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNjQ1MTIyNDAwLCJtaW5FeHRyYVNlcnZpY2VWZXJzaW9uIjoiIiwibWF4RXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiJ9XSwicGxhdGZvcm02LmNvdW50ZXJzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5jb3VudGVycyIsIm5hbWUiOiJDb3VudFJGUXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJDb3VudFJGUXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiIyBvZiBSRlFzIHdpdGggXFxcIlJlY2VpdmVkXFxcIiB0ZWNobmljYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c1wiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjMyMDY0NjAxNDksXCJyZXZpc2lvbklkXCI6XCIzY2ZkOWJjNmM3NzU5YTE5ODg5YzlmZmVjODYzY2QxMFwiLFwibGFzdFN5bmNEYXRlXCI6MTU2MzIwNjQ2MDE0OSxcInZhbHVlXCI6MTYuMCxcInR5cGVcIjpcIkNPVU5UXCIsXCJxdWVyeVwiOlwiL1RyYW5zYWN0aW9uSW5mb1tUcmFuc2FjdGlvblR5cGUgPSBcXFwiUmVxdWVzdCBGb3IgUXVvdGF0aW9uXFxcIiBdW1RlY2huaWNhbFN0YXR1c0NvZGUgPSBcXFwiUmVjZWl2ZWRcXFwiIF1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpIDwgY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwbX1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEzLDIpKV1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpID4gY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTMsMikpXVwiLFwidGFyZ2V0XCI6XCJUcmFuc2FjdGlvblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiYW5vbnltb3VzIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MzIwNjQ2MDE0OSwibWluRXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiIsIm1heEV4dHJhU2VydmljZVZlcnNpb24iOiIifSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmNvdW50ZXJzIiwibmFtZSI6IkNvdW50UXVvdGVzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRRdW90ZXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiIyBvZiBRdW90ZXMgd2l0aCBcXFwiU2VudFxcXCIgdGVjaG5pY2FsIHN0YXR1cyAob3ZlciB0aGUgcGFzdCA5MCBkYXlzKVwifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJhbm9ueW1vdXNcIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYzMjA2NTIwMjQ3LFwicmV2aXNpb25JZFwiOlwiZDMxNGEwMTQwYmE4ZDcwNWZiMDBlZDQzNGQzMGRjZjBcIixcImxhc3RTeW5jRGF0ZVwiOjE1NjMyMDY1MjAyNDcsXCJ2YWx1ZVwiOjAuMCxcInR5cGVcIjpcIkNPVU5UXCIsXCJxdWVyeVwiOlwiL1RyYW5zYWN0aW9uSW5mb1tUcmFuc2FjdGlvblR5cGUgPSBcXFwiUXVvdGVcXFwiIF1bVGVjaG5pY2FsU3RhdHVzQ29kZSA9IFxcXCJTZW50XFxcIiBdW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA8IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MG19XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMywyKSldW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA+IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEzLDIpKV1cIixcInRhcmdldFwiOlwiVHJhbnNhY3Rpb25cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImFub255bW91cyIsImxhc3RNb2RpZmllZERhdGUiOjE1NjMyMDY1MjAyNDcsIm1pbkV4dHJhU2VydmljZVZlcnNpb24iOiIiLCJtYXhFeHRyYVNlcnZpY2VWZXJzaW9uIjoiIn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5jb3VudGVycyIsIm5hbWUiOiJDb3VudEZhaWxlZFJvdXRpbmdPcmRlcnMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJDb3VudEZhaWxlZFJvdXRpbmdPcmRlcnNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiIyBvZiBGYWlsZWQgUm91dGluZyBPcmRlcnNcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiYW5vbnltb3VzXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MzIwNzMwMDA3NyxcInJldmlzaW9uSWRcIjpcIjhmYjQxZTdmZjlhOGMxMjgwNzliNzU5ZDk1YTc2ZWQ4XCIsXCJsYXN0U3luY0RhdGVcIjoxNTYzMjA3MzAwMDc3LFwidmFsdWVcIjo4LjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9yb3V0aW5nT3JkZXJcIixcInRhcmdldFwiOlwiRmFpbGVkUm91dGluZ09yZGVyXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXMiLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYzMjA3MzAwMDc3LCJtaW5FeHRyYVNlcnZpY2VWZXJzaW9uIjoiIiwibWF4RXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRSZWplY3RlZFBPcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkNvdW50UmVqZWN0ZWRQT3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiIyBvZiBQdXJjaGFzZSBPcmRlcnMgd2l0aCBcXFwiUmVqZWN0ZWRcXFwiIGZ1bmN0aW9uYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c1wiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjMyMDY2NDA3MjMsXCJyZXZpc2lvbklkXCI6XCJhMDQ4NDExMzZjZGM3OGZjYTUzNDliYjBjY2EwOWIzMVwiLFwibGFzdFN5bmNEYXRlXCI6MTU2MzIwNjY0MDcyMyxcInZhbHVlXCI6MC4wLFwidHlwZVwiOlwiQ09VTlRcIixcInF1ZXJ5XCI6XCIvVHJhbnNhY3Rpb25JbmZvW1RyYW5zYWN0aW9uVHlwZSA9IFxcXCJQdXJjaGFzZSBPcmRlclxcXCIgXVtGdW5jdGlvbmFsU3RhdHVzQ29kZSA9IFxcXCJSZWplY3RlZFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXMiLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYzMjA2NjQwNzIzLCJtaW5FeHRyYVNlcnZpY2VWZXJzaW9uIjoiIiwibWF4RXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRBY2NlcHRlZFBPcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkNvdW50QWNjZXB0ZWRQT3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiIyBvZiBQdXJjaGFzZSBPcmRlcnMgd2l0aCBcXFwiQWNjZXB0ZWRcXFwiIGZ1bmN0aW9uYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c1wiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjMyMDY1ODAxNTEsXCJyZXZpc2lvbklkXCI6XCIwYTMyOTkyMGVhODQ2ZjAyNTgyYmZiNDY0NjYzMGEzOVwiLFwibGFzdFN5bmNEYXRlXCI6MTU2MzIwNjU4MDE1MSxcInZhbHVlXCI6MC4wLFwidHlwZVwiOlwiQ09VTlRcIixcInF1ZXJ5XCI6XCIvVHJhbnNhY3Rpb25JbmZvW1RyYW5zYWN0aW9uVHlwZSA9IFxcXCJQdXJjaGFzZSBPcmRlclxcXCIgXVtGdW5jdGlvbmFsU3RhdHVzQ29kZSA9IFxcXCJBY2NlcHRlZFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXMiLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYzMjA2NTgwMTUxLCJtaW5FeHRyYVNlcnZpY2VWZXJzaW9uIjoiIiwibWF4RXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiJ9XSwicGxhdGZvcm02LmhvbWVwYWdlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuaG9tZXBhZ2VzIiwibmFtZSI6IkRlbW8gSG9tZSIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkRlbW8gSG9tZVwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEZW1vIEhvbWVcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTc5NjUsXCJyZXZpc2lvbklkXCI6XCIzMWFiY2NlZTBiYTVmNzQ1Zjc2OWEyMTk0M2IyYTZhNFwiLFwibW9kdWxlc1wiOlt7XCJpZFwiOlwicDZfZGVtby5Db3VudFJGUXNcIixcIm9yZGVyXCI6MCxcInR5cGVcIjpcImNvdW50ZXJzXCIsXCJ3aWR0aFwiOlwic21hbGxcIixcImhlaWdodFwiOlwibWVkaXVtXCIsXCJkYXRhXCI6bnVsbH0se1wiaWRcIjpcInA2X2RlbW8uQ291bnRRdW90ZXNcIixcIm9yZGVyXCI6MSxcInR5cGVcIjpcImNvdW50ZXJzXCIsXCJ3aWR0aFwiOlwic21hbGxcIixcImhlaWdodFwiOlwibWVkaXVtXCIsXCJkYXRhXCI6bnVsbH0se1wiaWRcIjpcInA2X2RlbW8uQ291bnRBY2NlcHRlZFBPc1wiLFwib3JkZXJcIjoyLFwidHlwZVwiOlwiY291bnRlcnNcIixcIndpZHRoXCI6XCJzbWFsbFwiLFwiaGVpZ2h0XCI6XCJtZWRpdW1cIixcImRhdGFcIjpudWxsfSx7XCJpZFwiOlwicDZfZGVtby5Db3VudFJlamVjdGVkUE9zXCIsXCJvcmRlclwiOjMsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9XX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTc5NjUsIm1pbkV4dHJhU2VydmljZVZlcnNpb24iOiIiLCJtYXhFeHRyYVNlcnZpY2VWZXJzaW9uIjoiIn1dLCJwbGF0Zm9ybTYuZGF0YW1vZGVscyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuZGF0YW1vZGVscyIsIm5hbWUiOiJUcmFuc2FjdGlvbkluZm8iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJUcmFuc2FjdGlvbkluZm9cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiVHJhbnNhY3Rpb25JbmZvIGRhdGFtb2RlbFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExNzkzNCxcInJldmlzaW9uSWRcIjpcIjczMmVhYzZhMDM1Yjk3Y2Q4MzY1YmNlOGNiN2JlNzVkXCIsXCJzY2hlbWFcIjpcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPHhzZDpzY2hlbWEgeG1sbnM6eHNkPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYVxcXCIgYXR0cmlidXRlRm9ybURlZmF1bHQ9XFxcInVucXVhbGlmaWVkXFxcIlxcbiAgICAgICAgICAgIGJsb2NrRGVmYXVsdD1cXFwiXFxcIlxcbiAgICAgICAgICAgIGVsZW1lbnRGb3JtRGVmYXVsdD1cXFwicXVhbGlmaWVkXFxcIlxcbiAgICAgICAgICAgIGZpbmFsRGVmYXVsdD1cXFwiXFxcIj5cXG4gICA8eHNkOmVsZW1lbnQgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJUcmFuc2FjdGlvbkluZm9cXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgPHhzZDpjb21wbGV4VHlwZSBtaXhlZD1cXFwiZmFsc2VcXFwiPlxcbiAgICAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiQ3JlYXRpb25EYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRyYW5zYWN0aW9uVHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUcmFuc2FjdGlvbk51bWJlclxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJTb3VyY2VTeXN0ZW1cXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVGFyZ2V0U3lzdGVtXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNlbmRlclxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJGaW5hbFJlY2lwaWVudFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUcmFuc2ZlclByb3RvY29sXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkRlbGl2ZXJlZFZpYVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJTb3VyY2VEb2N1bWVudEZvcm1hdFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJTb3VyY2VEb2N1bWVudFVSSVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlBpdm90RG9jdW1lbnRGb3JtYXRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiUGl2b3REb2N1bWVudFVSSVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJQaXZvdERvY3VtZW50Q29udGVudFR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVGFyZ2V0RG9jdW1lbnRGb3JtYXRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVGFyZ2V0RG9jdW1lbnRVUklcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJBdHRhY2htZW50c1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJBdHRhY2htZW50c1xcXCIvPlxcblxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiVGVjaG5pY2FsU3RhdHVzQ29kZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJUZWNobmljYWxTdGF0dXNNZXNzYWdlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlRlY2huaWNhbFN0YXR1c0RhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRnVuY3Rpb25hbFN0YXR1c0NvZGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRnVuY3Rpb25hbFN0YXR1c0RhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRmxhZ3NcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJPcmdQYXRoXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiS2V5VmFsdWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiS2V5VmFsdWVcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIklzc3Vlc1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJJc3N1ZXNcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkF1ZGl0VHJhaWxcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZSBtaXhlZD1cXFwiZmFsc2VcXFwiPlxcbiAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJSZWNvcmRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZSBtaXhlZD1cXFwiZmFsc2VcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJDb2RlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkRhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiTWVzc2FnZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD5cXG4gICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICAgICAgICAgICA8L3hzZDplbGVtZW50PlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJXb3JrZmxvd1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJXRkluc3RhbmNlc1xcXCIvPlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgICAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgICAgIDx4c2Q6dW5pcXVlIG5hbWU9XFxcIlRyYW5zYWN0aW9uSW5mb1xcXCI+XFxuICAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD1cXFwiLlxcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZmllbGQgeHBhdGg9XFxcIklkXFxcIi8+XFxuICAgICAgPC94c2Q6dW5pcXVlPlxcbiAgIDwveHNkOmVsZW1lbnQ+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiVGhyZWFkXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRyYW5zYWN0aW9uSW5mb0lkXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkJ1c2luZXNzRG9jTmFtZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJNZXNzYWdlQ29udGVudFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJEYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJLZXlWYWx1ZVxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJLZXlcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVmFsdWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIkF0dGFjaG1lbnRzXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiQXR0YWNobWVudFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJBdHRhY2htZW50XFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiQXR0YWNobWVudFxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJVUklcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiQ29udGVudFR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIklzc3Vlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIklzc3VlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIklzc3VlXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiSXNzdWVcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiTGV2ZWxcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiVHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJNZXNzYWdlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZpZWxkXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZpZWxkVHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJWYWx1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJQYXRoXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkxpc3RPZlZhbHVlc1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJMaXN0T2ZWYWx1ZXNcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJMaXN0T2ZWYWx1ZXNcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJWYWx1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiV0ZJbnN0YW5jZXNcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGbG93TmFtZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJBY3RpdmVJbnN0YW5jZUlkXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiSW5zdGFuY2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiV0ZJbnN0YW5jZVxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIldGSW5zdGFuY2VcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiaWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwic3RhcnREYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImVuZERhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwibGFzdFVzZXJFbWFpbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGF0dXNcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZmxpbmtcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwiRkxJTktcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwic3RlcFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJXRlN0ZXBcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRlN0ZXBcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwic3RlcElkXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInN0YXR1c1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJhY3Rpb25lZEJ5RW1haWxcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwic3RhcnREYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImVuZERhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiYXNzaWduZWRUb05hbWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiYXNzaWduZWVzXFxcIiBuaWxsYWJsZT1cXFwidHJ1ZVxcXCIgdHlwZT1cXFwiV0ZBc3NpZ25lZXNcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImRlc2NyaXB0aW9uXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIldGRGVzY3JpcHRpb25NYXBcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwicGFyYW1ldGVyXFxcIiBuaWxsYWJsZT1cXFwidHJ1ZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiS2V5VmFsdWVcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJGTElOS1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJ2aWV3XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiaWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwidHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiV0ZBc3NpZ25lZXNcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJhc3NpZ25lZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiV0ZEZXNjcmlwdGlvbk1hcFxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIj5cXG4gICAgICAgICA8eHNkOmFueSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZXNwYWNlPVxcXCIjI2FueVxcXCIgcHJvY2Vzc0NvbnRlbnRzPVxcXCJsYXhcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG48L3hzZDpzY2hlbWE+XCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE3OTM0LCJtaW5FeHRyYVNlcnZpY2VWZXJzaW9uIjoiIiwibWF4RXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiJ9XSwicGxhdGZvcm02LndvcmtmbG93c3RlcHMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LndvcmtmbG93c3RlcHMiLCJuYW1lIjoiSGFuZGxlUmVxdWVzdEZvclF1b3RhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJvdmlkZSBRdW90ZSBvciBEZWNsaW5lIFJGUVwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODYxMixcInJldmlzaW9uSWRcIjpcIjhlODdkNjRhMWY2ZmQyNGRjYjU0NzM3NWI4Y2IwMzEyXCIsXCJ4bWxTdGVwXCI6XCI8V29ya2Zsb3dTdGVwIGVuYWJsZWQ9XFxcInRydWVcXFwiPlxcbiAgICBcXG4gICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgPEVOPlJlcXVlc3RGb3JRdW90YXRpb24gLSBBbnN3ZXIgb3IgZGVjbGluZTwvRU4+XFxuICAgICAgICA8RlI+RGV2aXMgLSBSw6lwb25kcmUgb3UgZMOpY2xpbmVyPC9GUj5cXG4gICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgXFxuICAgIDxBbGxvd1RyYW5zYWN0aW9uRWRpdD5BU1NJR05FRTwvQWxsb3dUcmFuc2FjdGlvbkVkaXQ+XFxuICAgIDxUcmFuc2FjdGlvbkRhdGFNb2RlbD5wNl9kZW1vLlRyYW5zYWN0aW9uSW5mbzwvVHJhbnNhY3Rpb25EYXRhTW9kZWw+XFxuICAgIDxWaWV3TmFtZXM+XFxuICAgICAgICA8SXRlbT5wNl9kZW1vLlRyYW5zYWN0aW9uczwvSXRlbT5cXG4gICAgICAgIDxXb3JrSXRlbT5wNl9kZW1vLldvcmtmbG93IFRhc2tzPC9Xb3JrSXRlbT5cXG4gICAgPC9WaWV3TmFtZXM+XFxuXFxuICAgIDxBbGxvd1JlY2FsbD5mYWxzZTwvQWxsb3dSZWNhbGw+XFxuICAgIDxBbGxvd0FwcHJvdmVyRGVsZWdhdGlvbj5mYWxzZTwvQWxsb3dBcHByb3ZlckRlbGVnYXRpb24+XFxuICAgIFxcbiAgICA8U2VuZEVtYWlscz5mYWxzZTwvU2VuZEVtYWlscz5cXG5cXG4gICAgPFR0bCBpZD1cXFwiZXhwaXJlXFxcIj4xMjA8L1R0bD5cXG4gICAgXFxuXFx0PFdvcmtJdGVtIHNjcmlwdD1cXFwicDZfZGVtby5XRldvcmtJdGVtRW5oYW5jZXJcXFwiLz5cXG4gICAgXFxuICAgIDxBc3NpZ25lZSBuYW1lPVxcXCJEZW1vQXBwXFxcIiBwYXRoPVxcXCIvJHtJTlNUQU5DRV9JRH1cXFwiIHR5cGU9XFxcIlVOSVRcXFwiIHNjb3BlPVxcXCIqPSpcXFwiPlxcbiAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgIDxFTj5TdXBwbGllcjwvRU4+XFxuICAgICAgICAgICAgPEZSPkZvdXJuaXNzZXVyPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvQXNzaWduZWU+XFxuICAgIFxcblxcdDxTdGF0dXNMYWJlbHM+XFxuXFx0ICAgIDxMYWJlbCBuYW1lPVxcXCJSZWNlaXZlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5SZWNlaXZlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlJlw6d1ZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIkNyZWF0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+Q3JlYXRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPkNyw6nDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJEZXByZWNhdGVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPkRlcHJlY2F0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Bbm51bMOpZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIlByb3ZpZGVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPlF1b3RlIHByb3ZpZGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+UXVvdGF0aW9uIGZvdXJuaWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJEZWNsaW5lZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5EZWNsaW5lZDwvRU4+XFxuICAgICAgICAgICAgPEZSPkTDqWNsaW7DqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgPC9TdGF0dXNMYWJlbHM+XFxuICAgIFxcbiAgICA8QWN0aW9ucz5cXG4gICAgICAgIDxBY3Rpb24gaWQ9XFxcInNlbmRcXFwiIHN0YXR1cz1cXFwiUHJvdmlkZWRcXFwiIHR5cGU9XFxcIkZPUk1cXFwiIHN0b3A9XFxcInRydWVcXFwiIHNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGVcXFwiPlxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLWNoZWNrLGJ0bjpidG4tc3VjY2VzczwvU3R5bGU+XFxuXFxuICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICA8RU4+UHJvdmlkZSBRdW90ZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Gb3VybmlyIFF1b3RhdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9MYWJlbD5cXG5cXG4gICAgICAgICAgICA8Rm9ybUdlbmVyYXRvcj5wNl9kZW1vLldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvbjwvRm9ybUdlbmVyYXRvcj5cXG4gICAgICAgICAgIFxcbiAgICAgICAgICAgPFBhcmFtZXRlcj5cXG4gICAgICAgICAgICAgICAgPE5hbWU+cmZxPC9OYW1lPlxcbiAgICAgICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICA8RU4+cmZxPC9FTj5cXG4gICAgICAgICAgICAgICAgICAgIDxGUj5yZnE8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVDwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIDxQYXJhbWV0ZXI+XFxuICAgICAgICAgICAgICAgIDxOYW1lPmxpbmVzPC9OYW1lPlxcbiAgICAgICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICA8RU4+bGluZXM8L0VOPlxcbiAgICAgICAgICAgICAgICAgICAgPEZSPmxpbmVzPC9GUj5cXG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgPE1hbmRhdG9yeT5mYWxzZTwvTWFuZGF0b3J5PlxcbiAgICAgICAgICAgICAgICA8SW5wdXRUeXBlPlRFWFQ8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgIDwvQWN0aW9uPlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgIDxBY3Rpb24gaWQ9XFxcImRlcHJlY2F0ZVxcXCIgc3RhdHVzPVxcXCJEZWNsaW5lZFxcXCIgdHlwZT1cXFwiQUNUSU9OXFxcIiBzdG9wPVxcXCJ0cnVlXFxcIiBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uRGVjbGluZVxcXCI+XFxuICAgICAgICAgICAgPFN0eWxlPmljb246ZmEtdGltZXMsYnRuOmJ0bi1kYW5nZXIsY29sb3I6ZGFuZ2VyPC9TdHlsZT4gXFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICA8RU4+RGVjbGluZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Ew6ljbGluZXIgcXVvdC48L0ZSPlxcbiAgICAgICAgICAgIDwvTGFiZWw+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgPFBhcmFtZXRlcj5cXG5cXHQgICAgICAgICAgICA8TmFtZT5yZWFzb248L05hbWU+XFxuICAgICAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgIDxFTj5SZWFzb248L0VOPlxcbiAgICAgICAgICAgICAgICAgICAgPEZSPk1vdGlmPC9GUj5cXG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgPE1hbmRhdG9yeT5mYWxzZTwvTWFuZGF0b3J5PlxcbiAgICAgICAgICAgICAgICA8SW5wdXRUeXBlPlRFWFRBUkVBPC9JbnB1dFR5cGU+XFxuICAgICAgICAgICAgPC9QYXJhbWV0ZXI+XFxuICAgICAgICA8L0FjdGlvbj5cXG4gICAgICAgIFxcbiAgICAgICAgPEFjdGlvbiBpZD1cXFwiZXhwaXJlXFxcIiBzdGF0dXM9XFxcIkVYUElSRURcXFwiIHR5cGU9XFxcIkVYUElSRVxcXCIgZGlzcGxheT1cXFwiZmFsc2VcXFwiPlxcblxcdFxcdFxcdDxFeHBpcnkgZXJyb3I9XFxcImZhbHNlXFxcIi8+XFxuICAgICAgICA8L0FjdGlvbj5cXG4gICAgPC9BY3Rpb25zPlxcbiAgICBcXG48L1dvcmtmbG93U3RlcD5cXG5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg2MTIsIm1pbkV4dHJhU2VydmljZVZlcnNpb24iOiIiLCJtYXhFeHRyYVNlcnZpY2VWZXJzaW9uIjoiIn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi53b3JrZmxvd3N0ZXBzIiwibmFtZSI6IkhhbmRsZVB1cmNoYXNlT3JkZXIiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJIYW5kbGVQdXJjaGFzZU9yZGVyXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkFjY2VwdCBvciBSZWplY3QgdGhlIE9yZGVyXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4NTk3LFwicmV2aXNpb25JZFwiOlwiZTczNzQ4MmI2M2U5ZWMyZTI2ZWQzMjBmNGFhN2MxZWNcIixcInhtbFN0ZXBcIjpcIjxXb3JrZmxvd1N0ZXAgZW5hYmxlZD1cXFwidHJ1ZVxcXCI+XFxuICAgIFxcbiAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICA8RU4+UHVyY2hhc2VPcmRlciAtIEFjY2VwdCBvciByZWplY3Q8L0VOPlxcbiAgICAgICAgPEZSPkNvbW1hbmRlIC0gQWNjZXB0ZXIgb3UgcmVmdXNlcjwvRlI+XFxuICAgIDwvRGVzY3JpcHRpb24+XFxuICAgIFxcbiAgICA8QWxsb3dUcmFuc2FjdGlvbkVkaXQ+QVNTSUdORUU8L0FsbG93VHJhbnNhY3Rpb25FZGl0PlxcbiAgICA8VHJhbnNhY3Rpb25EYXRhTW9kZWw+cDZfZGVtby5UcmFuc2FjdGlvbkluZm88L1RyYW5zYWN0aW9uRGF0YU1vZGVsPlxcbiAgICA8Vmlld05hbWVzPlxcbiAgICAgICAgPEl0ZW0+cDZfZGVtby5UcmFuc2FjdGlvbnM8L0l0ZW0+XFxuICAgICAgICA8V29ya0l0ZW0+cDZfZGVtby5Xb3JrZmxvdyBUYXNrczwvV29ya0l0ZW0+XFxuICAgIDwvVmlld05hbWVzPlxcblxcbiAgICA8QWxsb3dSZWNhbGw+ZmFsc2U8L0FsbG93UmVjYWxsPlxcbiAgICA8QWxsb3dBcHByb3ZlckRlbGVnYXRpb24+ZmFsc2U8L0FsbG93QXBwcm92ZXJEZWxlZ2F0aW9uPlxcbiAgICBcXG4gICAgPFNlbmRFbWFpbHM+dHJ1ZTwvU2VuZEVtYWlscz5cXG4gICAgPEVtYWlsVGVtcGxhdGUgbW9kZWxTY3JpcHQ9XFxcInA2X2RlbW8uV0ZIYW5kbGVQTy1CdWlsZEVtYWlsXFxcIj5maWxlOi8vJHtCMkJPWF9EQVRBfS9yZXNvdXJjZXMvdGVtcGxhdGVzL3A2ZGVtb19QT1Jldmlldy5mdGw8L0VtYWlsVGVtcGxhdGU+XFxuICAgIFxcbiAgICA8VHRsIGlkPVxcXCJleHBpcmVcXFwiPjEyMDwvVHRsPlxcbiAgICBcXG5cXHQ8V29ya0l0ZW0gc2NyaXB0PVxcXCJwNl9kZW1vLldGV29ya0l0ZW1FbmhhbmNlclxcXCIvPlxcbiAgICBcXG4gICAgPEFzc2lnbmVlIG5hbWU9XFxcIkRlbW9BcHBcXFwiIHBhdGg9XFxcIi8ke0lOU1RBTkNFX0lEfVxcXCIgdHlwZT1cXFwiVU5JVFxcXCIgc2NvcGU9XFxcIio9KlxcXCI+XFxuICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgPEVOPlN1cHBsaWVyPC9FTj5cXG4gICAgICAgICAgICA8RlI+Rm91cm5pc3NldXI8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgPC9Bc3NpZ25lZT5cXG4gICAgXFxuXFx0PFN0YXR1c0xhYmVscz5cXG5cXHQgICAgPExhYmVsIG5hbWU9XFxcIlJlY2VpdmVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPlJlY2VpdmVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+UmXDp3VlPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQ3JlYXRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5DcmVhdGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+Q3LDqcOpZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIkRlcHJlY2F0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+RGVwcmVjYXRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPkFubnVsw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQWNjZXB0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+T3JkZXIgYWNjZXB0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Db21tYW5kZSBhY2NlcHTDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJSZWplY3RlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5SZWplY3RlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlJlZnVzw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvU3RhdHVzTGFiZWxzPlxcbiAgICBcXG4gICAgPEFjdGlvbnM+XFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJhY2NlcHRcXFwiIHN0YXR1cz1cXFwiQWNjZXB0ZWRcXFwiIHR5cGU9XFxcIkFDVElPTlxcXCIgc3RvcD1cXFwidHJ1ZVxcXCIgc2NyaXB0PVxcXCJwNl9kZW1vLldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXJcXFwiPlxcblxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLWNoZWNrLGJ0bjpidG4tc3VjY2VzczwvU3R5bGU+XFxuXFxuICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICA8RU4+QWNjZXB0IE9yZGVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjY2VwdGVyIGNvbW1hbmRlPC9GUj5cXG4gICAgICAgICAgICA8L0xhYmVsPlxcblxcbiAgICAgICAgICAgPFBhcmFtZXRlcj5cXG4gICAgICAgICAgICAgICAgPE5hbWU+c2FsZXNvcmRlcm51bWJlcjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlNhbGVzIE9yZGVyIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TnVtw6lybyBkZSBjb21tYW5kZSBjbGllbnQ8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVDwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcblxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgPEFjdGlvbiBpZD1cXFwicmVqZWN0XFxcIiBzdGF0dXM9XFxcIlJlamVjdGVkXFxcIiB0eXBlPVxcXCJBQ1RJT05cXFwiIHN0b3A9XFxcInRydWVcXFwiIHNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUhhbmRsZUFjdGlvblJlamVjdE9yZGVyXFxcIj5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8U3R5bGU+aWNvbjpmYS10aW1lcyxidG46YnRuLWRhbmdlcixjb2xvcjpkYW5nZXI8L1N0eWxlPiBcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgIDxFTj5SZWplY3Q8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+UmVmdXNlcjwvRlI+XFxuICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8UGFyYW1ldGVyPlxcblxcdCAgICAgICAgICAgIDxOYW1lPnJlYXNvbjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlJlYXNvbjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TW90aWY8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVEFSRUE8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvQWN0aW9uPlxcbiAgICAgICAgXFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJleHBpcmVcXFwiIHN0YXR1cz1cXFwiRVhQSVJFRFxcXCIgdHlwZT1cXFwiRVhQSVJFXFxcIiBkaXNwbGF5PVxcXCJmYWxzZVxcXCI+XFxuXFx0XFx0XFx0PEV4cGlyeSBlcnJvcj1cXFwiZmFsc2VcXFwiLz5cXG5cXHRcXHQ8L0FjdGlvbj5cXG4gICAgICAgIFxcbiAgICA8L0FjdGlvbnM+XFxuICAgIFxcbjwvV29ya2Zsb3dTdGVwPlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODU5NywibWluRXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiIsIm1heEV4dHJhU2VydmljZVZlcnNpb24iOiIifV0sInBsYXRmb3JtNi5idW5kbGVkcmVzb3VyY2VzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5idW5kbGVkcmVzb3VyY2VzIiwibmFtZSI6IkRlbW9TbWFydENvbnRyYWN0IiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiRGVtb1NtYXJ0Q29udHJhY3RcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVtbyBTbWFydCBDb250cmFjdCBKQVIgZ2VuZXJhdGVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9hbWFsdG8vc29saWRpdHktamFyLWJ1aWxkZXJcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjMxODIzNzQ3NjEsXCJyZXZpc2lvbklkXCI6XCJjNjEzMjRiYjhkYWJlMTEyMWJkZTYyNzNiMGJjODA3M1wiLFwiaXRlbUJ5dGVzXCI6XCJVRXNEQkJRQUFBZ0lBRTZhMms0TGw0dGRuQUFBQUJFQkFBQVVBQUFBVFVWVVFTMUpUa1l2VFVGT1NVWkZVMVF1VFVhTnpyRU9nakFRQnVDZGhIZm9DeHloWUJDN2lTNmFNRWtjM0pyMmpCZHBhY3BKNHRzTEkyRngvZSsvTDMrclBUMXhaTGhqSEdud1NzZ3NUNU9MQ3owNjlLeDVEcUVqN2xFSmkyNEFIUUtNVGtjR00zaU8ydkNtdnJadUFRMDl5ZnhITlIvcUxWenRHNWEvaGFnMy9sbnpUQlM1UEVCZVFWRjFjcTlrcllyeWtTYW5pUFBWUXZOVm90VVRlbkdNNWtVVFJsRm11KzJlOWRZMCtRRlFTd01FQ2dBQUNBQUFUcHJhVGdBQUFBQUFBQUFBQUFBQUFBa0FBQUJOUlZSQkxVbE9SaTlRU3dNRUNnQUFDQUFBVFpyYVRnQUFBQUFBQUFBQUFBQUFBQU1BQUFCcGJ5OVFTd01FQ2dBQUNBQUFUWnJhVGdBQUFBQUFBQUFBQUFBQUFBMEFBQUJwYnk5d2JHRjBabTl5YlRZdlVFc0RCQW9BQUFnQUFFMmEyazRBQUFBQUFBQUFBQUFBQUFBU0FBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZVRXNEQkFvQUFBZ0FBRTJhMms0QUFBQUFBQUFBQUFBQUFBQVZBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVFc0RCQW9BQUFnQUFFNmEyazRBQUFBQUFBQUFBQUFBQUFBUEFBQUFUVVZVUVMxSlRrWXZiV0YyWlc0dlVFc0RCQW9BQUFnQUFFNmEyazRBQUFBQUFBQUFBQUFBQUFBa0FBQUFUVVZVUVMxSlRrWXZiV0YyWlc0dlkyOXRMbUZ0WVd4MGJ5NXdiR0YwWm05eWJUWXZVRXNEQkFvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQThBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2WkdWdGJ5MWhjSEF0YzIxaGNuUXRZMjl1ZEhKaFkzUXZVRXNEQkJRQUFBZ0lBRTJhMms3WTg2ZkFvZ0VBQU9nQ0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNalF1WTJ4aGMzT1ZVbDFQRTBFVVBWT1dyaTJyVkZRVVVlTURNUzJZRGtIa0JkS1hSaEpOMVFqWTk5bmQyekprTzFOblp6SDhJMTU5TUNROCtBUDRVY1M3Q3cvR0dBT1p6TnlQT2ZmT09aTjdjWG4rQzhBbVhqUXdnOFVtQWp3TzhTVEVra0RkSCtwOFpWMWdiYUN0bkdiS2o2eWJiTW1VSmxibWlkeWpid1hsZnRlNkw0WDF5bXRyOG0wdTI5RkcrNTVBdDMyTHVzNVFJT2pibEFUbUI5clFwMklTa3p0UWNjYVpoWUZOVkRaVVRwZnhkVElvNlFsRTc0MGgxODlVbmhPSDNadS91Ykt4eVhRYiszcHNsQzhjdC93d3NHNHN2MVA4NWtpcVdNdURreW50MFlnY21ZUjIvcnBNRmZkaFFDN0h4QXlVcDFSKzFjWnZ2TjNhN25IajVyNHRYRUs3dWlTNzlDOEMzU04xckZqdk81TmtOdGRtL0pIOG9VMURQSTJ3akdjUlpsR1BFT0s1d092YnFCSlkvbzhPZ2M2Tm13bk1tZGg5SHBXWjhuZGZ0VHQvL01MVVdXOFRtOG5FT3VMNkNZUDZLc3RZL0V5N004UkxIcW1BcDB1MFdxV1UwdU1kNGc3YkJuczkxSGdCemRXMW54Q3JaNmo5NEtpR0pwLzFDbnVLT1Q0WHIxQ0ljQStvdk5ucVBzQjhoVy9oZm1VWDhJQnRnSWQ0aExzVmpvbFVGZmdOVUVzREJCUUFBQWdJQUUyYTJrNnc0SkR4bXdFQUFPQUNBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTVRndVkyeGhjM09WVWxGckUwRVEvamE5NXBwNG1saTFXcXZTaHo0a3JXUVZSUW90ZVRCWUVLSmdVL1BTcDgxbGttNjU3TVM5UGNXZjVZTUlQdmdEL0ZIaTNPbURpRWpMc2pzek85ODNNeC9NOXg5ZnZ3RjRpZ2NOckdDamlRaTNZOXlKc2FsUUQyYzIzM21rc0RlMHJKZVpDVFAyaTJkNlNndldlYXFQNlYxQmVUaGkvNmJnWUlKbGx4OEk3ZEE2Ry9vS3ZjNGxlTjJ4UWpUZ0tTbTBodGJSNjJJeElYOWlKcG44ckE4NU5kblllRnZHdnoramNqeUY1S1Z6NUFlWnlYT1NzSGZ4bmp1UDkyWGN4c2pPblFtRmw1S0RJZnU1L2tDVEorZmFUS3crK2Jpa1k1cVJKNWZTNFYvSnFaRTZBc2oxMnpEYkh3VnYzZnlnTHhXYkl5NThTa2UybkhMelg1MTc1K2E5RWFFdlhKcHhMcnhYRk01NEd1TnVnaTNjUzdDS2VvSVk5eFVlWGthT3d0Wi9CQ2gwTDF4TVlXMU9vWXlGMXVtY1B1LytvWDdwT1hES21VN1prOUFYZ2hxWUxCUHRLNTN1R051eVNwRnNsV3EzU3lXbEp6ZkdtdGlHZUgzVTVBRE4zYjNQVUx0ZlVQc2tVUTFOZWVzVmxuRkYzbzFmS0NTNEJsVGVhcFdQMEtyd2JWeXY3RHB1aUkxd0U3ZHd0Y0xKSUJVRFB3RlFTd01FRkFBQUNBZ0FUWnJhVHNTQzUrQkNBUUFBR2dJQUFERUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTRMbU5zWVhOemxWRkxTOE5BRUo3dEsyMk5WdXNEeEtzSHErZ0tpaFJhZXJCWUVLSmdXM3ZmSk5OMlM3cGJOeHZGbitWSjhPQVA4RWVKaytoSlJIUmdYdC9NZkR2RHZyMi92QUxBS1d4VklROTFCOVlkMkdCUWFrc2xiWWRCZnE4eFlsRG82aEFaMUR5cDhEcVorMmlHd284SXFYczZFTkZJR0pubVgyREJUbVhNd0wxVUNrMDNFbkdNbEI1NlV2TkZKT3hZbS9rWkQzR3VlUnp3UHQ0bEdOdWVOamVKdHNKS3JlTGRab3RCWlNBblN0akVFR1BYMDJiQ0g5QS9tWEhoU3o1OFhHQWZ4MmhRQmRqK1Znd0YwVkJEekcvdHVEbXdScXBKcTBPTTFZRk9USUE5bVM2NS9kUERSek54TCtqT0N4VkVPcWE1SzdSVEhUcXc2VUlCaWd3Ty9uRURnNTFmdG1iUStETVhIRU9PZmljVlJrcWJrQzlSeE1tblNISC9HZGdUQlRsd3lKWXk4QnpLWk4zUEJxakFVamJxWmwzTHNKTDVHcXhtNkJyWmFxYU0wRlRLSDFCTEF3UVVBQUFJQ0FCTm10cE9hbXhMcXpRQ0FBQWFCQUFBSkFBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpHVVZOMFlYUjFjeTVqYkdGemM0MVM3MC9UVUJROWIrdldycFRCS3FJZ0lyK1ViU0FGbkg3WlFpQUlDY2tDUW5ISll2elFkWTlaMHJXbVAvWjN5VWpFYURSODlvOHkzbGNYQTVHQXI4bTlPZStlZSs1NXIrL25yNjgvQUZSUXlVSENvb29pU2pMR1pKUlY1TEVrd3JLQ0VaV0t5NEx4WEVGQjVCVUZ1c2lHakZVRzVZamIzT254TnNOTTNmR05qNjRWbmZoQjk1WFI1bDNmQ0czamFQZlFqS3dvRHF2RWZzMXQxL0VFZS9ndzlpUCtKdkI3VGx0Z2VhR3hWWCs3WXpMTXZydGJLTnV6M0ppSERQUEYwbi9RcFcyL3pSbEc2alI3UCs2MmVIQnN0Vnpha1JPZGd4T0dTckYrYXZVc3c3VzhqbUZHZ2VOMXFxVzdsZlc2YjF0dXd3b2NJVGhRbFR5cnkwWHRIMFZ5WG5NOEo5cGdHTDloNEY2cFFkM1JCNGRPbGpPZGprZFRBbEpLRjBWQnFZbkxTNXJYci9UdWVIRzNkcGZURFJxdG1uNGMySHpYRVI1enh6eU1Wb1NLaG52aXQ0OXBXTU02dy9UdFNob204RUxETko1b0dNR29ob0lJT2tZWjh0YzlNV1JzMS9kbzFsaXhkTVh2UWV1VTJ4SDVlWG4xQnJaZEt3eXJOLzJENjZyVnpWVjZmSGw2dWRMbWhIQUFVQzRNc2k3eTZLUTRrV0FnaC9zWUI4TURRbk9VeFZMN1lKK1J1a1Q2RXlHR2h4U3pTVzJmK0JPWUhQQXJTQ1c3cWk2VnZ5QnpDVW53VTlmNGp5aHFmMWlZd3VPa1RsZERVU2lzSVUwZklKZVhwaTZRUGJ1bFhjYU1zSTdaaERNSEJmT0pZU0h6bmc0aTF0WTNTRTFkVGw5QU9VY3VBYXFVZ0tFRWFKa0VER2UvRTByMzZRVTFwVDZHekdhbWoySHpIT3pzNzNsVkdnSWNZSkZNcEFaREYvQTB5YzkrQTFCTEF3UVVBQUFJQ0FCTm10cE9nd1QyaHFNQkFBRGpBZ0FBTWdBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFMUxtTnNZWE56bFZMQmJoTXhFSDFPdDlrbUxEUVVXaWdGeEtHSHBFVXhDRnBWYXBVREVSRklBYWxweVFVSnlkbWRibDF0N05UckJmRlpIQkJTRC8yQWZsVEY3TUlCSVlSYVdmYk1lTjZNMzdOOWNYbDJEdUFsSGpjd2g1VW1BdHdMY1QvRXFrRGRIK3Q4L1puQTVsQmJPY3VVUDdKdXVpMFRtbHFaeDNKRXB3WGxmbURkZm1HOTh0cWFmSmZMOXJUUnZpZlFiVitqcmpNV0NQbzJJWUhGb1RiMHZwaE95QjJxU2NZN1MwTWJxMnlzbkM3ajM1dEJTVThnZW1zTXVYNm04cHc0N0Y3OXpQWG5XMHkzY2FCVG8zemh1T1dib1hXcC9FS1RGeWRTVGJROC9EcWpFUjJSSXhQVDNsL0pSSEVmQnVReUpXYWdQQ1h5Z3paK1o3ZkhiWnNIdG5BeERYUkpkZlZmeDNkUDFHZkZhbCtiT0xPNU51azc4c2MyQ2ZFZ3dob2VScGhIUFVLSVJ3SlByNk5KWU8wL0tnUTZWMjdHYjVtU0h3MzJCZHJ0ajY4NmYxekF6Rmx2WTV2SjJEcmk0cW4xMUZkWnhzcm4ycDB4bnZCdkN2aGppVmFyMUZGNlBFTXNzRzJ3MTBPTkI5RGMyUHdPc2ZFRHRXOGMxZERrdFY1aFArRUdyeXUvVUlod0M2aTgrU29mWUxIQ3QzQzdza3U0d3piQVhTempab1ZqSWxVRmZnSlFTd01FRkFBQUNBZ0FUWnJhVHMvQ29FMmdBUUFBNVFJQUFESUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhPUzVqYkdGemM1VlNYVThVTVJROVhZWWRkaDFsUlVFUk5UN3dzQXRtaTRFUUNHUWYzRWcwV1Uza1kxOTg2czVjaHBMWmR1bDBNUHdzSDR5SkQvd0FmaFRoenVpRE1jWkFtdmJlMjU1emUwN1RxK3VmbHdBMjhMS0JLU3cwRWVCSmlLY2hGZ1hxL2tUbnkyc0Nxd050NVNSVC90aTY4YVpNYUd4bEhzdDlPaXNvOTN2V2ZTNnNWMTViays4d2JWY2I3WHNDM2ZZZGVKMmhRTkMzQ1FuTURyU2hUOFY0Uk81UWpUTGVtUnZZV0dWRDVYUlovOTRNU25rQzBRZGp5UFV6bGVmRVpmZjJkeTYvMldhNWpRT2RHdVVMeHkzZkQ2eEw1VmNhclo5S05kTHk4R0pDKzNSTWpreE11MzhkSm9yN01DQ1hLYkVDNVNtUlI5cjRyWjBldDIwZTJNTEZ0S2RMcVl2L3VyNTdxczRWdTMxbjRzem0ycVFmeVovWUpNU3pDRXQ0SG1FYTlRZ2hYZ2k4dm9zbmdhWC91QkRvM0xxWndFeEt2cXlaMW01L2VkdjU0d2ttem5vYjIwekcxaEhUeDR6cXF5eGo3MVB0emhDditEOEYvTFZFcTFVNktUT2VJV1k0Tmpqcm9jWURhSzZzZm9kWStZSGFONjVxYVBKYXI3QVc5M2hkK0lWQ2hBZEFsVTFYNXdGbUszd0xENnM0aDBjY0F6ekdQTzVYT0JaU01YQURVRXNEQkJRQUFBZ0lBRTJhMms3RmtzNDVvd0VBQU9ZQ0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNak11WTJ4aGMzT1ZVbDFQRTBFVVBWT1dycTJyRkZBVVVlTURJUzJZamdIbEJkS1h4aWFhcXFGZzMyZDNiOHVRN1V5Wm5kWDRjL3dKUGhnU0h2d0IvaWpqM2RVSFk0eUJUT1orekp4NzU1eWIrZjdqOGh1QTUzamN3QUxXbWdod0w4VDlFT3NDZFgrcTg4MW5BanREYmVVOFUzNWkzV3hmcGpTek1rL2tpTTRMeXYzQXVxUENldVcxTmZrQmx4MXFvMzFQb051K1JsMW5MQkQwYlVvQ1MwTnQ2RzB4aThtZHFEamprNVdoVFZRMlZrNlgrZS9Eb0tRbkVMMHlobHcvVTNsT25IYXYvdWJtN2g3VGJSenJxVkcrY056eTlkQzZxZnhJOGQ2WlZMR1dKNS9tTktJSk9USUpIZjUxbVNydXc0QmNUb2taS0UrcGZLK04zMzJ4ZjlEanhzMWpXN2lFQnJva3UvNHZBdDB6OVVHeDNwY215V3l1emZRTitWT2JobmdRWVFNUEl5eWlIaUhFSTRHbjExRWxzUEVmSFFLZEt6Zmo4WmpZdlp1TUJrY2NiN1U3Zjh4ZzdxeTNpYzFrWWgxeDljeDY2cXNzWStrTDdjNFlUL2hEQmZ5M1JLdFZDaWtqM2lGdXNHOXcxRU9ORjlEYzN2a0tzWDJCMmhmT2FtaXlyVmZZejdqSmR1MFhDaEZ1QTFXMFdOMEhXS3J3TFN4WGZnV3I3QVBjd1YzY3FuQk1wS3JBVDFCTEF3UVVBQUFJQ0FCTm10cE8ySWI3MElFQkFBQ0NBZ0FBU0FBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkZKR1VWSmxZMlZwZG1Wa1JYWmxiblJTWlhOd2IyNXpaUzVqYkdGemM2VlJUVThVUVJCOXZidXdzSzd5b1NLb0Z4TVA0b0UrU0x4b1RGeGtFNUtKaHNWdzhkUXpVOHoyWnFacjdlNVpmNWNuRWc3OEFINlVzV1lnOFFLSkNaZjNxcm8rK3ZYcnF6OFhsd0QyOFhLQUxwNzFzZFBIYzRWdXlZWENYc0srMEw4b2ZUZlRjOCtSTXk1MXhwNTBSWEhLZWRDZXdweGRJSjF3OFVHaFkzT0JIeU9GRlJ0Q1Rmbm5xTENWek16QzZNckVxUjdaNHNoRktzaExkN2RPUzRYTjYzSnBYS0ZQb3JldVdiVDgwVG9iUDBuUG05MVRoZDRCNTZTd2xsaEhYK3NxSmYvZHBDVTF3NXlaOHRSNDIrUTNoNzA0dFVGaGV6SStubEJHZGtINTRZSmNuTnlJVlJnZU9VZitvRFFoa0hSK1NTenJlV25pR2Z2cXZjNnBZaDB5UGFHZk5ZVTRabjljY3pUUnl2RHJ1NWFLNk1FSjF6NmpzVzFFN053MnZkYzhkWWdoSHZieFFtRjAvMnNWMXYvWjl5MmRVU2FPNy83M1hyeENSLzRkNkVGOHc1SkVZajc2TGE5Z3RlVUJIclNzR3VHQ2p5VFRiUTRzdlQySCtpMUJCMnVDeTgyaEdtTmQ0dUYxQXpid3BLMC9iWEVMajRVSFV1dGdHNXRZL1F0UVN3TUVGQUFBQ0FnQVRacmFUcUl5MStkSUFRQUFJUUlBQURFQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRM0xtTnNZWE56bFZGTFR3SXhFSjdLWXdGUkZCK0o4ZXBCTkZyakF3OFFEaEpKTkt1SmdOekw3ckNVTEMxMnV4cC9saWNURC80QWY1UnhkdlZrak5GSjV2VjErdldiOU8zOTVSVUFqbUc5QkJtb09yRGl3Q3FEZkZNcWFWc01NdHUxQVlOc1cvdklvT0pLaGRmeGRJaW1MNFloSVZWWGV5SWNDQ09UL2d2TTJyR01HSlF2bEVMVERrVVVJYlY3cnRSOEZnbzcwbVphNXo1T05ZODgzc1c3R0NQYjBlWW0xbFpZcVZXMGRkcGdVT3pKUUFrYkcySzhkTFVKK0FNT2p5WmNEQ1h2UDg2d2l5TTBxRHhzZmp2MEJkSFFRTVFESkFIQ29zOXZwYktISi9WR2k0aExQUjBiRHpzeTBicngwL3Y3RTNFdmFOMXo1WVU2a2lxNFFqdld2Z05yWmNoQ2pzSHVQMVpoc1BtTGVBYTFQM1BCQWN6Ukp5WEd5RWtKNVR4Vm5IS0M1SGFlZ1QxUk1RY094WHdLbmtHQll2bHpBSW93bjE0dHAxTUxzSmptQ2l5bDZETEZVdXFNME1RS0gxQkxBd1FVQUFBSUNBQk5tdHBPRkZpcEFSRWNBQUJKYVFBQUx3QUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekxtTnNZWE56MVZ3SmdCeEZ1ZjRydTluZW5VeENXRWdnZ0FsSHdNM20yTDZuT3lTUjdHWURLeUdCYkJKY0VMQ25wMmN6WkRPenpNeUdSSDNLcVlpQUlDSWl5aUVJcU1paGtCQUNJcWlvNEltaWVJdjM5ZTVMZWUvcCsvL3E2cDZlYTNjbUdWNTRoTzJxcnVNL3YvcnJyNTZlZWU2dmozOE9BSFQycHhpME1aa3Vpc1RVVHFiRjRGYW0wOFdnaTBtWGhNU3NUdmlLeEd5SkxZOUJuSjBjWXl2WVNvbXRrdGdiWWpDYm5TS3gxVEhvcHJJL0JvZXpVMkxReFFZa3RrWmlnekU0a3EyTndSSHMxRTc0bHNST2k4RXhORzRvQnZPcGZHTU1qcVh5OUJnY1QrVzZHQ3lrOG93WW5NVFdkc0lMRWxzZmcwVnNRNHlkeWM0aU9UZDJ3dmNsTmh5RFpXeFRKL3lvRTM0cXNjMHhVR25XRmhwd2RpZThMTEUzeFNEQlR1bUVYMGhzSkFiTHFmZWNMdXc5bDRhOFdXTG56V0Ruc3d0aThBYjJGcW81TTFpU3VYUkpTY3lUV0RvR2E5bG9EQWJaMWk2c1phaDJJUTNjTmdObXNERUpucWZtN1hUSjBpVkhsTWFKd1VVeldKNFZKRmFNd1NhMEJKdGdPeVIyTVhIZEdZT3oyYTRZZXl0N0c5WGVUbTEvUjFQZUliRjN4dUI4TnRxRkY4N3FFcXBkU3BmTDZISTVYYkoweVVuc2loaU1rb25iMkpVMCtWMFNlM2NNdHRIa2JTeERsMHZwY2hsZExxZExWbUpYeFNEdlQza1BYYTZteTN2cGNnMWRydTFrMTFINVBycGNUNWNiNlBKK2lkM1l5VDRnc1p0aWNBa2JsZGdIWTNBWmxUZkg0QXF5elR2WWh6clpMUkw3Y0F5dVlyZEs3Q014dUpyNlB4cURhNmk4TFFiWFVYbDdESzVubzUzc0RvbmRHWU1iYWVqSFluQVRkZDBWZzV1cHZEc0d0MUQ1Y1FaSGJseDcxaHJQSGN0a3ZkVGdEaTliM09nVnhuUFpnc2NnUHBUTmV2bUJNYWRROEFvTWpqcHJJbGYwTm5xdWw5bFJOWmJJMU9ucTZCOWF2M3JqQ0lQdWRSYzZPNXkrTVNjNzJqZGN6R2V5b3ljem1EbUFvNHBPdHJqRkdadkEwVFBXYmw0L2NNR3BnNXVRSVBZR2QyZHQzckJwa01FaC9IN040TUM2b2ZXRGZNUnMzaks4dWYrTW9XRFFyRWdUSCtNM3JPL2Z1R0V0M2c4SGszZ0RuNE5OaHdlYytqZVBERzVjdldiTnhzRmhiRDZVOUJvY0dCemFNcmptZ3NFdGcrczNNVml3THBjZjdidllTMm9YOWpuSlRGL0tLVHJGWGVOZW9ZOXJqa29keHFsV3ppTmFRdlN3cldORkpwc3BybUt3cTZmYU9oRSs0L2xjTWVmbXh2ck9wdHRvajV2Zk5WN005UTNrdlJReXp6aGpoWk45U3R1ZDR0YSsvc3pvVUxib2pYcjVPcTJMdGpCb0g4aWwwUFNIckVNUXJKL1ludlR5bTV6a21FY2V5N25PMkJZbm42RjcwZGhlM0pwQk9DeGVsOG4xalk4NXhYUXV2OTNzUzNuYmMzMEZ0MitqZDlHRVZ5aXV6ZVVKTGs0eGcrNUZpeHppNXJMRnZPTVdWNmRTZWErQTg2ZHo4UkZXOWJWRU5MZ2x0UmpNbjF4dEJwMmpUdUhNZk1aRktlZldWdGNmc3k2elBWTmtFRnZqamVjOTF5bDZLUWJ6Tms0Z25lM2Vsa3doZzNxdXptWUQ4VU5pM0RlbE9VaXMwRXF2bFhxTE8vdFF5cjRCWWJOVFNhdmNqa3hLK09zd3Q3cUR3VW1ORVdEdzl2MFZHcWx1eWp2WkFsSkV1NXpoWkozNnVLcVB0dTVpRlEwR3gwM0poc0dPRnN2ZHNMMDdScjBpRHlROVBlZjJMNnJGMHMzbFBZVCtkZ3lRQTg3WUdBbzdMWU9ZbW5adVB3SXVQWkhsakJrY1h6ZHlyQlZqY0diWGNHWTA2eFFuOG9qaWF4dGt1Q0txek1UNEdGSWM5VEI0RTB6N05sR0R0bUl5UDVXWnRPYTRWZmlQRm85WDVOc0FnenRiSnBweGdLS2QyMTg5MGhjM2x2SjNOdTY4VTFEZ1lHZ1ZMaHR6NnZSOCtxSWg5R3RucGxDWThGS3JNWWE4OHdDcHJxZzdacnRYM0pwTEZmcnlZaWVOWXBodnRlTkZydVNNd2tRU3c1bHd5OFpKNUtrMlU0TjZ0MDBreHhqYzBITFNCNjU4bDY4OGQvQ1pQUzFYL0gwdEp0a0NoYlBKL0lZMDZvdmIwa2s5RGFxeHFxR0JkWlloeHhqbnlpR0dmQS9CS05BL3NjdkxoNXY1OG1ZWWxLOVRUTDM4OEZxV1BpTE5EVDBIWkt4RlByT0pZbWFzYjEybVFHblpUSXExcVZKbXVxYnhGR1podmZ5V2pPTlJBODlmVWV6dXdkTGQyWm5pMW5XNVVRYTk1WnROc05Fc3JCNTdjdmtHS2JSaHNQS0FqSUc0MlVGY3lCQ1kvbGFicGl1WWpSck1pWFN2enVlZFhXTE0zUEpzRUcwcE1zSVZGZlJXTks0dCtmL2NXdnhXdE1JM1JIM21jTkZ4dDUzaGpITmhKWFlQSGtZbGRpK0RtMXFMcjVZSmZHUytvbmZ0V081aTM5RHJHaEdaOCtzYkxHNWRteGtyOGwwSUJjdDdKUDBPYjJkZlFBMDVkYVQ1Q0FiYWZwQmw4UDRXU3RNeTYxMWNYNmcxWHRxWkdDdjJqK1hjYldjNmVRZUZMRThER3hsZTM1b3hQTWJtL2VFTStwb2tpem1GbDAySnlVOGVIQjFhNW9PNVFaWllHZExYTnNHaC90TUc1SERlZ1lhTVNhaVRCamNmdk5nd2hXUkhYVlRWWDRvUEh6aElLM0lLbVo5NjdlTjVDZzFFaWxMMm9LelFkQUpSOHpsYml6YkEyclJKOW9PN3o5V1hpL2E1c3Q0U2pnL2l6bEpmM3Y4ZlVibSsvTzFqT1FmUHJuY2RyQWVOVFQwdnZPY2dQcU5xU3RDUC90OC9BV3hLdmpzT3lrT3pwa1RzU0hualk3bGRESzZvdWNKYWFibUdUc3NQdndiRWFHTFY4OFg5N3Naa1BqQ25ObVM5UjE0YmtqUnJ3S3YzMytsTnhaYUdiTGpuTlNOTXMyYTg5b0M4MzNwTFB2NWFrcWRaWThZYzEvVUtoWVd5TERPNG9LZUoyVk4vemxEajhkaTBuVEpkRkdROHVOUDF4amtwaWQxWEVrUWhRWUlibFc3dWJvbFUvdWVtamFlcDlPUm9VYm43Sm4ra05tMm55bUJaY3d4S21tcFJ0WFc2NlZ4QldSYi80TGF0aHo0aWlnM25Kdkt1aDZtb1J4OGwxdEIrR2RrN3pqN0JQaGxubjJMM00xalVzT0hZVWMrYXNpV2JzaTRicXFaYnNtS1k2QXBGTmhJbVlzT1MweWtqYVdDL2pIMkdqcVhpL3pteWtwUTF4VlpNVFZNU3RtelF2SlNtSUMyY3I2azBXN1BwbXRiU1hxTThOT3lnUHN2eSt6VERsRDFaY1hHMmxuUk4xMGk2aXFMUUNKeVJLR3ZWc1ZYVGJiODFwZWlLYTJzV2IwVzJmbXM2b2RtMmk1THpWaVV0V2gzWlZReEY4MXZWQkhMMkpUQ05KUFhMbHFlakRtbmVMMXNwZjVaaWVKcUh5dk5XUmJmOFZzMU5wL1dVNGZKV1ZVdjRyWlpsSmZTa3F2cXRsbW9rakdSSmM2S2ExSDBMYXliOXI4cVdvZ2dyT1ZxNWxjZ2lnUStzMEFja3VaNGtpYm1WMFF1V2JpbUdTclJrOG9sZkltM2tqeGIwYWJ1ZWtVaDdOQWUxTXlQamNZeXNvWndxVWNGMnBkUm5Ld2J5TlJSYjBMVHh6dEk0WmZRSjFnTEpGWms4aERObG1vL1U1SkFHOFU1ckpLMGgrLzlzL2tkamlhNUMwZ2dxR3Jjc3p0YUlxeW0wUUNvYTU0RUc4aTFRTGlGUnR2V0F1aUVIVnJGUkw1dDRrOVVWTTEzSDZ1amNCcTF1R0ZxWjFjMGFWdWR6UTZzcmxsM0g2bnBOSGpYYUluTzBxaFZwVnJmVTlLeTUvNTVOVzVONFZ2SGtoanlycXNaK2U5WXNlYmF1ZDFYVGkzclhMSGxYeFJWYUdYa3FiR3dwbW9IalRXVFBjWUU0Tkd5a2p5MmNHOTFUcUVMWmhQZTU1ZEREaWtIV0pTdGErT2ZqaW5TdkxaVVZrY3Eyb2xMVmtFa1ZNcWxWTWlsY0FwVzNLQ1ZyVzd6R2RlZDlwczd0eXY4TDhhaW05Q2hmR3VuN2dXckJHTThzR3lNVDU4QW5QbTR0RFNPTFRqUEt1R2pZa09BME1JNUdhZGcrdmpnbVpOL0s1RDlkRHBERWZXb0xEV2pud0g3TlZuMzlvaXNBLzZHc2xxNXg2clpLTXBGZDBBdDRaeHNHN1NpV25ZckdBKzYxeVRDaUdlbXB2VkdCRHlXd3V4bEtQWW5kRWFsVDJsMXoxQU8zdTZzZlJMczdLYmVHM1hVNWhWZFh0OHBYejZRcko1ampCVFRVTk4wYmVwUkdaZXhEZVZTTUlQWHBWdnNWZGVJeE5OVFd0eExWa0llQ05aMm9rcGR0MUo1cU5OZGZpWDRPa1VoTmdSM2Q1MEFTbFRnRS9IU2lpNUtyUFA0aUhNblBLbG1IOWhSRHQwelVoVWNDc2MvS01zKzJVQ1VlSFVnNldTZi9rZzlSUWtJNCt0Y3k2STZHb1c5b1o5Y05sU0lwZWczbkVDZjBwaXFpczZFcVBIZWhpRTErMU5NbXo0c29BOEt4aGs2SXdWTDFWd0Q1WHN3eWZTemJmQ1hJc284WHFxbTBGeVJSUjU2WjhGNnhYdnpka2pCTE5HVEVxNlg2bnVMN0JhY1c3Q2pWMWtSOXpGcjJGTGIwdVhNNzJycU5LNWFRU1hUU2FaeXBjWXNwSVRZYndZTTJPUjdRZC95UGFQamVVSklDR1libFRJR01TazA0citBT3RWSElNbHdqaGUrZEFUcFU3cjhBSFZwZGROQ0swQ0xvTURnNkRObWZiMFRRZ1dzR2R5UmZBNlVDSFpnVWw2SERwQXg3U25UUXJBTkZoNG5odEZsMFdMVnNTckVnUUlpdHFDSkg0ZFlrZi9LNm5iQnRtMXVCME1MM1hxRWxINkdMbFc5RytRWTVGMFU5OG4wazd0WENsdFpZcktFWXpTTk1nQ1RUbVdwL3d1MjJsdDZsVldFSStRVlN6RlJGL2hGRVZKZGJodkJRQzY5a0ZlNXpQeXVSS2NKWUNlSm9HVHdqSnVRaytGenE5VE5QU3hiUjNxZUc5Q3pLa01ralZ0SktrTnkwUjFsT2FVL1JOTEl0dGZqamJOUG5pZG1qU1VqMXZZaWN5Sks2YmVQeHovSWpBM3BSdGhOS0F1VkJ0UFBZU1ZIUTRFZzNiSTJrcE4zSEpyc21UQjdSL1dqcFk1K2pFSGNhVS9mejJpQ2Y0cnVORmtSbG5zMkxmSjF5NVhDZkoxdndmRjlXL1hPeTRXZG1xcDgvY3hwaTdYSmRWY1VOMXkwdmhjV3RFTSswRVB3VE4xcEVZRlVwNGJiV09kM2ZCNnRQNzM2N3dKYWdLZGRZUlZWWXFoTmgvVE5OMlNtVFFnYlhINC9rL0Y3emM1b0c5OFR5VmVyemlkcTdKRGxmQldxZ1BYbU50S25NQ3lMckkrRm5CajdlL0x5THNoM3VVWU5qckVaR1FTdldWaEpwM2RCa0wyRWlIaEt5b3FZVUJVVkV4RG5KUk1MQWs2K2g2VGhHU2JocFRKN3hSS1NwTHFJNHBhZmNsSzRsN1lSc1IvSVJrNGRuelBYOG1vNllsS2VJRy9wK3hnM0xUVTRaTjJydVFYWGpocFhXOXlOdUpHckdEWXZIRGR6RGdycVBScHlYaU1RSE00d1BkbFY4c01QNFlBak9HcTU3bFdJQWNqRkZkTEF3T2xCVW9BemU1RkVpZ2RtUUlVNmhLRWxWWENDUHRUWXUyUFFrYWFxNFlJbjFUSm5GbEhGQkM3SS9vb2MyOGVPRHh2VUo0b05XSno3b1lvVlh4NGRJdEtueW9rMWVyTVpoS1pNbHY5TGVhcHRWMXFDY1V3a2t0UVJpWlVYYzYyaDVQNE5RclJTdFU2NEYzWkZGSEQ4cStPY3MvMG1YaGM1RUxWUytmdWpaajJwWnZBVlhOejF3TVpLT1l0bWFSa0UyNmFVOTNFQk1MZUVZanFickhsb09OeW1UZ245YWRneFA5MXhiTXhPMm1uQXRXL0c4WkRxQmVITHh6OE8vbFArSGZGUTZHUVdJSU5UYUhIMlVjOU5mMlZNVHg5WW1lV3JpSkpJTlBUVnhYSG0vbjVvWTlaK1poTEhIcURxdElXNDRYbVM3UnBhaitjOC9uYlRaZERhaVRCcFZrc3BVK1kwZVlLL3VLUXJ4UkpHRkkwc1RNWU1DaEl1clhVT01CWEhlc09nb2p6eE5zY2E1SDQzcTlWMXZ6NW9jL2JYMkxNNVRJSjdMb3ZDc25WRHJyL2xFZ0hDYnh5T0tDcFE1OFZVUlJDRFZ6N0VTYVZkUG9KZVNubVVtWkJOei9KVHJ5cVpxcHBPNjVXR1FTUnBhMGsyNTZSUWV1TTFrU2piVEtUMkp1NUx0V0Nsa21VemhLckZMZnh6Vll2Y294N2EvWTlWRXR5dXJrNkE3NlRrTm9kdFYwNjEvMnVzb0F0dGFSVFl1ODdPR1gxY2pkYjNHNXh6WVk0dlRTeEEvTFQ0aWVzNFNUMS9wZEtMWE90K1Vucm53VXhmcGoyZXE4QlRsT3Z5SktPbnQ0NFNlc0NBSG5ybFNmMG9OSlBDbEkvd1NqcFdnTitFL0plQmpnbjJHdCtOZVNEdXhVVHFQUlU1WU9DYVpFQmluOFo1L0lxYTZwL3J0ZHZEa0J2Y2dta3ZQb3BCdndDRjRXcTc0dXdUM3VldFpocG4ySE5VMFREWGg0RDhWejM4b25xMm45YlFtcXdrNW9hUlNEaDQ4ZE52UnZYVEtVekJsU0JxZW5VcGpBcC9FU1pob21XbUZNdFMwaXZIWVJCSm0wdFFUbXBrMlhWUFROVEl4dWtqVzFEZzh5RDVObHdmbzhpQmRIbUp3N0ZRZlZqSTRwdDRRZWd1ZHdhSjYzYVZ2R3ZYdktub0Z4U1NXRDB2c00zSDJXZllJZzZQTEp4SzFqYmp2NUwwc2ZZZHdTZU52WGlrYVVYNjB1VGw2YzhNTllyR2J3ZkZUZjlMY0hHRnVsVDEwZWF5NWlZbm1obHZORGJlYkdxN0t6UTFYbWh1dU5vU3l6WmxzRVZjam1YS3Z4QjZQczMzc2lUaDdrbjJ1ekd2bHN6Y1gwNWIvWWhaTmU2bzVzVFFHaDlkNkh5SE9QcytlYm81VWMyaFVEUWF6Szk4c2k4T240SDc2alBzWkJvZlZlS2RWWXZmRTJSZllGMG5STDhYWnMrekxFcnMzenI3Q3ZocG56N0huR2ZRMCtwaytnLzREZjFtZHhGZ2FaMTlqWDQremI3QkZjZlpOOHRhMzJMZmo3QVgyZkJ5ZUE3eThDRS9FNFFkd1o1eDloMzAzRG52Z01ZbTlHR2ZmZzFlYXM1Y3BzZS9IMlV2c0J3eVVwbDl1amJNZnNoK1J1RCtXMkUvaTdLZnNaM0gyYy9aeUhQNENyOFRoMDNBL2d6V3RlTms1em41Qkp2Z2xxZ3ZmUmUzWnIrRDU1dFJNeEpsRU1qMUFNalhub3pvL1E5QU1keXZPWmhIM0IrRWh1aERRNEdtNmZKa0J4Tm12MlcvbzhsdTYvSTR1djJmd3VrbGZTbUV3STRJZUJvdWJpRjlOalZhYkdzMTNtejh3bUZubXlxWkk2RVRpajAxTk1ab2FiVFkxT3RIVWFNdjNTNENZcHVZMnQ2MG96VzByU25QYmlvSnVuMU16NWpHWVZmNkNGb1B1VXNOUWtUYWNYRDRJczhoeGFFUDQwaGFDMnR2SnFYQU1oNitZbDRMbnJwNkQ5eTdXZkcrbjUwNzRlY29aRTJQRnpQaVl4OGRzOUlvVGVSUmVyeS9jWksrdnZiZldtODRIN1RjMXJueDFwV240dHd1dWE1MGNyZm41aDZ0ZWRZRWF0czEwK2dtRExVRWVVMHBWQ2d3NjZFZENhTkdkMkhOdVJMb055UXM5dCtaM2k1YzE4eUlrTVRYcTJxRkV0dktlNXAzWjR2ZEFrZVR4UFJGR2JpN3JUdVR4QkZUc294WEt2OXhJZytiMTFQZnBuTkwwZ2R6WW1PZUszMDNwOHJhUEYzZUo2TlZUdzJySGlGaFFPcmxFSE1yZ3RJWWlRVU12QXMrcFlXNnVlNVVFdzloVkVaRkdHcEFqUXA3L1pGS2pnbVZiRjRvYit4WjhleUh6Vm8rL3R6cUVOejFEWklYT1RMaWh6QzN6VTdEUjREeHBxMU5Zai9zS24zb09UczN5bThPRDhkRUY0djltQ3Q5cTVFbCtHcURPZTdkdFl6VHhNS1N3UHBjZHlxYlFSYW5nNi9WdDJFcmVIS3JKbFg2ZlJQeVFWSnVUU2xXNFBWaTlLUHlSOWVJTDdyc2UzNmxLMzBhYlUvTjdXY2hodXpOT1AzMVEvcjJ0NE5kZXlpQmE3enZEM1NqdlFPVXZJNVZiTlB5bHJNS3IvUDJ6MnV2anFISndja2dPWnQwYy84bWhEby9YR0doVGdiaW1SclBRUmY1cTI1UWJ6N2g0aHFtMVNCditLbUQ0eGZUWmFOVUsySFFXSnNiSHh6SWt0TVMvUVVzLzR6TGIvK0pSOUxISjNwNnFkZnpxN3RHTmJJWU5ScEluOWxQMkE5bEdXeWorVXkwMGZSTTVTUXMxZUthMURqZzRTcHpZUUY3Q2Z6U3U1NXhGVytBNGFJTmJBYy9XY0JUY0FYY0NnNC9oM1RSb2gzbHdWK1EraHZkM1IrNlB4dnVQUis1NzhQNmV5UDFTdkw4M2NpL2ovWDJSZXdYdlB4RzVOL0grazVGN0crOC9CZmRqZlI0OUh1SGxBN3c4QVdWN0VCNUN1Ui9HdXl4STBJSGxyTjd1OXNWTGxzNXJuemQ5RDB4L21OUDRERjVqV0FLY0RqTmhIWHdXYTZ2ODBmQUlQQXJBYTdzNVY2cnRnY2Y0NkZtd0Z4NUgrbFRiQjA4Z1A2bzlpYlhwOERrKzZ5bjg2OEJabjhlU3BIa2E2OFF6aWEzVHlacUJOSHVnbzFLV0RUQUR6dVN5NlA3WVVKWjRLRXM4bENVZXloS0haK0FMeUkzNGZYRXk3YVZLanB0USs4MU5hUDhsZUxZcDdiOWNYL3ZPU2xuZWhOcVBOS0Y5SUV1Z1BZT3Z3RmV4aitqZWpqU3BiL00rNkJycGpyVS9DVE5HMnZaQmZHVHhIcGc1L0JqTTZuZ1NEcUdXMlNPOWUrRFE0WkgyZmRCTjFjT0dSNmJ2ZzhPcE9vZkc3WUc1Wit5REkwYjJ3WkVqdlV2MndMdzljTlJEb2VEZDNBUnZoamx3SHF5RTgyRU5YTUFWT05abkhpcXdtWjQzb29CcjRGRDRHbndkWjMrRDAvZ210bjByRlBwUklmUTJMdlRSMVVKM0NxR1BJZkZleDRXZVQ5VUZYT2hqcVhyYzhFakhQamllcWljTWowajdZQ0ZWVHl4WDVTU3V5dXRycUxJZFZjbkNNT1RnSEJpUHFMSXRWR1diVU9XY0NsVytqVzB2d0hlRUtyZENGL2ZoU3E1S1QwZTVLaVI0ZkdRSnI2TGdpMGFXN29GZUV2RXh3UDY1eTl0NzU3WHZoaVdWd2wwQ2krRXlXQVpYWWtoNFZ3UW9LMFBoVmdyaHFQWmRyRTNqdFJjUm9HMDRSK0lDdHd1QnY0Zmp2Zzh2Q1lFZlJvRnBBUXh4Z1pkS2pRaE1sbDQyUWxqdWl3Zy92WGZlOUJyQ1h3MEp1QWFXdy9YUUR6ZEVWdHhRS1B4UUtQeFFLUHlRRUo1cVA4QTEwSTZ6ZlRXbUN6VitpRE4rQkQrdWFYZTVodDBYa1JxOVhJMWxwRWJmMUhhL0NlMStNOXI5dzJqRFc2ZTBPd25zMjUwRXJyYjdUM0RjVCtGblF1QnRZdkV2NWdJcmJTZ3d5dE11Z0s0U2VEVUIzblc5aTd2MTNXQlVpa2RyL1E0NEJwbWRnRHNFaVRmWEp5bkVPd0U2dVFCTUNQQnpyTDFjUndDelFvQUVDV0JOSWNBOVNPSmVGT0ErWlBXSkJnWDRSUjBCN0FvQmxwTUFKMGNFV0ZGRGdFOGppUWRRZ0FlUjFVTU5DUEJMclAwS2Z1MEx3QzVBSjBuWWZsL3ZaMkRsNHQyd0NxUEVHMGFXN0lWVEdFYmIxZXV4MW85bm9mWjU3WHRoZ01FdGNBblYxbENRSDF5T01GbzdzZ2RPWGQ0eHI0TndmOXFqTU9UWDN0aTJGMDZmaG9ObTdJVjFOUGdNL1A5UldDOTYyeXQ2OVVkaGcraWFYdEcxNGxFNGMrbThqdDF3MXRuMy91M3RTeC9pZXd0cHZ3eDNERUFkdTFETEkzQ1BNRkRlVmJnL25JWTdZeHIzeGt0eGwvb0l3dkV1M0tQdXdSMHFXSFdyd0lQZndHK3habUMwK3gzOGdjUDV2aERPOThFZjRVOW9veTdFMXQvRFA2Q2Rqc0ExKzQvd1QyaXBmeGJXOWZ2K0plejdWK3o3Tit3N0ZLYjlGUlpJOE84Uy9JY0UvL2tLUmlyZjZIOUdnbitCVjRUWDM0Z3FrSXZtOWo0Q0d4ZnZoZUZwS09zbWN2Ym0zYkNsNU9BT3ZxcWVpVGgxYmlqbVhQZ3YrTy9RcWYvRDZmOVYwTStoU2dTTkJmdmc3SkhGUzNwM3c1djJ3TWo2cGVqaXgrQ2MzWER1MmIxTGQ4T2JTNHhtOFNqemJTeGZ3SHpxTzV4aHIwOGlaTGdBL29iU2tFQUxHR00wY3hicVMwSzArVUt3YWNCWVc0aXNPd1N5WGtaa25kY0lzdmFXSSt0OFJOWUZFV1M5eGE4NWxjaENnQ1FuQloxYkIzUitiNm9PN2hDU251anFxT2FZRGlFNUVJR2tpUWtWNEw3U2hUdkxFUmdCRFF6UXF6QkFuNFloMnNYWWR5bkd2dHR4N1QrT1VlQkZERU0vNXBIZ2x4Rm8zZ2EvWWUwY212ZUcwSHc1ZE1ITElUUmZDcUg1WEJVMFh3cWhpWDFzZWoxb1BpVzhoaUNqVC9ZbWcrWW9RWE5yRFdqK2RtcG9zazVPZjJwb25oZUJacVlTbW4vRzhpOEl6VmYyRTVwZEtFUXNoT2FsQXByUElqUXZiQVNhdDVWRGN4dENjeXdDemUzMW9abWRGSnE1U2FFNVhoK2FGNFg0T3orQ1B4WFRZVUJUZDhIZjRBaTBnNEhHV0lYTDhqUmNsaTdpNmxKRXcrM284TWZSSVUralk3NklkaWxoNzNMRTNneU92V3RDN0QwYjJ2alpFSHRQaHRoN3NBcDdUNGJZd3o0V3I0ZTl1NFZiWnFKYlprMk92VHhocjFDTlBadzdOZllPNGZTbnh0NkZFZXdWSzdESFhnZXoySHlZeHhic0ovWm1ReGM3bEhXTG85bGJFSGxrMlZuN29HMmtWeHlISmlxVld4akp0UHpER0VCd0dQT1BaWFQ4ODQ5bCswU1M2Qi9HMm1zY3hvai9ZWlB4MzFISmY5R1UvT2tBMWd6L3c4VmhjQk8ya2dYakFmODljSEVsOTZVUlM4ZEQ3dkdRZXp6VTNqLyt0WEVPYytwejJGbkpRWm1TUTZCZmljTmNkb1FBMHVsSWhUU2UyZDJHOUx2YnUzYzlCbSt0WkdGRVRsQXpPV0hnTlJLZDhSb1JGaWNvZGlSbk1HOFNCbStyWkdEWFlVQ1NWek00aWpNNEdqVW1CbHNRQmZ3QXp4a3M5VG04dlpMRHFvaVZab1VjWm9VcStMNmZGdnErVGZqZTUzaE1CUWJtNGtxYWhQdmZWWElmcU1NOTBHOXk3dk9qM0dkM3NnWHNXR0hjNVZqU3JJNWVEUDNUS3JlMDNraFk2V0RIaVZYZXdZNm5GSnFkQUJSckdWdUlGRTlzT2NXVDJPc0ZoZ2RSRy9LcmhQYlpEYXcyU2QvMVVraFNRcEwzODM2SjllQVNub1lrZTF0UGNuR0xTVUluVzRKTDNpZjVLOXhFNkw5SDlzRTdScnJmR1R5cHVRUjMzRXY1RWZZeXJGM09UN0JYWU8xSy8zRDBycy9Tb1JjbnZEdDRTbkxWQ0lhMTkvQVpWK080OS9JWjEyRHRXbjV5dnc1cjcrT1BTSzdIMmcwaGxmTTRsZmRMZ3NxTlJPVURuTXBOT082RG5Nck5XUHNRcDNJTDFqNGN6cjJRNUdkYy8vazh2VmdKUGJpdEtyQWF6eG45Y0RHYTY1T3dGbTB5aVBCY3hrSGFCeC9GS2RQUVJ0dlFTaDlCM2MvSDhqWXMxMko1TzVaNThQOGJGZVVtVVM0WFpVS1VxaWhQRXVWQ1VSNHZ5bU5GT1YrVXg0anlTRkVlTHNwdVVjNFc1UzM4MmdrM2kvSW1VZDRveXV0RmVaMG9yeEhsMWFLOFNwUlhpUEl5VVY0aXlrRzRGWDRQWGY4TFVFc0RCQlFBQUFnSUFFMmEyazdLTVBPK0JnUUFBTUFKQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qWXVZMnhoYzNPdFZ2dHpFMVVVL202YWRFbTZRS0V0VWtUd1VTRk5IN2NDMWtkcnRZK05ScmZCUGl3aUltNTJMK2wydG52ajdrMHAvNDh6L29xT0JaRVpobkhHRi81UGp1ZHVZaU50R0pxUkpIc2Y1OXo3bmZPZGUrN1pQUDc3NTRjQUxzSExvaCtUT1F6Z3JTeE4zODVSODQ2QmQzUElhRWtHVXptY3gzUVAzc09NZ2ZkN2tNTUhCbWExWnM3QXZPNFhERmk2THhyNE1FZG9IeGtvR2ZqWXdDY00zV3JkajRjbUdFWnNYL0phNEtpYk10cWM1SjdZbER4MitiTDRwaTVpVlpUUlVsMHFSL2t5aktkbzI3UWYrbXFHWVR6ZndiN2hOWWIwdlBRRXcxSGJEMFc1dmxrUjBhcFRDVWh5M0phdUU2dzVrYS9uVFdGYXU4ZGdsc0pRUlBPQkU4ZUNwdU1IdHpsMFlaTGN6VGkxV25DYjRlUnljV2xadU1MZkVwNjFKVUsxTE9JYXJTSkxLbS9McU1wdmljckZEVjZMcEpLdURMZ3JJOEUzaFZxWFhzeWo1bUp1eStyVWNBYytQTTBxZWRZVnlLb20xSkZ0aGg2aGNkYWNnSXdaV0tUb1dTM0JGVit0MnhxMjhCOVl0YzNuWmFnaXgxVkQrOWNTNUdGMXV5YThWa0FXbmcvQmMzbDd3OWx5ZU9DRVZYNjVzaUZjUmJIYkoyTElXZHV1cUNWNEJzb00yUlcvR2pxcUhwRXYzKzNmb0wyTEJMRWhvOXY4WmoxMGs2MjgyQnhOZHhiUzUwRjJSck5Za2ZYSUZVVmZaKzlndS8zam1ncGRBQ3QwQXhuN1lYVXg4Y2ZBWlJPZllzbkVDemhwWWhETEpsYXdhdUl6MEsyWisvL3VtUmpDNnlhdTRITURWMDE4Z1dzTXAxc3hjaW8rOXh3Q29TeUkrU3ExSnI3RWRZYlV0VGtUWDJHV29UODVoRTFIcmZNNXYxb0tsYWlLeU1RTmZNM1EyenFnRlJVUkt4TU9LZ3lqblp5Q2lWZndHdTNwNUhZL1licVJHd3hubjVFY0JseUcvRUV2QjBOZnk4UnVsaklNSDloUHFqelJubU1wQnZKV284YlpCNms4Q1NhMzFEcGxsaEpSby95MEtQNkxwaXRLWHBmWll6b05ySG1ydEdZdDNMRFdyUElxUmNWKzJuRW5IdW5zZFZ4WHhCVFdDWG9qZk50SmFYOEdkS2UxdFlPNjFWY1ZxaXpEVXVpSmJlRTF0RlFQODgwaVUxZCt3RzAvMXZTT1BDbWhXTkZlaG9GOHFXMUZPa1RhQkk5U1A5OTJSY3IzYUprZngzWGh6UkxTQ2J2ZEZkR0hVcThFK2hXMzk1YVFhcUF0Vjd4TUwrb0JFQ1JZYjYrdUNmUnZvSXVlUVp3aTZZczBta0dLdmtDdU1MSURWcmlIMVBjMFMrRTB0ZDIwQnZnRkwxRjdvckVLWndnVHlVaWpNZnJTYld0aS9VbllhZXI5d285Z1A2QnI1Q2VrRng4Z2MvVWV1c3RqaEcrTWpkN0ZvYTc3eUtid0NMbjc2R0hVbS9UYndlRkVsOTZqTzdLRG80a2lzMGZSdTROalkzZDJYVDBEZzlwZlllSTNvdnc3RWZ3RGI1SkRaVHhHRlg4bEZBb041M1lwK0xxV2tlc21ydU1jaGdtcG4rcGtBU1BvNnAwbFdxTWswYlF1TmtPVUxZdzh3dkc3Nkx2VE5rSm1NczQyNGNmb1NaTmtuRnFlckovQUcwbC9nUUMxN2hJNWVKWkdweWhxL1doOE1pUjlsVERPdzBZZTJYOEFVRXNEQkJRQUFBZ0lBRTJhMms1TzE3TGRsUUVBQUxBQ0FBQktBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtVWFZ2ZEdWU1pXTmxhWFpsWkVWMlpXNTBVbVZ6Y0c5dWMyVXVZMnhoYzNPdFVzdHVFekVVUFU2YVRob0NMUVVLTFErcEVndktvbDZBMklBcTBVS2tTQ01lS2VxR2xXZm1kdUxJWTA5c1QvZ3VWa2hkOUFQNEtGUjdPaElia0Zpd3VlY2UzL2U5L3ZucjRoTEFTendab1kvZEJBOFRQR0xvSzFNeUhLYkdsdndiWlM4V3ZMYkdtOXdvbmh0THZDSS9ONFhqbGx4dHRDT2VtdkkxdzlBMWRhMGtXWWJ0ZENGV2dpdWhTMzdxcmRUUlByRG55Mm5CMFB0NnpKQXNHK01wMHFGMHJxSGlyV2ZZdVE2cmhKL3pZMWxPdGFlU2JBanRONWxpV0g4anRmUkhnVDQ3T0dOWU96RUZNV3ltVXRPSHBzcklmaEdab2xqZDVFS2RDU3NqN3g3WC9GdzZocjNQc2U2TWNwSXJLdDZ2U1B0Wk53YkRlS28xMlJNbG5LUGdPMG1sNGJVUy90elk2aFV2cURMYzVYeEd5NGFjbnhnYmN3a3ZRL0RUdjZjTjdZOU9UV056bXNqWXlPNmY0Zy9qNEdQY3dtYUN4d3p2L2tkaGhxM2ZWL2lZTFNnUEt6NzQ1OHpZUnkvOENtQWRZWHNZQkMyY0FFbUxRMnkwT09yd0JzWXQzdXpzTEk0UzVGWmd2T1hBNFBrUHNPOUI2ZUYybHhic0U3YURQcjUyd0Izc3RQYjdyWHlBZXdGSHdkYkRIdTVpNHdwUVN3TUVGQUFBQ0FnQVRacmFUbkl0emYxSEFRQUFJd0lBQURJQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE1DNWpiR0Z6YzVWUlMwdENRUlErazIrN1pka0RvbTJMakhDVXdvM2lJa2tvTEVqRi9YanZVVWV1TXpZenQvQm50UXBhOUFQNlVkRzV0MVlSVVFmTzZ6dG5QcjdEdkwyL3ZBTEFPZXdYSVFYbEhPemtZSmRCdGlXVmRHMEdxZVBLaUVHNm93TmtVT3BKaGJmUllveG1LTVloSWVXZTlrVTRFa2JHL1JlWWRqTnBHWGhYU3FIcGhNSmFwTGJhazVvdlErRW0yaXdhUE1DRjV0Ym5mYnlQMExxdU5uZVJkc0pKcmV4UnZkWmtVQmpJcVJJdU1rUjUzZE5teWg5eGZEYm5ZaXo1Y0xYRVBrN1FvUEt4OVcwWUNPS2hCY3VuU0FxRXc0QmZyQnphZXFQWkp1TGlRRWZHeDY2TXhSNzhKS0E2RncrQzdyMVVmcWl0Vk5NYmRETWQ1R0RQZ3pSa0dKeis1eFlHaDcrb1oxRDVNeG5VWUkyK0tUWkdUbElvWjZuaWxHTWtjL0lNN0ltS05jaFJ6Q1pnRi9JVXZjOEZLTUI2OHRSTHRqWmdNOGtsMkVyUWJZckZ4Qm1oc2VVL0FGQkxBd1FVQUFBSUNBQk5tdHBPNXdMZTJFWUJBQUFoQWdBQU1RQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpEVXVZMnhoYzNPVlVVdFBBakVRbnZJR1VSUWZpZkhxUVRSYWpjb0Z3Z0VpaVdZMUVRajNzanRDeWRKaTI5WHdzenlaZVBBSCtLT01zNnNuWTR4T01xK3YwNi9mcEcvdkw2OEFjQVpiSlVoRE5RL3JlZGhna0d0S0pWMkxRWHF2Tm1TUTZlZ0FHVlE4cWZBbW1vM1FETVFvSktUcWFWK0VRMkZrM0grQkdUZVJsa0g1VWlrMG5WQllpOVFlZWxMemVTamNuVGF6T2c5d3BybjFlUS92STdTdXE4MXRwSjF3VWl1N2U5NWdVT3pMc1JJdU1zUjQ1V2t6NW84NE9wMXlNWko4c0poakQrL1FvUEt4K2Uwd0VFUkRBNWFQa1FRSWh3RnZMeHphazNxalJjU2x2bzZNajEwWmE5Mys2ZjJqcVhnUXRPNkY4a050cFJwZm81dm9JQStiWmNoQWxzSEJQMVpoc1BPTGVBYTFQM1BCTWFUb2sySmo1S1NFY280cVRqbEdzdnZQd0o2b1NFR2VZaTRCMjFDZ1dQNGNnQ0lzSlZmTHlkUXlyQ1M1QXFzSnVrYXhsRGdqTkxiQ0IxQkxBd1FVQUFBSUNBQk5tdHBPNGpjN1BrY0JBQUFqQWdBQU1nQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERXhMbU5zWVhOemxWRkxTMEpCRkQ3ajY2cFpsajBnMnJiSUNDY3AzQ2d1a29UQ2dsVGNqL2NlZGVRNll6TnpDMzlXcTZCRlA2QWZGWjE3YXhVUmRlQzh2blBtNHp2TTIvdkxLd0NjdzE0UjBsRHhZTnVESFFhNWxsVFN0Um1rajZvakJwbU9EcEJCdVNjVjNrYUxNWnFoR0llRVZIcmFGK0ZJR0JuM1gyREd6YVJsVUxwU0NrMG5GTllpdGJXZTFId1pDamZSWnRIZ0FTNDB0ejd2NDMyRTFuVzF1WXUwRTA1cVpRL3I5U2FEd2tCT2xYQ1JJY3JybmpaVC9vampzemtYWThtSHF5WDJjWUlHbFkrdGI4TkFFQTh0V0Q1RlVpQWNCdnhpNWREV0c4MDJFUmNIT2pJK2RtVXNkdjhuQWJXNWVCQjA3Nlh5UTIybG10NmdtK25BZzkwU1pDREw0T1EvdHpBNCtFVTlnK3FmeWVBVVV2Uk5zVEZ5a2tJNVJ4V25IQ1BaNDJkZ1QxU2t3S09ZUzhBdTVDbVdQaGVnQUd2SjAxS3l0UTRiU1M3RFpvSnVVU3dtemdpTkxmOEJVRXNEQkJRQUFBZ0lBRTJhMms0dmpMemdVUUVBQUJvQ0FBQXFBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1F4TG1Oc1lYTnpqVkhMVGtJeEVEMUZCRUVVbjJqaXpoaWpMcWp2aFJvMlJCTU51aEIxNGE3Y08xeEtMaTNwTFQ0K3k1V0pDei9BanpJT1Z6ZTZVSnRNenp4T3o4eWtiKzh2cndCMnNWakVDT2J5bU0raklwQTcwa2I3bWtCMjdYYjlocUZ1UXhJb043U2hpMEd2UmU1S3RXTE96RFJzb09JYjVmUXcva3BtZlVjbkFxVlRZOGpWWTVVa3hPRnFRMXZaajVWdlc5ZmJseUgxckV3QzJkUzlma3hOYjUyS2FHWHJVQ0R6c0NrZ2JnVUtUUjBaNVFlT05jOGExa1h5bmxvN1hhbGFXbDQ5OXVtUzJ1VElCSFQwb3hncXJ6d1RFaGtSajZBOGhmSmFHNys5dDM5WTR3N0ZwaDI0Z0U1MHVzSzNDYXBkZGFkNDAyTVR4RGJSSmpvbjM3RmhIZ3NsWkRFcXNQS2ZMUVNXZmhsWFlQbHZFV3dpdzE4eVBJS05lelBtMkR2Z2ZJWXh0N0gwRFBIRVhnYjVZWnp5cWhqanUvTEpRQUhqcVVJT0pVeHdQWXZKbEYvR1ZJclRtRW0xWi9rdXBpYlNsOERZQjFCTEF3UVVBQUFJQ0FCTm10cE9vV2NmczBZQkFBQWhBZ0FBTVFBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFdVkyeGhjM09WVVV0UEFqRVFudklHVVJRZmlmSHFRVFJhaVlZTGhJTkVFczFxSWhEdVpYZUFrcVhGdHF2aFoza3k4ZUFQOEVjWloxZFB4aGlkWkY1ZnAxKy9TZC9lWDE0QjRCeDJTcENHYWg0Mjg3REZJTmVTU3JvMmcvUkJiY2dnMDlFQk1xaDRVdUZ0TkIraEdZaFJTRWpWMDc0SWg4TEl1UDhDTTI0cUxZUHlsVkpvT3FHd0Zxazk5cVRtaTFDNHNUYnpCZzl3cnJuMWVRL3ZJN1N1cTgxZHBKMXdVaXU3WDI4eUtQYmxSQWtYR1dLODlyU1o4RWNjbmMyNEdFaytXQzZ3aDJNMHFIeHNmVHNNQk5IUWdPVVRKQUhDWWNBdmxnNXR2ZEZzRTNHcHJ5UGpZMWZHV25kL2V2OWtKaDRFclh1cC9GQmJxU1kzNktZNnlNTjJHVEtRWlhEMGoxVVk3UDBpbmtIdHoxeHdDaW42cE5nWU9TbWhuS09LVTQ2UjdPRXpzQ2NxVXBDbm1FdkFOaFFvbGo4SG9BZ3J5ZFZ5TXJVS2EwbXV3SHFDYmxBc0pjNElqYTN3QVZCTEF3UVVBQUFJQ0FCTm10cE9pZGdDdUNRT0FBQ05Nd0FBS0FBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVdVkyeGhjM1BOV2dsQUhOZDUvaDRzREt4R1dFSVNFckpzYkFuSkhFSTd1N01YTWxhREFSMEp3aTVncVRodDdXSDJMYXkxN0pMZEFVbU8yelJ0blRwTzdKeE5ZK2R3MnJUTjNUcUhRUXAyNGladDJxVDNmZC8zZmFldDB6cjkvNW5aZzJWWEdnUzJqTVNiZC83LzkzL3ZmLzk3ODRhdnZmajVMd0FJaTM0LzZ2QzBnazgzNFROK25NUm5PZmtjSjg5d3NxUmd1UWxwQlpmOHVJelBLMWhSOEt3ZlcvR2NIMDM0Z29Jdjh2am5tNUJUOEZOKzdNQ1gvUGd5ZnBvcmY2WUppd3ErNHNjZVBOZE01Wi9seXA5VDhOVXQrQnArM285OStBWE8vZUlXL0JKK21aTmZVZkNyQ243Tmp3UDRkVC8yNHplYUtmZWJuUHN0N3ZqYlcrREg3M0RkNzNMeWV5emg5MW53SDJ6QkgrS1BGUHl4SHdIRzlTZjRVd1YveHRyKzNJOFEvc0tQdjhSZmNlNnZ1ZTV2T1BsYlR2Nk9rNy9uNUIvOCtFZjhFK2YrbVpOLzRlUmZPZmszQmYvZWhQOVE4SjkrRE9IckN2N0xqeEY4M1k5Qi9MZUMveEc0ZWNMSzVtUmkyTENNb1Zrak15TVRJNHN5WTQzTC9IdzJrNWNDNnFsTVJ1YUcwa1krTC9NQ2pYZWVHaHNjbnhKb0hYM0FXRFFDYVJvVG1MQnlxY3pNN1FKYmgyaVFaV1NzTTBaNmdRYmZjUHllc2FIN0ppYnZHaDhaSGg2Y0hCUm9jbXBHSmd2WkU1emRYZW95ZEhKdzdNVEk4SDBqWjBiR3FLVmpOSnViQ1p5WDAvb0RBV002RlVnUVVPdml2TXdIYkp5a3MzRWdsVWxaeHdRdWRxMkZWRFo2UHBlMXNtWTJIVGpMeGZJV00zZHgzc29HaG9nSEVwa3kwdm5iSFVsemhqVWJ1RE0xY3lwanlSbVpxMUhiZlViQU41Uk5zTDJqcVl3Y1c1aWJscmxKWXpvdG1hYXNhYVRQR0xrVWw5MUtueldiSWk0N1IxUFp3SHphc0pMWjNGdzBrSkJ6MlVEZURFeWs1dWJUa3VmRm1KRms0QTFtTm1QbEROTWFUQ1J5TWs4REcyemNBbnRybXlld3hTelpRL044Wlh0cE5tYU0vTjI1bEVudzJxcmI2ZlFaVGMybExBSC9zSnpQU2RPd1pFS2dmWHlCNU16Sk02bDhpZ3djekdTeU5Fc3A4b1dpTUh0U1NtTklXSDR6cDZ2VWFsMElFTXJBa012WkNiWXF1NWhLdUJPMXcxemJJSERJbXdDQmg2NFZORW1kekJtWlBFa2tYazRiR2FPMlE5VjJzMVpyalF5Qlc2K3FSbUJ4azNGNzV0dWZMOFlYb3JtcnU1cFNrM29FeHNuN0xUbGtwTlBzYU1tRmpLMVFZSC9OQUhEYzdVUDlteWRTTXhuRFdzaVI5eDd6cEdTZ09zbkhTRmg5WHBLREQzVFZtQWFQRm1Ua2VUY0l2bjREa2dacTlwbVQxbXcya1EvazNFaGRQazNqMHBTcGVjdXhab2F0MlV0cDlVaFBTL1N1cmcxcDZYYk1XN0JTNmNCb0tzOHhlU3ZQVUtLMGlReDVpSFNkVjk2Sk9LSkpyckJaSmRTdEk2WFMyWlExTzVxZEVlaFo3WmtGcit4YzIvZjIxYXZKTlViZ2pnMXhRYTY0eUZxWUI0RnRhNWxwTG93bUMzYVZOUS9tY3NaRnQwL2I2ajJEcUhUM2pZRUtlUVBlcldWWHVMZWF2b0ZObUJvV3ZuWENNc3h6cDQxNUc2dUNGK2lncE9BYkF1L2VYTy9hTEx3MzU2djJPWjdPbm5mSUh2V0MrM1ZFc1JVWXNXYVBwOUtXdmFZSlhVNnlDWXZ5UXFBZ2pZOHBTYnVIZ0g0TllnWGVzWWxvTm92Qzg3VXhEY3Vrc1pDMjdreG56WE4zR3ptRE1LN2VOcngwcjAwbTdTcEd6dWt1RUZpbldBck9NcE53Qno5N2ZXellyQ253cGJNR0hjRGVmNzJPdnQ1T3NFOWR4MU9UTjRUdmVma1BvOTZBUFhGZERtN2VzRFVtNUh3NmUxSGd5YXFMYVBPNDJ0QkpUT1hYd3hUdnAvWnByRlZtVEhwWFM5aHZxcmtGazZ3UmVQNFZhNENYUUdGSGdnOTRNMkVqYnJHaGFmanlLeG1mWjVZL2RPMk9zbzZndFNHaXYvSUtoK2laNnc5dnlHTmVMcnEvK3NwSDZabHh2MkdhTXAvdjFEVE5EaWdlaGwzbGVzNzcwWjlmVXJwWEUzYmx0N2U2Q3hvblFVNUNBa2ZXcDRvT2dRTm0ycjA1ck8reXJ5b21zZ3M1VTlMWm1iZUpWV1llWWU1Vi9DLytUMkQvMVZrUmRibW9GdGVpV2xpTGhQUndYQXRHb2tGTkMycVJXSlM0ald2SlJHUTY0clFIcVNXbzkrdHhqZjQ3K2JoT3Y4RTQ1UjBKVVMya3hZTkJWNHF1cjVaQ0VxZ1VpVVMxcENOQkMwZTVSdS9uTktrbjVSb3NWRjJKUkF2ck5EU3E2YWJUb2xNdnFRVk5HcW1IaktDUk5CUDl3VEJKQ1VaaVhFZmFaRGcySGVTNlNMOWJsd2liTXFxYlhCZUxSR0tSNlpJT0drbHlZOU9ScUoybjJraXdQeGdQUlVMMEpPdjZTU1hicVZFdXFYT2ZtTTZvNGx5dGx6R2dSUk9yc1RQU2VKRGxFZ3V1bnVtNG80ZHF3azZiTTRKS0lkSVpjWmp2MXdpQjd2ekdrb2FNaGFONlRBc0ZwYTRaUkdFNEZPdlh3MW93R0k4a1EyWTRuRENUOUU0YWpadXhZTEEvSGplTnVHYkVrcm9aQ3lWRHNSakpNblNhRGEya3VaL3lTV21Fb3BGb0tHYlF2NUN1UmVJaExScE5SclZFV0E4YTAwYU14UFNIWkZ4UFJJT3hlRXhxaVg2TktaVDlaalFTWk9PaVpvZ0taSE13S0NWaDBXVTBUTndrbzJaVUQrdXNTRE9JdkpDS0Niekl5VGNwb1dNUEpVTGdscXZkbmduc3E5V0ZieDRVVWFlS2V1RVR1SEYxTjI0Y2wwbVpvL01VclpkT0QrOHpPbU5xNEtSUllHZTFjS1lLUlRRSmROZENOQ016TXNmM3g0RjdVaGtyRklteXNHWkYrRld4UmFpcTJDcGF2RUVKcS9oV2pOT0tGamNJN0toeUxhTGdCVlZzRTl0WlFhc3Fkb2lkQ3I2aGlsMmlUUlc3eFI2QkxxK2hTbUJ3dys5NlBLMmZVa1c3Mkt1S0cvRUpWZXdqYTdFb2JsTEZ6V0tQS2pwd3Z3cUxFbkdMdUZYRmEvSHRpdGl2aWdONHpCc2RFVVYwcXVLZ09DUVFYUGMxZ3lwdUUxM01VN2NpZWxUUkt3NnJvazhjVWZGV1BNYkFKem1aNWNTMjQ1d2lBcXJRUkZBVklhRnpFdVlrd2tsVTRLWXJiaWdDMjljdzVjM0VJQ09NZWV2TGEwbkVCWFpWbldPQmx0VlhVclJibENwT1dleWgvRkp4azd4Zzk3ZUJGMjhFU201eHNldjZiWjV2cWZaYWVkMituajM4MHFMeC9MSGk4YzNEc1RuZmV4NTV5UUY1NW1aYlJaRGtiOEg4TlpEZC8yRFhhOHRRM1RYOWdEU3JmaGE0emRPUmtyVkZhaHBla2xkWjVuSDc1UVZwTGxpeWRQaWRvS0ZwYWZ2L3VMUVdjclRoVGRWZWVNVnZTbVhxN1cvZlhsOEgybXQ5N0NGd3UwcUFoN0xwdERUZFQ2VE5jbTdldXVoR2txNHF2TzFiWTFYWlZBcWM5R0NQUi9pWnpZdEozcjRVK2ZLcEI2VjlBajlGaGE1VHpGTlRxaGhEMjFiUlVZaXRORTZaTmZKakZHRHRvZmZTMEl4ZDJGbm9YKzZKNUtrejBySmpybmFGajRNMTNoUHEwenh3RzBrNGxVblFSQ1FLSDZCMkVkcHF5cHFvcTN2WjFKUk5KOXhzdlpGSThKZ3FDNFhnNzZtMWhHbXprWGJRTG4yWTJGWDFScGswekJuekFrZTdWdDg0Rjc2a3J2S0ZXdmZxclFSOXFQS3ZEVlp6V3Z4YmoveExmSE8rVmlmN3h0N1Y3bWs3NVloOW8wZmUwdWpjN1Fub1YzUGpxaGExMEJRNTRXSXlPNTh5QllhclJDRXYvdU1ja0lyZmJpcU9OSVY1S01MZTdzQmVkU1BaMmJVbXZGV0R2TTI1Z2kydFlZSExYV3RpMTh0eHVYbmxMY3BqK0huMkdyRnYvTlp3VStCL2NST3BYL2ZOMEtaWThLWE5uWURyWTRTdjYxNE9GUWM5bkNHNnorQlcxT0VrZ0Fic3hXc3dDb0hUVktwRFBkb3hWbFp1cHZKZFplVldLdDlkVnQ1TlpYcW5wUHhPK1BpMWh5VGNRNlVNRkRUU3M2V250YjczY0YrN3I3MWhHYjVQMjJQT1VNcC9wZ2ZvMklvd3psTHVtTk1iMzRZcHdNN2RhMnZoSEwzWTJiMWI4QjM0VHBMUHVmdHdQK25qbkVHNUJremJvMHo2YmFSUkNYb3lHa2w1UmpOTnRRMzBWQXRvbHRGUWlTV0dMWWpiV01KTzN5SVd0WWhGTFdKUmkxaFVKREZEMmxqZjdKV3NiNnpVT0VEVzM3RU82MU40WUYzV242dHR2VktKNVZWay9lQTZyQzlnS1ZndmtNWWN0YkcrYzY3TTNoVTBUYlUyMXo4SC95VnM4VDBIZGFwK0JWdW5lcGJSTWtFMXk3aGh0S2UzZGRzU3RqOWRoTk5xR3pZTS9vdk5mVGlPQXpoaHcycHpSTHF3RHFDSlNNNlMybmw3NU9zb2wwUGVCWkFsdDJWd0IyMEFyYVRaejVwM1RQVXVZeWRydm9SZHBQeDB6K0VsdEZXcWZnMTJrVy92b1ZYUVFaN1BxbTl4aEJVWk9jaVhEcVN3ZzNobEVIVXVpQVdxVzZ6Qnd1NEtGdll3QysxWFlXR0NSRXdTQy9lUXZXYzhzbkFlRnh3QTRnNkNyVkQ5b3oyZndkN2VKZHg0ZWdYN3BnNWZ4azBDeTdoNWpISWRkSEx5dGZzdTR4YUJKekROdVZzRm5zZitvdzByT0RDMWpNNmpqZTJON1ExTE9QZ01Eam01Mitvdm82dU9Pdmt2bzVzN2Izc0dQVzZUYjIxVGIxOTc0eElPbi8zSU41L3NlOXAyVExhdmh5d0RPVll6dWRSdWNxb0lMYWRqdEtCT2ttdWJSTzUzazJNL1RJNzdDSlVLQytRWWVjSkZQRWk1Q0lXZzErTzdiRWQ5dERndGo5S29OeEFEelhnanZvZCtPVGpsOGIzNFB1TGgrMTN1bkxhSGkyMXZvcllmb0xidHFIc1JIUW9lVWZCbUJZKytRQ3Zab2ZRdEpQQ3RlTXlkMDFjVGZKNkF0cDdQb2EvM01vN1VZUVVCbmtwdENjSFM5RFhhNjJXbWJNcmFpakRiOERqZVZweXl0OXZ5MzFGMDNBWjc0anRXRUpycVBkeXpCSDBaNGJFK21zQkxpQ3doZXJhbmJ3bXhrcUlXMnpVWDZMbElnZmk4cmJESEVWRlUySUYzNGwwMm9BNjhtM0oxMUh1N0RhTGVCZkdEeE10NzhFTnU4THFmdklhWmJWbEIzVlNQR3pEaWxjWTlWQllzbkhDRllyZ1N4V0JkVnd4WDljVnc1YXNTcmxqL2U2K2t2NzlTL3h1dnFwOUQxSHIwUCtHR3kwbXFaUWJWZ3Y1bEhLM1UvbkFaMDJwUnUxclVyaGF0ZHdKa3ZhM2h5ZG9hYnEvVThPYXJhaWpZVjlMd1ByemZkYVFIM1pEZldZcDlmY1hZTjNEVTExcEhhbHZyMjMyWGNFZEpzeE93SHFPMThYZ1p1NTIyVHRnNXRrcllPZFpaWitjK1lMTzdtemF6RHhKS24rdFRUOWw0UHJSK1BNY3E4YnlUWkwrckJoN213QnVlSDdieC9BaVZHYytiM0EzNlVBa1BlMWtSVUlNTnFJOFFOVnpDdDFRaWVpOXREMCtVYmR5SGlvZ09GUms2Wkh0ZG5aMHpYUDg3WkdQejBlZ1dHMXRoNDNZUWZyakNJOStISDcwV3RLK3FSUHRCMHZkVURiUUYvdGFQOXNmSzBXNXJ3by9qSTY1M2o5Qm9IcThRcGlXSVNzZnVMTnRURlh6VURWSUtQa2FuU0dIblBvNVAwSWdtZkJLZmNrVyttdWpnbjU0VkRFNjEzdG5nYnFKRFU4VEM4TVNVYndVam5EM3U3S2NuUG91OWZMNFJaU0d5anpRZVFUYzk2L0FUTnFLZkpLbkFVZEozZ0VxblNFTUF6czhlOTduVmZZN1lhUk9HM09kKzJxWWVRdlAvQTFCTEF3UVVBQUFJQ0FCTm10cE9ZMUk3bFZFQkFBQWFBZ0FBS2dBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVa01pNWpiR0Z6YzQxUnl5NEVRUlE5TmNiMEdNTjRrOWlKQ0JaS3htT0IyQWdKR1JZR0M3dnE3anV0cEx0cVVsM2o4VmxXRWdzZjRLUEVuV2JEQXBYY092ZHg2dHg3VTIvdkw2OEFOakZYd3dDbUFrd0htQkdvN0dtai9iNUFlZmw2NVlyaHdNWWswR2hwUTJlOUxDUjNvY0tVTXhNdEc2bjBTam5kajcrU1pYK2pjNEg2c1RIa0RsS1Y1OFRoVWt0YjJVMlY3MWlYYmN1WU1pdnpTTFoxMWsycDdhMVRDUzAyZHdWS0Qrc0M0bHBncUswVG8zelBzZVpKeTdwRTNsTzRjU3RWcU9YRlk1Zk9xVU9PVEVSN1A0cXg4c296SVpjSjhRaktVeXd2dGZITnJlM2RmZTVRYTl1ZWkraElGeXQ4bTJEdFZ0MHAzdlRRUktuTnRVbE95ZC9ZT01Cc0hXVU1DaXorWnd1QitWL0dGVmo0V3dUcktQR1g5STlnNDk2TUZmWjJPRjlpckt6T1AwTThzVmRDMEk4TDNocXFmTTk4TWpDRTRVS2hnanBHdUY3R2FNRnZZS3pBY1V3VTJwTjgxd29UeFV1ZytnRlFTd01FRkFBQUNBZ0FUWnJhVGlGY3ppS2VBUUFBM2dJQUFESUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhOQzVqYkdGemM1VlNYVThUUVJROVU1WXVyYXNVVUJCUjR3TVBMWkFPQmtKTUlIMndzWWxKTmFIRnZwQ1lUTGUzWmNoMnBzek9TdnhaUGhnU0gvd0IvQ2pDM2RVSFk0eUJUR2J1eDV4ejd6Mlp1Yjc1OFJQQVBsNVdNSWZWS2dLc2hYZ2FZbDJnN005MHVya3JzTjNWVnM0UzVjZldUUS9raUtaV3BySHMwVVZHcWU5WWQ1eFpyN3kySmoxazJwRTIycmNFbXZWNzhCb0RnYUJ0UnlTdzJOV0dQbWJUSWJrVE5VdzRzOXkxc1VvR3l1azgvcDBNOHZFRW92ZkdrR3NuS2sySncrYmRlMjYrM3VkeEszMDlNY3Buamt1MnU5Wk41Q1VOOTg2bEdtcDU4blZHUFJxVEl4UFQwVitYSThWMUdKREtUMzc4cHUrZE5wUERGbGVzOW0zbVl1cm9mTXIxZjNWdW5xc3Zpb1crTTNGaVUrWjlJSDltUnlHZVJkakE4d2p6S0VjSThVSmc1ejV5QkRiK0kwQ2djZWRpL0l3VDhyM09zVUM5ZnZxMjhZZjJtYlBleGphUnNYWEU1S24xMUZaSndzcm42bzBCWHZGSEN2aFBpVm90MTVGN3ZFTXNzSzJ3MTBLSkYxRGQydjRPc1hXRjBqZU9TcWp5V1M2d24vR0F6OVZmS0VSNEJCVGVmSEVmWUxIQTE3QlUyR1dzc0Ezd0dFL3dzTUR4SUFVRHQxQkxBd1FVQUFBSUNBQk5tdHBPZllLcSs2UUJBQURsQWdBQU1nQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERXpMbU5zWVhOemxWSk5ieE14RUgxT3Qxa1NGaG9LTFpRQzR0QkQwcUlZNk1lbFZRNUVSQUlGcEtZbEZ5UWtaM2U2ZGJXeGc5Y0w0bWYxVUZYaXdBL29qNnFZWFRnZ2hGQXJ5NTRaKzgzNFBYc3VMci8vQUxDRkp3M01ZYm1KQVBkRFBBaXhJbEQzeHpwZmV5NndNZFJXempMbGo2eWI3c2lFcGxibXNSelI1NEp5UDdCdXY3QmVlVzFOdnN0cGU5cG8zeFBvdHErUjF4a0xCSDJia01EQ1VCdDZYMHduNUE3VkpPT2R4YUdOVlRaV1RwZng3ODJncENjUXZUR0dYRDlUZVU0Y2RxOSs1OXFMVGFiYk9OQ3BVYjV3WFBMdDBMcFVmcVhKNW9sVUV5MFB2ODFvUkVma3lNUzA5OWRob3JnT0EzS1pFak5RbmhMNVFSdi9jbnRudDhlRm13ZTJjREVOZEVsMjVWOEV1aWZxaTJLOXIwMmMyVnliOUIzNVk1dUVlQmhoRlk4aXpLTWVJY1JqZ1dmWFVTV3craDhkQXAwckYrUGZUTW1QQnZzQzdmYkhWNTAvbm1EbXJMZXh6V1JzSFhIeTFIcnFxeXhqNVhQdHpoaFB1WjhDYmkzUmFwVTZTbzluaUJ0c0crejFVT01CTk5jM3ppRFd6MUU3NWFpR0pxLzFDdnNKTjNsZC9vVkNoTnRBNWMxWDV3RVdLbndMZHlxN2lMdHNBOXpERW01Vk9DWlNaZUFuVUVzREJCUUFBQWdJQUUyYTJrNFVPUlJYMmdBQUFOQUJBQUFSQUFBQVUybHRjR3hsVTNSdmNtRm5aUzV6YjJ4dGo4Rk93ekFRUk8vNWlqbFNDVlZ3NEZSeGdqK0l4TEdTYXk5aEpjZU83SFZMaGZydmJCMFNrc0p4ZDNabjNnekpkTDFCanA0ZHl4bjdoKzNUOW5IWE5EWUdTY1lLV3U0SFQ2MUV2U1I4TlVEaElCakt3Yk5GMWoyNVZ5Tkdmd0E2a21ydHZIejVNS0VqZDFkZk9EajZKSWZvM1p2eGhlNnhXZ2M2MWZXbU9tbCtsbFNzV2szZkxHejhlRExGWDNHd2dNRHo2bTZuOHVYcTlsNkNGWTRCbVdTMG05UFdWbFdiQU5WdDJlOVAxT1JSZ2JWOHovOTEvNjI3YUhqTDFTblhqSEprT2lHUmxCUXlSbHlkOUhYelF6bHFOM0JxZUdtK0FWQkxBd1FVQUFBSUNBQk5tdHBPc2w4YmRWY0RBQUFZQ0FBQU1nQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpESXlMbU5zWVhOenhWVnBUeE5CR0g2bUZCYktTdXNCM2hkVzdZRXNvdUxSZXRCS0JhMG5oc1FRWTZiYnNTelo3cGJkV1JSL2twODBFZkZJakovOTZ2OHh2ck0wQXFVcVJoUFRkbWZtbWZkNG5uZmUyWDc1OXVFVGdMTzQxWU0rREt1SEVVTWNJekVNNGJTRzBWNmN3VmtONTNxaFlVekRlUTBYTkZ5TW9ST1hZbVNjMDVEWGNGbkRGUVo5a2R2SnA0RmpTc3QxR0FiTHJsY3pub25LbVhtRFZ5eWp5aVdYU3czaEc2V21UWTZoUzg1WmZuS0VJVnUyWEtOaGMvblU5ZXBqUmxYVVhjTTNqUWRpSVJDK0xMbmUvY0FsZi9MeWxWdmVjaXhKT2UrbC9zRHY5NFRTTXd6Um9sc1ZEUEd5NVlnN1FiMGl2SWU4WWhPeW8reWEzSjdobnFYV1RUQ3FCSkQyS2NjUlh0SG12aTlvT2J4MVZzblJVUklVcGNnMncvRlVlaDFKR1RSc1lsY1RGSnBMVVRVZUt1QWNtV3VlOEFOYlVxWkVlWjR2Y2lPUWxtMlVMVi9TNXNCR25xU3d5WFdreFRiLzA0SW9wOXdWaWhXYmVHNktSa2hVdzFXR25tbXI1bkFaZUJSdWFTdGs4NnM1NjF6T0dRV3JOdVZJVVJOZWJoVzF1Vk16cHFWbk9iVmNlN3Zad21aTHhXc1g1VjdidUZ1WkY2YVMvbkl6dUU2ejZUcG00SG5Da1VhUnlxMktrdjlQQ3NMYVRydUJaNHFTcGM1bWI3dmVHRmFlMUlvVGptbTdQbm5lRm5MT3JXcTRwbU1jQlIwN3NVdkhkdXpRMFkraWp1dVlZRGo2VzBVYVNqcHVZSkxod0s4YVFNY1VUbEtwMjhtaXhtdFZ4UkNaTFNnaU4zVWN4Q0dHb1QrNUF4c0NyaDRkdzhGZm5oM0R6aldYSDMzS2tONXlYb2J1bXBCcVRjRlNxZG5DK29adWVLNTBUVmVsOWdTNTE4bEtwYWFUNjBpcEYwV01tNmJ3L2VUcEVYcC9QZm5ITDZMTjE3cHZJMElzaUR0RGYycXE3VlZReW1hNEhaQ3l4Nm1mWFl1L1I5SXpPRUwvQTNIUUFTS1NTS2h1QkdpazFxUS9sZzc2OVdPQWRuZlRySWhJaU1RejJXV3d6TkF5SXBrVmRMd21LSUk5OU93aVEyQUJlK2s1UUJpWlloOE9BT0ZNaFdUMG9lNmlNQ3JnVjNTSFZndVpOeFR2RFNMdkVDMS9ST2VqYk1kN2RFWHdHZHA3ZERNYWU3TFJGaVNXN2R4azA5V0M5TkkzcTdVNnJrQi9GV3BUbEFlSkFpQ2hJeURsaTBqaUdjYndISk5Zd21POFFJUHdOVGtMVFRrNkJBNVQ1ZWk2aGl2V1JBWnBkb3lRS0kxSkhBOExjeUl4VHBKUDBreEpOc0lTQUoyWnQ5ajJxbTNsOUZXRFpxcTFjTkZtd0JUUzRaaEJOdHdid2luc3AxbU1yUHJDV3VNN1VFc0RCQlFBQUFnSUFFMmEyazVvTWlHblNBRUFBQ01DQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01USXVZMnhoYzNPVlVVdFBBakVRbnNwakFWZFJmQ1RHcXdjeGhpb3FGd2dYSW9sbU5SR1FlOWtkb0dScHNkdlYrTE04bVhqd0IvaWpqTE9ySjJPTVRqS3ZiNlpmdmtuZjNsOWVBZUFVdGt1UWdZb0RHdzVzTXNpM3BKSzJ6U0N6WHgweXlIWjBnQXpLbmxSNEhjOUhhQVppRkJKUzhiUXZ3cUV3TXVtL3dLeWR5b2lCZTZFVW1rNG9vZ2lwclhsUzgwVW83RmliZVlNSE9OYzg4bmtQNzJLTWJGZWJtMWhiWWFWVzBkNXh2Y21nMkpjVEpXeHNpUExTMDJiQ0gzQjBNdU5pSlBuZ2NZRTlIS05CNVdQcjJ6QVF4RU1MRVo4Z0tSQVdBMzRybGEyZk5acHRJaTcxZFd4ODdNcEU3TTVQQW1vemNTL28zblBsaHpxU2FuS0ZkcW9EQjdaY3lFS093ZUYvYm1Hdys0dDZCdFUvazhFUkxORTNKY2JJU1FybFBGV2Njb0xrRHA2QlBWR3hCQTdGZkFwMm9VRFIvVnlBSWl5blQ5MTBhd1ZXMDF5R3RSUmRwMWhLblJHYVdPRURVRXNEQkJRQUFBZ0lBRTJhMms3a2ZWN3dSd0VBQUNFQ0FBQXhBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNaTVqYkdGemM1VlJTMDhDTVJDZThsckFWUlFmaWZIcVFUUmFnOG9Gd29WSW9rRVRBYmwzZHdjb1dWcnNkalgrTEU4bUh2d0IvaWpqN09ySkdLT1R6T3ZyOU9zMzZkdjd5eXNBbk1KV0diSlFkV0RkZ1EwR2haWlUwcllaWlBkcUl3YTVqZzZRUWFVbkZWN0hjdy9OVUhnaElkV2U5a1U0RWtZbS9SZVlzMU1aTVhBdmxFTFRDVVVVSWJXSFBhbjVJaFIyck0yOHdRT2NheDc1dkk5M01VYTJxODFOcksyd1VxdG90OTVrVUJySWlSSTJOc1I0MmRObXdoL1FPNWx4NFVrK2ZGeGdIOGRvVVBuWStuWVlDS0toZ1loUGtBUUlpd0cvbGNyV3p4ck5OaEdYQnpvMlBuWmxvblg3cC9lUFp1SmUwTHJueWc5MUpOWGtDdTFVQnc1c3VwQ0RQSU9EZjZ6Q1lPY1g4UXhxZithQ1k4alFKeVhHeUVrSjVRSlZuSEtDNVBlZmdUMVJrUUdIWWlFRjIxQ2s2SDRPUUFtVzBxdHVPclVNSzJtdXdHcUtybEVzcDg0SVRhejRBVkJMQXdRVUFBQUlDQUJObXRwT3g2OFZRNklCQUFEbkFnQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREUzTG1Oc1lYTnpsVkpkVHhReEZEMWRoaDEySFdVRlJCRTFQUEN3QzJZcnFQZ0EyUWMza2tCV0UvbllGNTY2TTVlaFpMWmRPeDJJUDhzSFkrS0RQOEFmWmJ3eitrQ0lNWkNtdmZlMjU5eWUwL1Rucis4L0FMekNzd2Ftc05oRWdJY2hIb1ZZRXFqN001MnZ2aEJZSDJncko1bnlwOWFOdDJSQ1l5dnpXQjdRcDRKeXYydmR4OEo2NWJVMStUYlRkclRSdmlmUWJkK0MxeGtLQkgyYmtNRHNRQnY2VUl4SDVJN1VLT09kdVlHTlZUWlVUcGYxMzgyZ2xDY1E3UmxEcnArcFBDY3V1emUvYzNYakRjdHRIT3JVS0Y4NGJyay9zQzZWbHpSNmVTN1ZTTXVqenhNNm9GTnlaR0xhdVhhWUtPN0RnRnlteEFxVXAwUWVhK00zWDI5dDk3aHg4OUFXTHFaZFhZcGQrcGVBN3JtNlVPejNuWWt6bTJ1VHZpZC9acE1RanlNczQwbUVhZFFqaEhncThQdzJyZ1NXLytORG9IUGpaZ0l6S2ZteVpscTdmZksyYytVUkpzNTZHOXRNeHRZUjA4ZU02cXNzWSs5VDdjNFFLL3lqQXY1Y290VXFuWlFaenhBekhCdWM5VkRqQVRUWDFyOUNySDFEN1F0WE5UUjVyVmRZaXp1OEx2NUJJY0k5b01xbXEvTUFzeFcraGZ0Vm5NTTh4d0FMZUlDN0ZZNkZWQXo4QmxCTEF3UVVBQUFJQ0FCTm10cE9FcE1hK0tJREFBQnFFQUFBR0FBQUFGSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpMbk52Yk8xWFRXL2JNQXk5NTFjSVBTVnRsclNIN1ZKa1FMZWhRQTlGMXc0OURkdGdXM1FtekxGY1djNGFEUDN2b3lUTGt2d1JwMWkzMDN4cFkxRVUrZmdlS1JjaVdtOGlVdktNVVNaMzVPdnA0dlhpN0h3eW1TUThseUpLSkxtRGh3cEtlY25GYmNWbEpCblBTL0pyTWlINExJL0pLLzhoZDVlMzVKcFR5RnJ2ajVkbUErVFZSaGw5UWtjVnVybURCTmdXNkp4OGdDUmp1ZnBQSFFNZkJkOHlDdlRKN0N1bHFQcGp3VkJJL2NRN0NlWFpHOExvT1ZrdXlYMEphWldSbEF0U0NDZ2hUNEJzUWJDVUpYcG5zNjlpdVNTc0xDdWdGL0s4ZVkxbnNueE5xamh6NzF6b3BmNWpWdW9nWVF2b0NFMXNWbE1YMFR3OFplNTVueW00ZTlIVVNJempxYzBzb2pkcENxS0JNNFRQK1B1bmdQbXgrWkQ1eDR2MDRZcTYxeEdsZURxYVYwV1JNUkE5R0d1dkRjcDJBOHNwUEFKdE5zN0RFOXpQQjdYOWFxUW1RVVV0TzEvcXJPR2FLd1VwdkdDZzR0cE5nU0d5aE9TeHVFbHhBMkpxbkMzSmRWU1VSSDRIckNtUlhQK0hCbnAxRXhVRnB0ZVFjdlcyVDA4emxVQTVRc2xuQmFpMzdBOVJnelFVcE40L016YkRnU25ja2lnblBNOTJKQVlzVEx4aFVtS0o0aDJKU0Z6dFFBeEViR3RhQ0xaVmVXbmJPbDVzZzBZOFhFeG5OaTFQUWRydGlteks5UUlGUTF0c1RhczgwVTFxRGZLZE1yMHdSemxYV3dZL2lRQlpDZXlxbGwwejd3U3pabVB5Zkc4NFJXWGk2U3BqN1h3YTdudW9tSUNwaTR5c1ZzYk56R250VytOeUdOV01yekhRZnVqOEJOSFdhM2dER2ZiM2tIbTdoMnhndzhWT0tkRXR0WHV2WHZCVDF0ejZvVW92d0RLZndDTXJaZG1CUlpIOE02TmZGa2hDeEFYanJRdXVIaHNXRnRiWmRkb2RCdWNiQkczUFJPZ3Y5OHlMQmp6RDFSQy9vZWJra0drUWJnamdZSTQ1ejBhaFlhV25FcTBiamkxL0RLclR4MU1mcTJCVlRaS2VGUWRuRjBVZlB6UUlVR3lCaDhzTkJ4YTIrM3VoTk8zdzVNVDVBTXd2bU1rS1dvZHFQWDlkemxwdHFIZ1lVWVpwaElkcVExdi9WWFYwQjYxYkMwZlQ0S0FkRjVUdXdVT1NNZzM2RUZINWxnT3k4a3o2aGVVWnRPOFZPczNRcEhYRnNCbTMvUFJkT0ZvaWJSZXlNL2NQVnUzenRMcXZqZW1UTGVqNmg0LzdRQkVQRkgrbnFDMzVvL2YzQXRUVWRLNmpITzlGT0REeEVEbEl0cDZocVI1M0hob1lzRHVDbmZ0a1g5UVgzaHArNjc0VjQzMUJiWXdKRnhoSXdYT3FDbU12UnpWdkdqQjdPazd3WGRKdU8rYVMwMms4NFVYVlhSYnJhSi9kaXdKR1VuTXBiYytOZllUOHo3NC9ZOS9SVVVpKytydmdSZWpIVWpMdG8yRGYxUE1yZGdCMTdlZUx5L1RwTVA3Nm56NTcyVHRDM0tmSmIxQkxBd1FVQUFBSUNBQk5tdHBPbGdBQlliOFFBQUFUTFFBQUh3QUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFSbGMzUXVZMnhoYzNQRldvZDdITWQxZjB1VUJVNUhtNklFU1NCbE5kb3lTQkc4N1FWVVpZdWdnS1JFMGxRb0tiRzJnaWNmN3VDN0F5VTZqdTBrVG5GNmN4SXIxWElTSlhKc3kwcENRbGJzT0QxeG10TjdyMzlEdmk5eGZtOW05K29lRHFMOGZRRjVlN096YjE3OXpaczNlL09GLy8zTTU0aklvdjhxVVlYQ0VrVVVseWlobEZ1ckpicEkxUkk5USs4cVVZM1dacWxPalJLdDA3djV0c2tQV2t6WFpyb052bHppeTdQODRMa1p1bHlpOTlEWDh1VzlQT2pyU3ZRK2V2OE1mYUJFWDAvZk1FdmZTQjhzMFRmUk44L1F0NmowclNYYVN4KzZqcjZOdm4yR3ZtT0d2ck5FMzBYZnpaZnZVZWw3UzNRWDYvWjk5UDBsK2dINk1MZCs4RHI2SWZwaHZueEVwZWU1KzBmNDVrZFYrckVTSGFRZlYra25WUHBKaGFidnJkYXI3ZnNWbWxqWWYxNmh5YU9OT0ZIb3pTdlZlbkpxWXkxTW11ZUNzSWFlM1N1TktLaWRENXBWdnM4Nko5c1hxeTJGOXE1VUc1WDFXdEJPRzgwMXB4SW5hNDFLSzZxY1MxcnR3eUJhQzZwMWhXNWFlSExsbWVCU1VLa0Y5ZFhLMlhheldsODlMRVFHelZVd3VhSGdzVUl6TlJaN3F2R3NRdlB5ZWJ1NmxsU0VNc2VDZG5JT2R5QlRxaEFnbjY4RjdZdVZJOVhWNVhvN1dVMmFlRGhSSHh6K1JLT2V4RDNEZDFReHZweTBMeDZ0VlpONit4MW5WdGpnQW5XbW5rMUM4eG1GOXF3MG1xc1ZjVk5aYnpiYWphaFJxenpPdHlDNkxtb21NZGhVZ3hyc3VxMkhOR3BlWG04M0trZTd6MEUrZldUNTFFTm5MckFDejdXYlFkUStmZ2tQRlhwNm9XZGtFRllyY2RBTzJwZlhrMVpGVUJ3ZVZyREF3UU04eE1qelFXMGpZZEZUbDdqVnIyTy9wSE80c24rWFFaeEl2VzRmbzVaQ3M3WEc2cm5HZWpXQytTcmE4SFFBTzl0WjExeFNqNEN5V0pDZnJhN1dnL1pHRTFyc3JOYmo1TGtrbHVvcHRFdWFzOUd1MWlvclZZR2xYZlZHZmJtZjZ2cHMxS05CTTFoTDJrbXp4VkRvQXl1VXl3Q3JEYkM4ZDJ2RDc0ZkkwMk9HTU9HWkpFMmFzQ29aeTQ4NTdqemJEcUozblF6V2hWSXFMYW4wVVpWZVVPbGpDcFhPTmphYVVYS2l5dHJPOGd3NnhPTExwSkd1MGsrVjZRSDZhWlYrcGt3djBzK1c2ZWZvSlpVK1hxYWZwMCtvOU1reWZZcGVWdW5UWlhxRmZrR2xYeXpUTDlFVmxhNldhWk5lTGRObjZPVXl2VWEvWEtiUDB1ZVkwYStVNmZQTTViUDBxM3o3Q1VpL2pML0ZreWNYNDFpbFh5dlRyOU52bE9rMzZiZVl3MityOUR0bCtsMzZna0lIejV4NDdFd1NKZFZMU2J3UVhtNG5MZDA1dUZHdEg2b2cySGZncjIzWXpzR1dRT0IrbFg2dlRMOVBmNkRTSDVicGoraTBTbDhzMHgvVG55aDA4OFYyZTMycFV0RmQ0NUJ1SHRJT0dkcVNaMXUyUXZzS1poY1RWeDdHNVd6U3ZGU05FbllKZFByVE12MFovYmx5NjRPTzVtbU9abW0yWVZxZXB0dU9ybW02WnJ1T3B1RkpHdHVoamVjYW50a1d2blZIQy9qZXdKZXArN3BqbXJycmF6YVBpNU1FdkREZU5IaTA2Zk0xTmRPa0s0TTVtU0JoS3MrMVhUZUNzR3Y4RXpKc3pYSk16VXNzeUVrOVhiY0U1OGgySWRIVTdjUk1vS0xvMWVFaTBXdEdhV3JGZGlSNkRjZVF2WjdudVZab0dMSTNER1J2R0RtUkhVYVNyK2tsc2pmV0xUM3lUVS8wZ3F2c1RWM1Q5Nk5BazcxdVJwc0dXcVRidXRUQjhrMVFoMTNmZG4zdWV3TStSMStVZWQ1MCtMK2h3YjZNT2tqN3FVMWJ4c2JyaXcxTGpDemJZWW53dnU1cG51WHBIQVVEMUV3cnZrMGVBOTY2NUIzRDlqVGhNV21xT3ozMG9JRVBETnRnTHVqWHU4OTgzWVpzVy9jem5qN3VQRk53MXV3UXJWeHpYV2R2WWFURzQ4Rk42L0JnMlduSzJ0cWEvT2VMRDlNeVg1MjF5YmhZSXBZWWJiSlVKN01DWEJoY2pLak1BLzBhTW1mZnlybmJXdTRWSDNiNVFHcFBQTUJ6S0I2NjU0MkloKzY2MjR5SEhhVjk4WEFLNGlIR2R1S2hCOGFJZUZoT091NVBTTjBXVlE5ZmMyaWVPOE05aGJod3Joa1hobUZ1Z1F0REM3ZUZDd05QcnhVWFRoY1hZN0JoT01rUU5vekE2Y1dHMDhXRzRkbEQyWFFBR1o1dTJxQjNvSmhBbFlaN0g1TFJJL1RnZTNCeVlWK0dIZUZUNEVPMzJlL3NYdzhmaVVyMlNyKytrVE5PWDY5SDN6anVwUzdRMXNpME5ZYTAxWVZ1aHVqUnV4SHlSRXQ0UlR4enJHN1c3K0Fjbkh2bE1xV01IYmR5R2lQc285RlljaDVIejVMeGhzY3RIdEVueFVTSEszbFlmZmI1RXBNQ1I1cjBQOGZjMG5MMENSejRtUVc4aHVHNTZSdlN2dDVaZzMvUTFiTk13ZDAzV0NmMkMrS0RPOThXZnZmTnVEY0RjVHc3Y1RMOTRIWGd5Z3oxOFhFYXdKU2VSOFRwMkxOVlJCSmpmRVJTNncxSHhOS2QvOGVJaFA3b2lLQzJHSXFJNVVSYzYyaEovMXpjeGp5MHZPSDRadHgwcTErdW53NVRCcDZnREhybER1WmxXR2NndTQzVXBRQWw4SkRJN3gzZlNaOXpDekowdEN6bXlwang0VXR1ZGNZYmN0N0wyaWIxeCtEUmtuSllyNjZjWEtyRjNLRy9JVllJcnRaNEpQdVZWMGJiOGh4WUpQS09YQlhCU0ZTWk1FemtJdFlSM2dSbUdCZlFrMmVOeGRtWDc1Z004ZWJLeGJJTnp2VkFBc2F3SkNERXlQeHUrN0dvMm5oTllaL2JMczhBSVkyMXNpMUdJYjROT2FzWVQ5a29SODRQWDh3dVRaTVk1SmJCcTFVSUcwWGxKWjVtYzFDdStUd1BtSWZISzVjaDR5VldOTUV0WC9PR3ZRbDduQ0ovWnI2VTBvVWZmY3RIRm1DME01ODB4VWhUZUV6UDhiNHRWSmhib3dLeEU1OHVIeEVSSTBNSHVzZWdZOUFhSVMrL2cwVTZlMGRZcFlzVlBrZUlJV0tZSThRY2lSQ2VHMllQUW15QkVGdVQ0KzBlaEdEMm9CclhCS2IwQVlRNFFkS0hFTWN6dDRFUUh2VkdFWUlZYm9XUVFveGdaK2E3Ulg3bHpKQWp4ZGVOckpvU0h1VzRpalpRNDBGYlY2SkdyUGlPdEZSUVdIMTV3TTdsOTlhSTJPMW9ZMUJtYmkvMzlHQks3MkRLTlkweG1BTG9pcXp2emhHN3o0b01PYTZkOVBQTmMyMGt2TVQ0S01JdmUwaGdRTlpGR21jZHoyVzVxQUIxbWRXdzV6VWs1NnhlOXJSczdaQWN3ZFBqMnArajQ0V2VpQjFvZmE2R1RaTzl5MjM1M0xlemNTYjRHeHhyU0hWRTlXME5lTXppWE9GemxXYnJMcWpSRXRtVTg2TG9SWS9KT3ZKSzVndmZKajc3WGVaUE9STUVKckVDR1lHc3hmTjZUcXhDWnA2bnhTN0ZsenNHcnU4NzFRUVVrdnNZK0ZtOE1iQmxaVGpFd2RYRzdWZmt0SkpZN0xNVTh6dGJDUXk1MG1mdkp1QzNETlY2RitGQ2xqbDJjOVM3a3lwY2Jmc2xhVVgxL1NBS1IyUnF1Y1ByMjQxN2dTNjlwbHZ5UHBhWTMrYmEyai9McFp6ZUtIVTFGL1BIeU4veWNLelptdDRxWTJCbXViTE9rQmlWTlNGWFlpS0t0c0JuUVgzQzg5M1hYUlNOcHBhNERsRGthcm9SNnpwVVJMWUpRbXlrc2RlelRRczB1aHVsbXBFa21tMGFFZkpJYk1WUmJKbWg3MnArVDNYamlCU1BYYkpzOFR1V25scXVVSGZyRFdRZDN4bTNQOUtLMTdJeFdjZjMvV3ZJT201aDF2RkUxc0dLbUxjbExqSFc3Y2t1VHBaZHZKN3Mwc2srdnBYckxpc21yamZBM3g2UlgzaW53VjVEMEVCdlozdHY2REtVV1FLNWMvd3lacGJBTklzemk2ZDNlSmllbm5QcHp4ZDVwYkM5ck5PcG5Yam11Mkl2SWJPTEtXek5zMHRubGcza0M0c3p3ZXZKT1ZsOW5lZVd3ZWo3SFAxaEpIZHJhc1lEcis2K00rUkRybjcxM0FZdnc3eW1aL2NXNGlYckdNT0xlYVlMKy9pTy9Sakl2Q0oza2ZLZG9nY0l3RDVEekVCK3kyWjRudWh4ZWVWeFV6c01kTTgzVFFzd0NKTTBBYVFjMHczc3dMU3NCRDdGMHVpNERqWStXbUFuVmhMNXB1UDZoaHVoQkVtU01IV3hXa1g0SlBqRTh1TnpydWVxTThNUm85MFg2T1hxbno5OWI1aEM4ZjUzMUJ1bTBJeTI5WWFKNjdScmZjTmtqMzYvMU1sZTl1QmVsQkVsa0tUNUJSV1dLZDhyaDZIN3Vpc2hmUnM1S1V6TWNYdTZISUVqZDNWQUZlY2xnUzlUWmh3NUhybUdzNFVKdE9Wcmh1M3hLd3RkaTR3c1I0aUkyc1A1WWRUNnQvVThLRnIvaE13TSswSVhYZXdpR0w4eVo3ZzUxbjJSenppcmNPVW01a2Vld1F4WjQ3bHBoT3BGczhMRWMxek5RZjBiUjVIbUdFNGFXbDZDWlNPMHpUQ0tvelNPa0p2RFdIUFMyQXF4d3ZtQkYwTmtHR08rK04yUHdIZTJFdldqWEs1K2hUaVBJbThMbkVlaHRpMmNSNm45NVgvRGpscEdvaHl6dGcvaG10ajd5TGJSMDdZS2ZuUENFMStUdTZrOHgzcEN2OTU5WC9iT21uZExWdEYrcS90dVNld0MyWDdzOFRxN3VoaVZpU3Z0enQ2T3d3djgyd1hYenZ3Y0pWMm1nYWJMZW9tZllNK2NQM1hsbXd0Qms2OVRvaC9yT0svbGRuZC8yTFBqQTQwYlp4aEhPN0RrTGwyMFBka3ZiUmV6d2VXeC9NNE5jak1KUWY0MlRwZnJoWWg1ekx2UE5NSENhenVHRytDZllXbzg2VFF6TkNJejROY3VsbU1aQnIvRThTSW5OTzNZTnRJa0FoanNWRXRTT3pVMVpGL0RzdEl3Y2dNcnR1QWNEVWtGRGxaSU9halNSOHYwRi9TWFpmb3IrbXVGYnVqKzh2dFFzeGxjNXA5L1ZYcWhUSDlEZjZ2UzM1WHA3K2tmeXZTUGZQT3hNdjBUL1hPWi9vWCtWYUc5Vy94Q1hLWi9vMzh2MDM4dy8vbVJ2ODN6ajV2L0NZS1I1eW9VMnRYOXJmOTArRXdTOVhmSm4vOFZlc3VXdjlVcjlLYitIN2NWdW5uRUlRdFl0YkIvaXhNWXUvcFBWeXpIQ3Uxc1hXNjFrN1ZqU1JwczFNRDZ4ajRHa29yUFB3UnRiaXUwdUREOGVIQkU3Nm1ObTBjOFVtaTIzVml1dDlvQld6alhKelhyeHVqcmh6b1ZLcmNieDljYjBjV1QxVnF0S283RVBBSzFpNDZWS0tTS3N4T25VMFJwNFpIOW84NmU5SVpFZUFOY0d4dXNsaHlCQUQrS1NMVVJyeVJZTzV4anJyOGJ3dGI1cmxabmMxWUdBeTlPMGN6V0d2WFY4L0k0UjdtUjlwcHhVMGUvQVJmTU50S082UTh1RkpCc0hZOUJDT3dkaW05dnROVFZKSXZ6TllnYVpIWlg5eEhQamFCZHlSK2VFTGR0amhETWUxUTA0VFp2b2Voc3pIZ3VqRS81VENHL1YyK0VjcjNSREdxWWpiTHhVQlFsclZham1iUHRQemcwVnlRZllidXRjSWFmT2ZIWVdVelVqUmFrWDhyT3VleGIyUDlrOFRtckRqWExHVHBzOUhEUXVxaFFxWFV4TVBPa2NQZG9aL1JydmI5WVh2SnVhTlNHang3YmFFQnd0VkhuY3poOEtPVDQwZVBMNTQ4ZmUrZng4OGRQblZOb1QwR0NPeTRPL3lBODAvSVlrRUxtdUlOT2hicmRNdW9FbGtKVDRVYTFoZ1IwMzhMSVkxclpJWksrODFGREI3bW1XdXUxS2dMLzlpSi9GUjVYbTRacnhLbXZ3bW42QkhJV1pzR3B6aG1tM2pOTHUvUFowM3ZlYVYrL1kwNXMxQ04yOTVta3ZkR3NIMHR5VDhhSjlLUlZvT2dnMHdJcE4wS3BBbzBtVzlYM0pDSUxMdU1LR2pacmVmK3dZVkJlYXRCN05FdWgwMFhhYkxFMERoMVdHenFHTmhIRU1jK0VRUk9HYkR4UGQ5SWhxaEQvVFpEQ3A2ZHdOWEJYd2JlQzc2a0RWMG41TkJvN3lNUjFXblRlU2hhdVpVbEFOam40bmlXWFBEbFlXUU96V2ZSOWFwTjJyTnl6U1JOWGFQSUtUVjJoNlUxU1Q3NUNNL2Rjb1ZsOEhieENwVTI2RGdTYlZFYlhKdTA4dGRnaFhKb0V5YUtrbkorVXBMaDkweWE5V1hadTBpN1oySDM5SnUzR294dXUwSTJpZjI3Q3lKN2N0RWszeTk1WDZKWk5ta2Q3OTU2bHFkZG83NFg1cWF0MDZ5YTlaV2xhV1ZKMzM3WTAwelh6RWRxTjYyMDBTYmZUSE4wQmcrK0VSL2JoMlZ2cEFYb2JuYUM3NlVsYW9KZ09VSXNPMHZ2dzlFUHczb2RCOFJFNDUwVTQ1U1c0NVpOd0NydnFLZWtPOG1rSjM1UDBjVHBNOThKWmMvUTgzVWYzQzZudkJlY0g0YmdIYUowZVF0OGtPTjFFUitnb1hQd2l6ZEF4T2c3M3Y0UzdFL1FWcElLM1FnL2o2UXg0TDBOajZmcjNZMXdKTWpidTJYMzdGYnJqMUFIWXZEUzVPR0d3Qis5OG5xYVVsMStqdXk1Y3BYMUxVd2NQWEtHM2J0TGJscWJSdUh0Sm5YQm01bWJtMVZmcDdRcTlRQWNXNTJZbW56Ym0xYm1aVjJsaEIzMmU5bS9TZ2FYWithbjUyVmZwbmgzMCtBZG5sQmUvOU1YWDZDQmNPVDk5bFJaZkZzYXhBdzJnZzJDc0NrTjN3c1JiWU5BZW1MVVBCaTNDRkJQR0hJRWhGMkJLaEhZVkJyQ2pVaWgvQVordnBCV1k1WUR1UGpvSkUyRVFuYUxUQXFnYjlDak1Wa1RyTWJSMlFFcWR6a0RhQkdSZHBMUG9tNFNrTTNTTzNnRjNMY0pONTlHYUJyY2o5RGhhS24wVlJ0OEJla2wxb1VOMW9VUDFCS2llQk5VaG12Z2YycVBTVXlwOTlaZG9MODJxOURWb2l2OVBpZXM3NVg4bzlOK3dXNkduQll5Qy93TlFTd01FRkFBQUNBZ0FUWnJhVHQzZHMxRlJBUUFBTEFJQUFERUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTVMbU5zWVhOemxWSEpTZ05CRUgwZFl4SmozRFVxdVhvd2lrNUFFVndJU2pBZ1JNRkVQT1RXbWFuRURwUHUyRDNqOGxtZUJBOStnQjhsVmtaUElxSU5WYStXMTYrcjZMZjNsMWNBdTFqSll3eUxXU3hsVVJUSUhDbXRvcXBBZXIxZHZtYW9tWUFFWmhwSzAwVTg2SkM5a3AyUUsvTU40OHZ3V2xvMXlyK0s2ZWhHT1lIQ21kWmthNkYwampqZGFpampEVU1aZFkwZDdIa0JEWXpuZks5SnR6RzVxRzdzWld3aUdTbWozZHIrb1VEcW9TSWcyZ0lUTGRYVE1vb3RTeDgzak8xNTk5VFo2WHV5bzd5cnh5RTFxVXVXdEU5SDM1cUJaRDBtT084a0NDdzVkMWhsM1h6THhOYW51aHFOdXZyVDg5dDllU2Q1MjFQdGg4WXAzVHVuNk1ZRVdTd1hrTWE0d09ZL05oRW8vVEt5UVBuUFdxZ2d4WjgwT29LTkoySE1jSFRBOVJSalpxUDBEUEhFVVFyWlVaN3c2c2l4TDM0eU1JSEpSQ0dEQXFhNG44WjB3cC9CYklKem1FKzBGOWpuRXhQSlRTRDNBVkJMQXdRVUFBQUlDQUJObXRwT0UvU2J4bUVCQUFCV0FnQUFSd0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrVTNSdmNtVmtSR0YwWVVOb1lXNW5aV1JGZG1WdWRGSmxjM0J2Ym5ObExtTnNZWE56cFZHNVRnTXhFSDBPUjBJSTk5MGdnU2lBQWhjZ0doQVNCSkNRVmlBUmxON1pIVGFPdkhia2RjTC84QWRVU0JSOEFCK0ZtRjNTMEVCQjRUZUhuMmZlakQ4KzM5NEJIR0dqampFc1Y3RmF4WnJBbUhHcHdFSGtmQ3FmcUhQWWszM3Znb3Vka2JIekpETUtYWmZrMGxQZWR6WW5HYm4wUktEbVROSldaa0FDcTFGUERaWE1WT2pLQzUzZTJFQXArWUpqNlduRW1UelZWb2N6YnJlNzF4WVliN3FFczNPUnRuUTd5RHJrSDFUSGNHWXhjckV5YmVWMUVZK1M0NkdyYzRITlZtQkJ5YVVLcXRsVk5xWGtha2cyM0krRUNUUnVyQ1hmTkNyUGlmbk5TRHZaTnlvOE9wOGR5NFF5Si9OWXRuVFdOMVRVVWludC9GNlRoNmkzM01ESGRLMUxlVDhlSHhSek56Q0ZlaFhyQXVmL2JpY3dYNjdTOEpXODYvUW9EZ0xiZjVmRkZpcjhwK0REMjhJRWU3eHlWRXRiRzFsUkNHV2M1a2lXTVRDeC93cnh3azRGRGNiSk12bU1HY2JHTndHeldDanZGMHRjd2p6Ym9rd0ZLNWpEMUJkUVN3TUVGQUFBQ0FnQVRacmFUaENmek05UkFRQUFMQUlBQURFQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRMExtTnNZWE56bFZISlNnTkJFSDBkWXphajBhaFJ5ZFdEQ3pvQmd3Y1RnaG9VaENpNDRNRmJaNmFNSFNiZHNYdkc1Yk04Q1I3OEFEOUtySXllUkVRYnFsNHRyMTlYMFcvdkw2OEE2bGdzWUF4eldjeG5VUkhJTkpWV1VVc2d2WEsxZXNuUU5nRUpsRHBLMDBrODZKSzlrTjJRSytXTzhXVjRLYTBhNVYvRmRIU2puRUR4U0d1eTdWQTZSNXh1ZEpUeGhxR01ybzBkYkhzQkRZem5mTytNYm1OeTBhR3hwN0dKWktTTWRzdjFoa0Rxb1NZZ3JnVHk1NnFuWlJSYmx0N3RHTnZ6N3FtNzFmZGtWM2tYajBNNm8ydXlwSDFxZm1zR2t2V1k0THk5SUxEa1hLUEZ1b1Z6RTF1ZkR0Vm8xS1dmbnQvc3l6dkoyeDVvUHpSTzZkNHhSVGNteUdLaGlEVEdCZGIvc1lsQTlaZVJCVmIvcklVYVV2eEpveVBZZUJMR0RFYzdYRTh4WnRhcXp4QlBIS1dRSGVVSmJ4ODU5cFZQQnZLWVNCUXlLR0tTKzJsTUpmd1NwaE9jUVRuUm5tVmZTRXdrTjRIY0IxQkxBd1FVQUFBSUNBQk5tdHBPY1p0SmtOSURBQUE3Q1FBQUtnQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtOUzVqYkdGemM2MVY3M1BiUkJCOUY5dFI3YWl0Q1VrS3BiU2xOYW5qL0xpVXRJV1NFSEFkcHcxVkhJaU5TNEFaUnBHdXNvSXNHZW1jcEg4TVg1bmhXMkZvUzJHRzZXZitLSVk5MmNTME1jUVphbzFQMHQ3dXU3ZDdlMDkvL1Bucjd3Q3U0YXMwWHNGQ0JxTzRsc1pWWE0vUWNFUER1eG1rbENXRjl6TEk0ZVlJM3NlaWhxVVJaUENCaG1VMTg2RWFQdEpRekJERUxRMGxEU3NheWd6RHN1Rkd1WG1Hbk9FR3ZPV1o4bjRRTm05d1d6UURIbG04NmpaYm5xaktJRFFkc1VqK1M2N3Z5bVdHSy9sQkFxYnFETWxTWUF1RzA0YnJpMHE3dVMzQ21ybnRrV1hVQ0N6VHE1dWhxOTY3eHFRaXhLQ3YrYjRJUzU0WlJZSmVKd2RZTEhlZCtLWE1Wc3Q3d0hCZUdZVzlZa3F6MURCOVI5amxYZUhMVFJHMUFqK2lkYUs4RVlRTzN4UGJDenU4RlFZeXNBS1BXeFRFbTBJMkFqdmlZZGVaRzRHek9EVUlnLzllbE9nbHZNQmhtRHZlMGd3alF1SFVUYTh0SWcyM3FYVGxudUdlS3h1R2dpMzhBMWJ1ODFMZ3k5QzBaTzZ3TDBHZWxBOWF3dTdWby9SUzhwdk1HenZtcnNrOW11VWIyenZDa2xTNVF5YUdUSG5mRWkzcFVweUdPd3pwcXV2NHBteUhST1g3d3dHS1hDZ29HWGRYN1BQN2JkK0tRL2xxOTJucGVCVjlDYmt1cXlTcVFUdTB4S29iZC9OejRYTXFCV3I2c205NVFlVDZ6bnJNUThPYWpvOXhWOGNZeG5WTXdOQ3hqb3FPRFh6Q1VQemZ0SFM4aFVzNlBzV21ocXFPR2o1ak9OY3JqYm50Y3B0QzFkNUh2RWFqampydU1ZekZGVythc3NGdnVjNmFMNFVqUWgyZlkwdkhGOWhpbURsT2ZYV2N4MFdTbEVIT0xFUDJ4ZDFtdUhERWRtdjRraUUvYUxjenZOcGI0cUR2R0M0ZHpZK0VKT3BiOEZVdjJPc0lsakdJa0h4TGJDUXZ5d2IxaWhSaFIwMTZHZjZOcGhRaXJ6VHpUTFcyc1ZsZVdTbldpcVU3eGNydDhzclg1WHE1VXFQU0dQKzJuVEV2MVpXbVpZbUlSSDJlWlAyN2dXVDZDTXpqS3VVeFpDanJDTG5tMjJKZjJKMHBPa2o1cm1LMHBldHh3NDFVVXFlZXQxQ2RLSkJoUEwvV1YxNU8wR3lNUjYyZDcrOFJlSGJYWThMbzEvM0t4eGQ3WFoveHZqbmhJbjFPUjBFTkJwYk5xak5OSCtvRS9TZHdocXl2MGRNeWh1Z0NNb1hwUjJDRkp4ajZrZDZHOERxTncrUURPRGdiUjhSZWVBTnZBdkdUUW1OMDBWbnFZdjFBMkVtNnJ4ZCtCdnNKaWVsZmtGei9EYW10SnhpdXpCSytOanZ6R0NjU1Q1RWV3ak5rbm1LRTBWMS9oSlB4UlBMd3hLblpod2QwemhJaFlBYzZ2cUhGUGJJMThRNTgzRVVRVXl4MEZqK2d1SzdFaHFqcEtPSXlKZ2xsRERkeEJYa2tza1dpUFVVV1JYdWhXNEowWWZvWlRqOUc5bUhmQ3VqeGM3b0xYNkIva2l6VE5NN0Uvck9ZaSs4YzgvSGNWU0ozTHFhZG9GM28vRkprdlVBWU9hemliYVQvQWxCTEF3UVVBQUFJQ0FCTm10cE9DSzBhVEVjQUFBQk1BQUFBU2dBQUFFMUZWRUV0U1U1R0wyMWhkbVZ1TDJOdmJTNWhiV0ZzZEc4dWNHeGhkR1p2Y20wMkwyUmxiVzh0WVhCd0xYTnRZWEowTFdOdmJuUnlZV04wTDNCdmJTNXdjbTl3WlhKMGFXVnpEY25CRFlBZ0RBWFFPN3RBOU9LTkFSeWpLV0JJS0w4cDFmbmwrdDVYYlhYTWZLWWpQSVpYNzVJWmtraG9PSklPOGdhVEs1QjViOFMrdjFSQkpOVzRaR3RrVExjOTRRZFFTd01FRkFBQUNBZ0FUWnJhVGh6K3p0eWdBUUFBNXdJQUFESUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXlNQzVqYkdGemM1VlNRVThVTVJUK3Vndzc3RHJLaW9naWFqeHcyQVd6UlRSY0lIdGdJNGxtTlJISVhqaDFaeDVEeVd5N3RoME5QNHNETWZIZ0QvQkhHZCtNSG93eEJ0SzA3NzMyKzE2L3IrbjNIMSsvQVhpRnB5M01ZYVdOQ0E5aVBJeXhLdEFNWjlxdmJ3bHNqclNWczBLRlUrdW1PektqcVpVK2xZZjBzU1FmRHF6N1VOcWdncmJHN3pKdFR4c2RCZ0w5N2cxNHZiRkFOTFFaQ1N5T3RLSDM1WFJDN2xoTkN0NVpHdGxVRldQbGRGWC8zb3dxZVFMSkcyUElEUXZsUFhIWnYvNmQ2OXRiTExkMXBIT2pRdW00NWR1UmRibjhUSk9YNTFKTnREeSttTkVoblpJams5TGVYNGVaNGo0TThESW5WcUFDWlhML0lwQi9zYk03NE1idEkxdTZsQTUwSlhiMVh3TDY1K3FUWXIrdlRWcFlyMDMranNLWnpXSThTckNHeHdubTBVd1E0NG5BODV1NEVsajdqdytCM3JXYkNTemtGS3FhYWQzdXlYN3ZqMGVZT1J0c2FndVpXa2RNbnpKcXFJcUN2YzkxZTJNODR4OFY4ZWNTblU3bHBNcDR4bGpnMk9Kc2dBWVBvTDJ4ZVFXeDhRV05TNjRhYVBQYXJMRVd0M2hkK1lWQ2dqdEFuYzNYNXhFV2Ezd0hkK3U0aEhzY0l5empQbTdYT0JaU00vQVRVRXNEQkJRQUFBZ0lBRTJhMms2V1Vpd1pUZ1FBQUZRS0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNamN1WTJ4aGMzT3RWbHR6MjBRVS9qYXhvOWhSVzlOY1drSWdYRUp3bkl0Q0FnMlFFc2hGRGdiRklaZTZsRUtMTEc5c0JWbHlwSFdhUHZQR0k4OU1uM2poclRDa3BUREQ5Smsvd2d4MytBRU1aMlVUMDhTZHhqT3hyTlh1K2M1K2U4N1IyYlA2OFovdmZnRHdFc294bk1PcmNaekhhekhNWURaT3pVVUZyOGNSbFpJbzV1Skk0WTB1dklsNUJRdGRpR05Sd1pKRWRJbWtGU3pMd1Z1eXlTaDRXejdma1kyaFlDVk81RmtGcXdyZVZiREcwQ0ZLZGpBMHlUQnEySjVXY1V5eDVmbmxDMXFCbHowdHNMUjF2bFBsZ1VoNy9sclZFNmF3UFRlWXBXa1hiZGNXY3d3VHlSYm1qZVFZSW90ZWdUT2NNV3lYWjZ2bFBQYzN6YnhEa3JPR1o1bE96dlJ0T2E0TEk5SThCalhqdXR4ZmRNd2c0RFNjT1A2YVExTXpaRzdVckZTY213ejlFdURyM09MMkxpL291OXdWNnp5b2tCNnR0WnMwUEwrbzNlRDU2VzJ0NG52Q3N6eEhzenlmYTJVdVNsNGgwUHk2c21aNHhkbVJGcXg0K0xwa1hidmpGYVZUTGEzTzBNVWxUODUwYURrRkd4UkJ2U0c0Ykl1U0lXbFQvNk1WZTlxaTV3cmZ0TVRRVVYyaVBDVnVWbmloRVpMMFNiazRuRFMyelYxVGMweTNxSzNtdDdrbEtINUhSQXh4ZmMvaWxaQlJ3U1pEYk1NdXVxYW8rbVRObDBjblNQdDhUdjdRb252YVZ0VzF3cWxhdXQ2NzJGcFFUOGJkT2VuSGhsZjFMWjYyWlJZLzNveGhRanBERzBGM0xjY0xiTGU0RWxxazRKS0tIQzZyNk1jVEtnYndub29yZUYvRlZYekFzSFFTQnFwNEFVa1ZIK0thZ3VzcVBnS1pNZENJazVtM3RZSkpOSlFMZ2JaSnJZbzhMSVpFSS93YndpZUxWUlJBNEJhdU1iUmRYVkJSeExLS0VwWVpla0xkc2lsSzJvSmR6TGlDRjdtdndzYTJpbzlCTVJscjVjV29HTUl3eldsbDJ6OWdieTFkR0FZZmtTOEtISWJrY1hjTVEzZGppWVBFWlJnNXRwMVVrbmFPdktlMDQ5Mm9sVC9qT0NVcFpOVjBVYUprRTl5djFhV0drLyt4eVVLVGxCVzRlKzNTNnFhK3JpL3FtWnkrZEYzUDZWbmFhSVBHd3pJZ3RFbW10R2xaUEFpR3BpZnB1UGlpbGJyL0NPcFd5MjRMQlMxUjVDTGpGdmdlTDlRZ3FwTEpldUdwQ3R2UkREdVF2cDErVUVLaG9va012Y2xNMHlyVlNXaklSNG1lYks0UlZPbklzYmt2RDdiRCs0YndibUxJZXU0aDI2TCsxazZtd0tDRVNTRjduWFlRVkhsaG5venBNNXJ0S2ZsYXEzbksydDZtWWNIVGRPQ2ZCOVVnc0VSQzFoVDZ5R2luZXdCUGt2UXA2czJoalM0Z25ocmRCMHZkUmR0WE5HckRJTFVkcEFQOFJDeEFYMDBMeitBNUlPeEpOa1lYYmM0YUYrc2c3Z2hodDFMZmdIMk45dEZ2RVZuNUh0RXJkOUdSSFNkK1pYenNEanJiN3lIV2h2dUkzME1YbzZlNmoxTVNPSDBZT0VQL2ZTUkNMTklVZXl6RW9vZXdzL3ZvRG9HT295djFqTjgrOEc4WU1XcC9ob3BmMElOZktVcS9ZUXEvSTRzL3NJMC84UW4rd3VmNE8vUS9WZlBzd1A5YnNveVMzeW8rd3dqR2lMRUhuMkljRTJoUHpGTk1OSkxJK0U3WDR4dExqZDVIN3gzMDNXNGFYalhzeCtyMGszUkhTUElpdFZPaC9qUjlHOHJueTdnUVlqTjRCYzlTcjU5Q2ZnNjFYNVNrenhOSEN1c1lSZXhmVUVzREJCUUFBQWdJQUUyYTJrNmFTNDNKbVFFQUFOMENBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpFdVkyeGhjM09WVXRGT0UwRVVQVk9XTHEyclZGUVFVY01ERHkyWWpncnhCZEtvalNRbWxVUWdmZUZwdW5zcFE3WXpkV1pXdzJmeFFFaDg4QVA4S01QZDFRZGppSUZNWnU2OWM4KzVjMDR5UDM5OS93RmdDODhibU1GaUV4R1dZanlPc1N4UUR5ZmFyNzBVMkJob0s2ZTVDc2ZXVGQ3SWpDWlcrbFR1MDVlQ2ZOaTE3bk5oZ3dyYUdyL050QjF0ZE9nSmROdTM0SFdHQWxIZlppUXdQOUNHOW9ySmlOeWhHdVY4c3pDd3FjcUh5dW15L25NWmxmSUVrby9Ha092bnludmlzbnZ6TjlkZXYySzVqUU05TmlvVWprZStIVmczbHQ5b3RIa3ExVWpMdzdNcDdkTXhPVElwN2Z6VHpCVFBZWUNYNzdMTWtmZmJQUjdYUExDRlMybFhseEtYcjN1MmU2cStLbmI1d2FTNTlkcU1QMUU0c1ZtTUp3bFc4RFRCTE9vSllqd1RlSEViTHdJci8xRXYwTG54TUlHNU1ZV3labHE3ZmZTKzg1ZjFxYlBCcGphWHFYWEU5QW1qK2lyUDJmdE11elBFS3YramlMK1VhTFZLSjJYR084WWN4d1puUGRSNEFjMzFqUXVJOVV2VXpybXFvY2xudmNKYTNPRno4VGNLQ2U0QlZUWmI5U1BNVi9nVzdsZHhBUTg0Um5pSVI3aGI0VmhJeGNBVlVFc0RCQlFBQUFnSUFFMmEyazY2b2tRZWt3RUFBTFFDQUFBcUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VTJsdGNHeGxVM1J2Y21GblpTUTBMbU5zWVhOempWSkxieE14RVA2Y2JMTk5XR2dvVUI0RlZGVlJTVm9KSS9xNHRNb2xBZ2tVT0RSdDdzN3VkT3ZLc1NPdkErclA2cUdxeEtFL2dCOVZkYkwwQUJ3Z3Nqd3ZmelB6alRVL2IzNWNBOWpCNnpxcVdHa2d3dE1ZejJJOEY2aUZVMTIwM2dtMCt0ckppVkhoeFBueG5zeG83R1NSeW9FZVR3d05ndk1xcDMzR0gyaXJRMWZnVFh1ZWhNNVFJT3E1akFTVyt0clMxK2w0UlA1SWpReEhsdnN1Vldhb3ZKNzVkOEZvUmtnZytXUXQrWjVSUlVIc2JzelJyTFhEL09vRG5Wc1ZwcDVMZmU0N244dnZOTm8razJxazVkSDVoQTdwaER6WmxBNytlc3hVVUlFQmhjeUpPNnRBbVR6V05yemYzZHZ2Y3VIR3dFMTlTaDkxeWZ5UHhtL1AxRGZGQTM2d3FYR0Z0dmtYQ3FjdWkvRWl3U3BlSmxoQUxVR01WL3pMODR3aHNQb1A0Z0xyL3k4aVVNMHA4TCsxTzcvTk9mRXV1TlFabVRwUDhwQVRBL1dVTVR4ZXRkMFpZbzNYSStKTkVjM21qUFBNNGh0amtYV2RyUzRxZklERzV0WWx4T1lWS2hmc1ZkQmdXU3V4eDdqSGN1VVhDZ2tlQUtXMVVMNUhXQ3J4VFR3czlUSWVzWTd3R0U5d3Y4UXhrVElEdDFCTEF3UVVBQUFJQ0FCTm10cE9BVFQxdXBjQkFBQzdBZ0FBS2dBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVa015NWpiR0Z6YzQxU1FVOVRRUkQrdGp6NmJIMUtSVUFGTWNZMDJtTGlHbEF1a0Y0cUpKREtnV0x2Mi9lR3g1THRick52Qy9GbmNTQW1IdmdCL2lqajlNbEJQR2l6MloyWjNXOW12bTh6UDM1K3Z3SHdBUzlxbU1OS0hSR2V4SGdhNDVsQU5aenBvdmxlb05uVFRvNk5DcWZPajdabFJpTW5pMVQyOVdoc3FCK2NWem50TUg1WFd4MDZBbTlhc3lTMEJ3SlIxMlVrc05EVGxvNG1veUg1RXpVMGZMUFljNmt5QStYMU5MNjlqS2FFQkpJRGE4bDNqU29LNHZEMURNMmFXOHl2MXRlNVZXSGl1ZFJoei9sY1h0Snc2MXlxb1pZblg4ZDBUS2ZreWFhMCs5ZGpwb0lLRENoa1R0eFpCY3JrRjIzRDVzZnRuUTRYcnZmZHhLZTByMHZtZHhxL08xY1hpZ1h1MmRTNFF0djhNNFV6bDhWWVRiQ0c1d25tVVUwUVk1MS9lUllaQW12L0lDN3c2djlGbUcvQkhtV2ZXQlovWDZ2OWg5eXhkOEdsenNpVUVmS1k4d04xbFRHc2NxN1ZIdUFsVDBuRUF5TWFqU24xcWNjN3hqMjJOZlk2cVBBQzZodHZyeUUydnFGeXhWRUZkVDZySlhZZjkvbGMrWTFDZ29kQTZjMlg3eEVXU253RGowcTdpTWRzSXl4aEdROUtIQk1wTS9BTFVFc0RCQlFBQUFnSUFFMmEyazZkOXV1Qkx3UUFBQmtLQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qZ3VZMnhoYzNPdFZtMVRHMVVVZmk0a0xBbExHOTZscmJaV3JDRzhMRkxFS29qeWttaDBTZVZGYW0yMWJuWXZ5VExMM3JCN1ErR3owMy9pakYrckk2MjFNMDQvKzAvOEU0N25iaUt4a0U3SjJDUjdYODQ1OTduUE9YdnV1Zm56NzkvL0FEQ0RuUVFHY1NPSklYeVF3Q3crVEZJenAyRStpYmlTeFBGUkVxTlk2TUxIK0VURFloZVNXTkt3ckRRclNwUFZrRk9UVDFYem1ZYTg2ai9YOEVXU2NFME5xeG9LR200eWRNaXlHNDVNTVl5WnJqQXFuaVczUmJBN2F6aDhWeGloYmF6enZTb1BaVTRFYTFVaExla0tQNXlqWmZPdTc4b0Zoc2wwQyt0R3R4aGl5OExoRE9kTjErZUY2bTZSQjV0VzBTTkpyeWxzeTl1eUFsZk42OEtZb3NlZzUzMmZCOHVlRllhY3BwTm4zM05rK2diUmpWdVZpbmZJOE5wNmJtMkYyeDd0N1dUM3VTL1hlVmdoSzlwSnBrMFJsSXo3dkhoOXg2Z0VRZ3BiZUlZdEFtN3NjbGtXVG1nRWRXUERGS1c1MFJZNHZHaFhZdGJ1aVpKeXFLVzlHYnE0d3RteVBOcE13eHBGTDlzUTNISmwyVlN3bWYvQXlnTmpXZmd5c0d3NWN0cVdJTHZsWVlVN2pZQ3N2Qm9IcjZYTkhXdmZNanpMTHhrM2l6dmNsaFM3VXlLR1pQYkE1cFVJVDhNNlEyTERMZm1XckFiRTVhZlRDeFM3Z0pNMzdqNC9NTGFydmgwdE5YTDEwWHhySVgwVnppNG9MelpFTmJCNXpsWFpPOXhzL2FSeWhRNUExcmM5RWJwK2FUWGlvMkZEeHlhKzBqR01Dem91WWt2SExYeXQ0emErWVZqNi8vUjBYTU03T3U3Z3JvWnZkWHlIZXd5WEdqR3lpcTdoV0FSQ1dSQWFtOVRxK0I1RU5OVUkvWVlNaUsrT0ltd2REdTR5dE4xWjBzR1IwN0dOSEVOL1pMdHJ5Ykt4NUpieXZ1UWxIdWdvb2N3dzNzcjcwUEVXM3FZMXJaeno1NmpXc29UaDhrdlNSSVBMa0Q3ck1XSG9hMnh4bks4TW8yZm1TVFVvT1BHQ2NwNjRYNnQyNWxscVVJUnBaR1daY2t6eW9GYUlHaTcraTZacVMxb1YzQjZWRU5sbE0xL0lydHpMYm1VTG14UVY4MFV2UG1Lazh0aXliUjZHSXpOVGREZjgyRXFSZndsMHExVzJoUXFXS25HWjl4MSt3SjJhaXNwaXVsNXJxdEwxRE5NTmxXL25ucGRRb0dnaHcwQTYzN1F3ZFpJMndxUDhUamUzQ0t0MHY3ZzhVTGZZeWVOQytqNUNLQWovQkxkNHNMMlhkeGkwUFFvZVY2Tk9Od3lyM0Zra01vTm1zNk5FV0FOTkE0SXJkSzhQZ2JJTExKVlNKWVQrUnJUVGN4R1hTUG82alJiUVJsOGdtUms3QXNzOFJ0dlBOR3ZERzlSMmtBMVlOeTdUZUxCbVJZaFhnV2lrMEJoOTZValdzZjRpN0JqMUR6Sy9ndjJDOXJIZkVGdDlpdmp0eCtnb1RCQytOakgrQ0ozdFQ1Qm93ek1rbjZDTFVhOGZvVnNwenAxVW5LZmZFVktSTHRaVTF4UHA0aWQwdlVmb20zaDQ3TVpWZEpJYktlaXNCLzJzRjhPc0Q5T3NId1UyZ0IwMmlCL1lVT1JpcGtiKzJNVUhxalNTYXpvT2tjWVlvZlZqRCtPWVFIdHFrZHllSklseSszbzloSW5NMkRQMFA4TEF3NllSMU5VWWlUcThRVStNSkZQVXZodlpUeE9RNm1md1hxU2J4ZnQ0azBZWEtLcURxSDNpSkIwaGpGRjhTWFFUL3dCUVN3TUVGQUFBQ0FnQVRacmFUbWpCajV1UUFRQUFuQUlBQUVnQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lSU1JsRkVaV05zYVc1bFpFVjJaVzUwVW1WemNHOXVjMlV1WTJ4aGMzT2xVazFyRkVFUWZiMUpkamJyYXI0MEpuNGNCQThtaC9RaHdZc2l1SWtMQzRPU2plUWlDTDB6bGRsZWVycG51M3ZpNy9JVThPQVA4RWVKTlpNRkx3cUNsM3BkSDYvcVZkRS9mbjc3RHVBRVQvdFl3VjZDUndrZUM2d1lWd2djcGM0WDhndE5qK2V5OGk2NnpCbVpPVSt5cERoemVaQ2VRdVZzSUptNjRwVkFMOVJWWlRSNWdlMTBycTZWTk1vVzhpSjZiWnY4bXI5YWpIT0J6cWVoUUxLb1hhVEc3ZWtRYXNyZlJvSGRXMXFwNGt3T2RURzJrUXJ5VE8yKzFsYkhOeXp0eGNHbHdPcXB5MGxnSTlXVzN0ZmxsUHhITlRYVXpIV1pNcGZLNjhaZkJsZmpUQWVCdmNuby9Jd3l3NXo4M1RYWk9GbktGeGlNclNWL2FsUUl4SlZucVhheU1pcGVPVisrbERtVlRvWk1UbWhSVTRnajU4OVp1NHFheWMvLzFwUkY5eTljN1RNYTZVYkUvcC9ZUjgyNkE5ekZ2UVJQQkliL1AxWmc4L2ZsUDB6bmxQRlpELzY1TDU2aHd6OEJXQVBmalMwWXUwaGE3R0c5eGY0UzcyRFFvbWdXWUx2Qm5teDk1aC9lUUh6bFJ3ZWJiTHROVUh6R0ZyOEh0d1hZeG9NMnY5dmFoN2pQMk9kY0Ivdll3Zm92VUVzREJCUUFBQWdJQUUyYTJrNTRyNktYbkFFQUFPSUNBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpVdVkyeGhjM09WVXRGT0ZERVVQVjJHSFhZZFpVVkJFVFUrRUxNTFptc0VmWUZzMUkwa0pxdUpRUGE5TzNOWlNtYmJwZTFBK0NyQ0F6SHh3US93bzR4M1JoNk1NUWJTdFBmZTl0elRjNXIrK1BudE80Qk5QRzFnQmt0TlJIZ1E0MkdNWllGNk9OUis5YVhBK2tCYk9jMVZPTEJ1OGtabU5MSFNwM0tYamd2eVljZTZMNFVOS21oci9CYTNiV3VqUTArZzI3NUJYMmNvRVBWdFJnTHpBMjNvY3pFWmtkdFhvNXgzRmdZMlZmbFFPVjNXVjV0UktVOGcrV2dNdVg2dXZDY3V1OWUvYy9YVmE1YmIyTk5qbzBMaG1QTHR3THF4UEtYUnhwRlVJeTMzejZhMFN3Zmt5S1MwL2RkaHBwaUhBVjYreXpKSDNtLzFtSzY1Wnd1WDBvNHVKUzcvNjlydWtUcFI3UEtEU1hQcnRSbC9vbkJvc3hpUEVxemdjWUpaMUJQRWVDTHc0aVplQkZiK28xNmdjMjB5RmplbThMNDRJM2RsVGVCNXUvT0gvNm16d2FZMmw2bDF4QndURzZpdjhwd2ZZS2JkR2VJWmY2YUkvNVZvdFVvN1pjWXp4aHpIQm1jOTFIZ0F6YlgxUzRpMXI2aGRjRlZEazlkNmhUM0hMVjZYZnFPUTRBNVFaYlBWZVlUNUN0L0MzU291NEI3SENQZXhpTnNWam9WVUhmZ0ZVRXNEQkJRQUFBZ0lBRTJhMms3bmZBWmNSZ0VBQUNFQ0FBQXhBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtOaTVqYkdGemM1VlJTMDhDTVJDZThnWlJGQitKOGVwQk5GcU5oZ3VFQTBRU3pXb2lFTzVsZDRDU3BjVzJxK0ZuZVRMeDRBL3dSeGxuVjAvR0dKMWtYbCtuWDc5SjM5NWZYZ0hnQW5aS2tJWnFIamJ6c01VZzE1Ukt1aGFEOUVGdHlDRFQwUUV5cUhoUzRXMDBINkVaaUZGSVNOWFR2Z2lId3NpNC93SXpiaW90Zy9LVlVtZzZvYkFXcVQzMnBPYUxVTGl4TnZNNkQzQ3V1ZlY1RCs4anRLNnJ6VjJrblhCU0s3dGZiekFvOXVWRUNSY1pZcnoydEpud1J4eWR6N2dZU1Q1WUxyQ0hZelNvZkd4K093d0UwZENBNVJNa0FjSmh3TnRMaC9hczNtZ1JjYW12SStOalY4WmFkMzk2LzJRbUhnU3RlNm44VUZ1cEpqZm9wanJJdzNZWk1wQmxjUFNQVlJqcy9TS2VRZTNQWEhBS0tmcWsyQmc1S2FHY280cFRqcEhzNFRPd0p5cFNrS2VZUzhBMkZDaVdQd2VnQ0N2SjFYSXl0UXByU2E3QWVvSnVVQ3dsemdpTnJmQUJVRXNEQkJRQUFBZ0lBRTJhMms3S0l5cG1QZ01BQUpNSEFBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNVFl1WTJ4aGMzTzlWZXRPRTBFVS9xWVVWc3FLVlJIdkNvamFDN0lvaXBkV1ZDclZrbnJGa0JoLzZIUTdMRXUyTzNWM0Z2VkZmQUlmUUJQdkpzYmZQcFR4ek5MSXhRcVlHTk4wWithYmM3N3puVE5uWjcvLytQd1Z3RmxVdXJFZHAvUmpOSVZlV0Nua01XYmdkQS9PWU56QTJSNFlPR2Rnd3NENUZEcHhJVVdXRncxY01sQXdVR1F3bDdnM1BCLzV0bktsenpCVWxZRmpQUk8xOFVXTDExeXJ6aFZYTDVvaXRNb3Rtd0pEbDFwd3crRXhobnpWbFZiVDQycGVCbzBKcXk0YTBncHQ2NzU0R29sUWxXVndMNUxrVDE2aGRpdTZ2cXNtR2U1bS9zSnZjMEhaT1laa1NkWUZ3NDZxNjR2YlVhTW1nZ2U4NWhHeXF5cHQ3czN4d05YckZwalVDVkR1RmQ4WFFjbmpZU2hvT2JwMVZjT25KeWloSkRGN0RNY3oyVlVpVmRUMFNKMGppSm9yVWJjZWFHQ2N6STFBaEpHbktGSzZ1c2lYdUJVcDE3T3FicWhvczMrdFRzcXdwWFZzblczeGp3WFJUb1ZKNGtwTlA3ZEZNeFpxNERKRDk2enIrRnhGQWRHSnJZZ3RMc2RzY0xWZ1RibE94VmZDRVVGaEdmVzQ3MWl6S25COXA5RGVUbXZvb3pncjVuZHFpOExXYWI3OEhWeVZueTE5T3dvQzRTdXJSS1hWQlNqK0I3Vnh6V1psRk5paTdPcWE3MjkzNXFQYW0xcHMycmM5R1JMZkxhRVdaTjNBcElrcnVHcGlGM2FiU0dPbmlUNWNNekdGRXNQZ3B1b05YRGN4alRMRG9ZME8xc1FObktDeXRrdUJHbXA5cmxyRFRST0hjSmhoNUcvYWVnM1g4Z2t4SE43d2lCaDJyN2o4YWoyRzdKYmowdDNnQ0hXL2ZJOGhrM2swdGJwRG00RlUwcFk2Y0NESXVTR1YwSUhweURveStzMVBjZHNXSVYxSFkzUWhQZjdITjh2djcybnZXb1JVa0hLR1BabEsyMzdmUnJ0ejNJdW9TQmN6ZityOWpaSHNIQWJvMHU0RjlSNFM2YlJ1TVlCRzZqZjZCSFRRdnc5N2FMZWZaaVVrWW1SSEx2OE9MRGZ5RG9uY0IzUzhJU2lCdmZUc0lrUGdDZmJSczU4d01zVitIQVRpbWFaazlLTytJUnBOK0lvOHROVk03aTN4dlVYaUk1TFZMK2g4bU8vNGhLNEV2c0g0aEcyTXh1NThjaDJTeW5ldXQvbUFudGV4YUszbEFIRUROa3pVS2JMQU1PWXhBUWNWV3Evb20ybnBNekdKSXpoSzZnYmlGV3NoZ3pRYklpUko0ekhpMEprZVQxK2pIRTdRVE9kZ3hUa0JuYm4zTUYrM0xZVzViTkFLdFVLWGJCR2VSQ1llczhqRmUzbU1rSHdnUlZiYjQrTGhKMUJMQXdRVUFBQUlDQUJObXRwT20xZkhtRUlCQUFBYUFnQUFNUUFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKRE11WTJ4aGMzT1ZVVXRMQXpFUW52UzFiVjJ0MWdlSVZ3OVcwUWdWRVZwNktSYUVWYkN0dmFlNzA1cXlUV3FTVmZ4Wm5nUVAvZ0IvbERpN2VoSVJIWmpYTnpOZlpzamIrOHNyQUp6QVZoWHlVUGRnM1lNTkJxVzJWTkoxR09UM0dpTUdoYTZPa0VFdGtBcXZrdmtZelZDTVkwTHFnUTVGUEJKR3B2a1hXSEMzMGpMd0w1UkMwNDJGdFVqcFlTQTFYOFRDVGJTWm4vSUk1NXJia1BmeExrSHJldHBjSjlvSko3V3l1ODBXZzhwQVRwVndpU0hHYnFETmxEL2d1RG5qWWl6NThIR0JmWnlnUVJWaSsxc3hFa1JERFpiZnVNblp3Qm1wcHEwT01WWUhPakVoOW1TNjVQWlBEeC9OeEwyZ084OVZHR3RMYzVmb2JuWGt3YVlQQlNneU9QakhEUXgyZnRtYVFlUFBYSEFNT2ZxZFZCZ3BiVUsrUkJFbm55TEYvV2RnVHhUa3dDTmJ5c0FPbE1uNm53MVFnYVZzMU0rNmxtRWw4elZZemRBMXN0Vk1HYUdwbEQ4QVVFc0RCQlFBQUFnSUFBbVoyazZGMThrMTBBSUFBSWdKQUFCREFBQUFUVVZVUVMxSlRrWXZiV0YyWlc0dlkyOXRMbUZ0WVd4MGJ5NXdiR0YwWm05eWJUWXZaR1Z0YnkxaGNIQXRjMjFoY25RdFkyOXVkSEpoWTNRdmNHOXRMbmh0YkoxV1MyL2JNQXkrNTFkb3dVNEZMQ1ZOTVJTRjYxNjZBaDNhYlVDMllWZFZabHhsMW1PU25MUVk5dDhuUzRuckpMYWJMcmVRSDhtUEw5SHAxWk1vMFFxTTVVcGVqcWQ0TWtZZ21jcTVMQzdIMzcvZEpPZmpxMnlVYXFPV3dCenlhR2t2eDQvTzZRdENCRjJCeEZSVDlnaFltWUo4L1hKUHp2REVleG1oN1MrWVhEeFozcGl0MTJ1OG5nV0QwOGxrU243ZTM4MjlCMEVUTHEyamtrSGIzUElMRzdSM2lsRVhhTDRhSHZVaG5td2VoVW5BWWY5L25JVmdxVkE1bEQ5aUpiS2dUY21PYkJSeGhWR1Z2czB6cGdTbWdwWk9ZVjFTdDFCR2ZFakpWaHV4MURpK29NeDVRUTVDSlZUcnhBb3ZUWmlTem5oTlNscVlhTFRwUmphdEdheDJnL3MrYVBBR1lMT21SR25NMHZQUnZBU0RyYW9NQTI5K25wSnVWYStwbzZZQTEybTZVVVVhcE0wamluTFFJSE0vTzd2Y0d2SHppM0Nuakw0cmVBMFBzK1ZlN1JwZ3F6NU1HVGdzV0lOY05jMmI0V21yZEEyQTdMTnBTVnFwUEZTOGJQbE9kVmtWZmpMM29rWHBydkFnczgzb3hWcHUvUFFrdXA5c0hOTWxOVW0wNjA5OEozbWZPajd0U0w0QitzbGI4S0l5WVpjTzlSc2E3Skd2b0ZzYkVYbCtYeE84QnNzTTEwNlp6Sm1xN3M2aG90K0xvSkl2d0xwK3lEYllOU3hvVmJwYm9Vc1FJRjFnLzlIdlVOMjNKdklnNnRnWWN3Mk1MemdiRE5FSjZrK1V2SjVwVTR6aitPN21tRnhUQjluN1AzSFF3Z0JqeDRYM1JvWCttNUl1OUJGc0I2blVBOWt6SmlrWm1ETC9lblNzem5IN05QUlNCSEJyUndJMmlXdjBwaFU2dzZmdHB6ZDlseVNJVVNtVlE1VXVETTBCT1lYcUV6RkREOEJvWlFGeGh3ejhycmdCaXo3UkZVWFRLVXFTLzF3Ly8yajhvZ1Y4cGdJeTNqb3Z1RDRpMkRKZndSYWkyMGQ4NnYwV09pNWpMR3VZYnl5WFpPbjVrWlFjSXZvOGxUem43bmtlOERmK0dneE5ldTVMd1B6V1A3L0U4elVKcHY3bGU5SDJlK0NTbFZYKzZnSnNZTm5KQ1RueGg2MU15Vll5TU5qRHZ1dWFISkhyRzZkN0s3SGJtN081TDZOd1J1dlBxbXowRDFCTEFRSVVBeFFBQUFnSUFFNmEyazRMbDR0ZG5BQUFBQkVCQUFBVUFBQUFBQUFBQUFBQUFBQ2tnUUFBQUFCTlJWUkJMVWxPUmk5TlFVNUpSa1ZUVkM1TlJsQkxBUUlVQXdvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQUpBQUFBQUFBQUFBQUFFQUR0UWM0QUFBQk5SVlJCTFVsT1JpOVFTd0VDRkFNS0FBQUlBQUJObXRwT0FBQUFBQUFBQUFBQUFBQUFBd0FBQUFBQUFBQUFBQkFBN1VIMUFBQUFhVzh2VUVzQkFoUURDZ0FBQ0FBQVRacmFUZ0FBQUFBQUFBQUFBQUFBQUEwQUFBQUFBQUFBQUFBUUFPMUJGZ0VBQUdsdkwzQnNZWFJtYjNKdE5pOVFTd0VDRkFNS0FBQUlBQUJObXRwT0FBQUFBQUFBQUFBQUFBQUFFZ0FBQUFBQUFBQUFBQkFBN1VGQkFRQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZVRXNCQWhRRENnQUFDQUFBVFpyYVRnQUFBQUFBQUFBQUFBQUFBQlVBQUFBQUFBQUFBQUFRQU8xQmNRRUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFCTEFRSVVBd29BQUFnQUFFNmEyazRBQUFBQUFBQUFBQUFBQUFBUEFBQUFBQUFBQUFBQUVBRHRRYVFCQUFCTlJWUkJMVWxPUmk5dFlYWmxiaTlRU3dFQ0ZBTUtBQUFJQUFCT210cE9BQUFBQUFBQUFBQUFBQUFBSkFBQUFBQUFBQUFBQUJBQTdVSFJBUUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2VUVzQkFoUURDZ0FBQ0FBQVRwcmFUZ0FBQUFBQUFBQUFBQUFBQUR3QUFBQUFBQUFBQUFBUUFPMUJFd0lBQUUxRlZFRXRTVTVHTDIxaGRtVnVMMk52YlM1aGJXRnNkRzh1Y0d4aGRHWnZjbTAyTDJSbGJXOHRZWEJ3TFhOdFlYSjBMV052Ym5SeVlXTjBMMUJMQVFJVUF4UUFBQWdJQUUyYTJrN1k4NmZBb2dFQUFPZ0NBQUF5QUFBQUFBQUFBQUFBQUFDa2dXMENBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXlOQzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms2dzRKRHhtd0VBQU9BQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1Y4RUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE9DNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazdFZ3VmZ1FnRUFBQm9DQUFBeEFBQUFBQUFBQUFBQUFBQ2tnVW9HQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVE0TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRtcHNTNnMwQWdBQUdnUUFBQ1FBQUFBQUFBQUFBQUFBQUtTQjJ3Y0FBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKR1VWTjBZWFIxY3k1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNkRCUGFHb3dFQUFPTUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dWRUtBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhOUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms3UHdxQk5vQUVBQU9VQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1VRTUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE9TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazdGa3M0NW93RUFBT1lDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVFFPQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TXk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrN1lodnZRZ1FFQUFJSUNBQUJJQUFBQUFBQUFBQUFBQUFDa2dTY1FBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UlNSbEZTWldObGFYWmxaRVYyWlc1MFVtVnpjRzl1YzJVdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE9vakxYNTBnQkFBQWhBZ0FBTVFBQUFBQUFBQUFBQUFBQXBJRU9FZ0FBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtOeTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms0VVdLa0JFUndBQUVscEFBQXZBQUFBQUFBQUFBQUFBQUNrZ2FVVEFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3k1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrN0tNUE8rQmdRQUFNQUpBQUF5QUFBQUFBQUFBQUFBQUFDa2dRTXdBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXlOaTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms1TzE3TGRsUUVBQUxBQ0FBQktBQUFBQUFBQUFBQUFBQUNrZ1ZrMEFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lSUmRXOTBaVkpsWTJWcGRtVmtSWFpsYm5SU1pYTndiMjV6WlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNXlMYzM5UndFQUFDTUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dWWTJBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhNQzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms3bkF0N1lSZ0VBQUNFQ0FBQXhBQUFBQUFBQUFBQUFBQUNrZ2UwM0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRMUxtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUdUkzT3o1SEFRQUFJd0lBQURJQUFBQUFBQUFBQUFBQUFLU0JnamtBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREV4TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRpK012T0JSQVFBQUdnSUFBQ29BQUFBQUFBQUFBQUFBQUtTQkdUc0FBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtNUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms2aFp4K3pSZ0VBQUNFQ0FBQXhBQUFBQUFBQUFBQUFBQUNrZ2JJOEFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUb25ZQXJna0RnQUFqVE1BQUNnQUFBQUFBQUFBQUFBQUFLU0JSejRBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlV1WTJ4aGMzTlFTd0VDRkFNVUFBQUlDQUJObXRwT1kxSTdsVkVCQUFBYUFnQUFLZ0FBQUFBQUFBQUFBQUFBcElHeFRBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VTJsdGNHeGxVM1J2Y21GblpTUXlMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVGlGY3ppS2VBUUFBM2dJQUFESUFBQUFBQUFBQUFBQUFBS1NCU2s0QUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFMExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUbjJDcXZ1a0FRQUE1UUlBQURJQUFBQUFBQUFBQUFBQUFLU0JPRkFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREV6TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRoUTVGRmZhQUFBQTBBRUFBQkVBQUFBQUFBQUFBQUFBQUtTQkxGSUFBRk5wYlhCc1pWTjBiM0poWjJVdWMyOXNVRXNCQWhRREZBQUFDQWdBVFpyYVRySmZHM1ZYQXdBQUdBZ0FBRElBQUFBQUFBQUFBQUFBQUtTQk5WTUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpESXlMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG1neUlhZElBUUFBSXdJQUFESUFBQUFBQUFBQUFBQUFBS1NCM0ZZQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFeUxtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUdVI5WHZCSEFRQUFJUUlBQURFQUFBQUFBQUFBQUFBQUFLU0JkRmdBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl1WTJ4aGMzTlFTd0VDRkFNVUFBQUlDQUJObXRwT3g2OFZRNklCQUFEbkFnQUFNZ0FBQUFBQUFBQUFBQUFBcElFS1dnQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01UY3VZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQk5tdHBPRXBNYStLSURBQUJxRUFBQUdBQUFBQUFBQUFBQUFBQUFwSUg4V3dBQVVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTXVjMjlzVUVzQkFoUURGQUFBQ0FnQVRacmFUcFlBQVdHL0VBQUFFeTBBQUI4QUFBQUFBQUFBQUFBQUFLU0IxRjhBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxUmxjM1F1WTJ4aGMzTlFTd0VDRkFNVUFBQUlDQUJObXRwTzNkMnpVVkVCQUFBc0FnQUFNUUFBQUFBQUFBQUFBQUFBcElIUWNBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na09TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazRUOUp2R1lRRUFBRllDQUFCSEFBQUFBQUFBQUFBQUFBQ2tnWEJ5QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVRhVzF3YkdWVGRHOXlZV2RsSkZOMGIzSmxaRVJoZEdGRGFHRnVaMlZrUlhabGJuUlNaWE53YjI1elpTNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazRRbjh6UFVRRUFBQ3dDQUFBeEFBQUFBQUFBQUFBQUFBQ2tnVFowQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVEwTG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRuR2JTWkRTQXdBQU93a0FBQ29BQUFBQUFBQUFBQUFBQUtTQjFuVUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtOUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms0SXJScE1Sd0FBQUV3QUFBQktBQUFBQUFBQUFBQUFBQUNrZ2ZCNUFBQk5SVlJCTFVsT1JpOXRZWFpsYmk5amIyMHVZVzFoYkhSdkxuQnNZWFJtYjNKdE5pOWtaVzF2TFdGd2NDMXpiV0Z5ZEMxamIyNTBjbUZqZEM5d2IyMHVjSEp2Y0dWeWRHbGxjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNGMvczdjb0FFQUFPY0NBQUF5QUFBQUFBQUFBQUFBQUFDa2daOTZBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXlNQzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms2V1Vpd1pUZ1FBQUZRS0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1k5OEFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU55NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazZhUzQzSm1RRUFBTjBDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnUzJCQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TVM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNjZva1Fla3dFQUFMUUNBQUFxQUFBQUFBQUFBQUFBQUFDa2dSYURBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5VGFXMXdiR1ZUZEc5eVlXZGxKRFF1WTJ4aGMzTlFTd0VDRkFNVUFBQUlDQUJObXRwT0FUVDF1cGNCQUFDN0FnQUFLZ0FBQUFBQUFBQUFBQUFBcElIeGhBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VTJsdGNHeGxVM1J2Y21GblpTUXpMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHAzMjY0RXZCQUFBR1FvQUFESUFBQUFBQUFBQUFBQUFBS1NCMElZQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRJNExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUbWpCajV1UUFRQUFuQUlBQUVnQUFBQUFBQUFBQUFBQUFLU0JUNHNBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKRkpHVVVSbFkyeHBibVZrUlhabGJuUlNaWE53YjI1elpTNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazU0cjZLWG5BRUFBT0lDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVVdOQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrN25mQVpjUmdFQUFDRUNBQUF4QUFBQUFBQUFBQUFBQUFDa2dUR1BBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTJMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHNvakttWStBd0FBa3djQUFESUFBQUFBQUFBQUFBQUFBS1NCeHBBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFMkxtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUcHRYeDVoQ0FRQUFHZ0lBQURFQUFBQUFBQUFBQUFBQUFLU0JWSlFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKRE11WTJ4aGMzTlFTd0VDRkFNVUFBQUlDQUFKbWRwT2hkZkpOZEFDQUFDSUNRQUFRd0FBQUFBQUFBQUFBQUFBcElIbGxRQUFUVVZVUVMxSlRrWXZiV0YyWlc0dlkyOXRMbUZ0WVd4MGJ5NXdiR0YwWm05eWJUWXZaR1Z0YnkxaGNIQXRjMjFoY25RdFkyOXVkSEpoWTNRdmNHOXRMbmh0YkZCTEJRWUFBQUFBTmdBMkFDa1RBQUFXbVFBQUFBQT1cIixcInRhcmdldFJvb3RcIjpcIiR7QjJCT1hfREFUQX1cIixcInRhcmdldFBhdGhcIjpcIi9saWIvZGVtby1hcHAtc21hcnQtY29udHJhY3QtMS4xLmphclwiLFwicHJvcHNcIjp7fSxcImRlcGxveWVkXCI6ZmFsc2UsXCJoYXNCeXRlc0F0dGFjaG1lbnRcIjp0cnVlLFwiYXR0YWNobWVudE5hbWVcIjpcImRlbW8tYXBwLXNtYXJ0LWNvbnRyYWN0LTEuMS5qYXJcIixcImF0dGFjaG1lbnRTaXplXCI6NDQxMTd9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYzMTgyMzc0NzYxLCJtaW5FeHRyYVNlcnZpY2VWZXJzaW9uIjoiIiwibWF4RXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyIsIm5hbWUiOiJQT1JldmlldyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlBPUmV2aWV3XCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlRlbXBsYXRlIGZpbGUgZm9yIGVtYWlsIG5vdGlmaWNhdGlvbiBmcm9tIHRoZSB3b3JrZmxvdyBzZXJ2aWNlIGZvciBQdXJjaGFzZU9yZGVyXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxNTc1NTk4ODI2LFwicmV2aXNpb25JZFwiOlwiYzhiNzg1YzU4MzFlYTYyOGQ5MDcwNTcwODIwYzM0ZDRcIixcIml0ZW1CeXRlc1wiOlwiUENGa2IyTjBlWEJsSUdoMGJXdytDanhvZEcxc0lIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMM2hvZEcxc0lpQjRiV3h1Y3pwMlBTSjFjbTQ2YzJOb1pXMWhjeTF0YVdOeWIzTnZablF0WTI5dE9uWnRiQ0lnZUcxc2JuTTZiejBpZFhKdU9uTmphR1Z0WVhNdGJXbGpjbTl6YjJaMExXTnZiVHB2Wm1acFkyVTZiMlptYVdObElqNEtDVHhvWldGa1Bnb0pDVHdoTFMwZ1RrRk5SVG9nTVNCRFQweFZUVTRnTFNCQ1FVNUVSVVFnTFMwK0Nna0pQQ0V0TFZ0cFppQm5kR1VnYlhOdklERTFYVDRLQ1FrOGVHMXNQZ29KQ1FrOGJ6cFBabVpwWTJWRWIyTjFiV1Z1ZEZObGRIUnBibWR6UGdvSkNRazhienBCYkd4dmQxQk9SeTgrQ2drSkNUeHZPbEJwZUdWc2MxQmxja2x1WTJnK09UWThMMjg2VUdsNFpXeHpVR1Z5U1c1amFENEtDUWtKUEM5dk9rOW1abWxqWlVSdlkzVnRaVzUwVTJWMGRHbHVaM00rQ2drSlBDOTRiV3crQ2drSlBDRmJaVzVrYVdaZExTMCtDZ2tKUEcxbGRHRWdZMmhoY25ObGREMGlWVlJHTFRnaVBnb0pDVHh0WlhSaElHaDBkSEF0WlhGMWFYWTlJbGd0VlVFdFEyOXRjR0YwYVdKc1pTSWdZMjl1ZEdWdWREMGlTVVU5WldSblpTSStDZ2tKUEcxbGRHRWdibUZ0WlQwaWRtbGxkM0J2Y25RaUlHTnZiblJsYm5ROUluZHBaSFJvUFdSbGRtbGpaUzEzYVdSMGFDd2dhVzVwZEdsaGJDMXpZMkZzWlQweElqNEtDUWs4ZEdsMGJHVStTVzVqYjIxcGJtY2dVSFZ5WTJoaGMyVWdUM0prWlhJZ2RHOGdVbVYyYVdWM1BDOTBhWFJzWlQ0S0NRa0tDUWs4YzNSNWJHVWdkSGx3WlQwaWRHVjRkQzlqYzNNaVBnb0pDUWtKY0hzS0NRa0pDUWx0WVhKbmFXNDZNVEJ3ZUNBd093b0pDUWtKQ1hCaFpHUnBibWM2TURzS0NRa0pDWDBLQ1FrSkNYUmhZbXhsZXdvSkNRa0pDV0p2Y21SbGNpMWpiMnhzWVhCelpUcGpiMnhzWVhCelpUc0tDUWtKQ1gwS0NRa0pDV2d4TEdneUxHZ3pMR2cwTEdnMUxHZzJld29KQ1FrSkNXUnBjM0JzWVhrNllteHZZMnM3Q2drSkNRa0piV0Z5WjJsdU9qQTdDZ2tKQ1FrSmNHRmtaR2x1Wnpvd093b0pDUWtKZlFvSkNRa0phVzFuTEdFZ2FXMW5ld29KQ1FrSkNXSnZjbVJsY2pvd093b0pDUWtKQ1dobGFXZG9kRHBoZFhSdk93b0pDUWtKQ1c5MWRHeHBibVU2Ym05dVpUc0tDUWtKQ1FsMFpYaDBMV1JsWTI5eVlYUnBiMjQ2Ym05dVpUc0tDUWtKQ1gwS0NRa0pDV0p2Wkhrc0kySnZaSGxVWVdKc1pTd2pZbTlrZVVObGJHeDdDZ2tKQ1FrSmFHVnBaMmgwT2pFd01DVTdDZ2tKQ1FrSmJXRnlaMmx1T2pBN0Nna0pDUWtKY0dGa1pHbHVaem93T3dvSkNRa0pDWGRwWkhSb09qRXdNQ1U3Q2drSkNRbDlDZ2tKQ1FramIzVjBiRzl2YXlCaGV3b0pDUWtKQ1hCaFpHUnBibWM2TURzS0NRa0pDWDBLQ1FrSkNXbHRaM3NLQ1FrSkNRa3RiWE10YVc1MFpYSndiMnhoZEdsdmJpMXRiMlJsT21KcFkzVmlhV003Q2drSkNRbDlDZ2tKQ1FsMFlXSnNaWHNLQ1FrSkNRbHRjMjh0ZEdGaWJHVXRiSE53WVdObE9qQndkRHNLQ1FrSkNRbHRjMjh0ZEdGaWJHVXRjbk53WVdObE9qQndkRHNLQ1FrSkNYMEtDUWtKQ1M1U1pXRmtUWE5uUW05a2VYc0tDUWtKQ1FsM2FXUjBhRG94TURBbE93b0pDUWtKZlFvSkNRa0pMa1Y0ZEdWeWJtRnNRMnhoYzNON0Nna0pDUWtKZDJsa2RHZzZNVEF3SlRzS0NRa0pDWDBLQ1FrSkNYQXNZU3hzYVN4MFpDeGliRzlqYTNGMWIzUmxld29KQ1FrSkNXMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPbVY0WVdOMGJIazdDZ2tKQ1FsOUNna0pDUWxoVzJoeVpXWmVQWFJsYkYwc1lWdG9jbVZtWGoxemJYTmRld29KQ1FrSkNXTnZiRzl5T21sdWFHVnlhWFE3Q2drSkNRa0pZM1Z5YzI5eU9tUmxabUYxYkhRN0Nna0pDUWtKZEdWNGRDMWtaV052Y21GMGFXOXVPbTV2Ym1VN0Nna0pDUWw5Q2drSkNRbHdMR0VzYkdrc2RHUXNZbTlrZVN4MFlXSnNaU3hpYkc5amEzRjFiM1JsZXdvSkNRa0pDUzF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2pFd01DVTdDZ2tKQ1FrSkxYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2pFd01DVTdDZ2tKQ1FsOUNna0pDUWt1UlhoMFpYSnVZV3hEYkdGemN5d3VSWGgwWlhKdVlXeERiR0Z6Y3lCd0xDNUZlSFJsY201aGJFTnNZWE56SUhSa0xDNUZlSFJsY201aGJFTnNZWE56SUdScGRpd3VSWGgwWlhKdVlXeERiR0Z6Y3lCemNHRnVMQzVGZUhSbGNtNWhiRU5zWVhOeklHWnZiblI3Q2drSkNRa0piR2x1WlMxb1pXbG5hSFE2TVRBd0pUc0tDUWtKQ1gwS0NRa0pDV0ZiZUMxaGNIQnNaUzFrWVhSaExXUmxkR1ZqZEc5eWMxMTdDZ2tKQ1FrSlkyOXNiM0k2YVc1b1pYSnBkQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDWFJsZUhRdFpHVmpiM0poZEdsdmJqcHViMjVsSUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKWm05dWRDMXphWHBsT21sdWFHVnlhWFFnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDUWxtYjI1MExXWmhiV2xzZVRwcGJtaGxjbWwwSUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKWm05dWRDMTNaV2xuYUhRNmFXNW9aWEpwZENBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1d4cGJtVXRhR1ZwWjJoME9tbHVhR1Z5YVhRZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pDUzUwWlcxd2JHRjBaVU52Ym5SaGFXNWxjbnNLQ1FrSkNRbHRZWGd0ZDJsa2RHZzZOakF3Y0hnZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pDV0V1YldOdVFuVjBkRzl1ZXdvSkNRa0pDV1JwYzNCc1lYazZZbXh2WTJzN0Nna0pDUWw5Q2drSkNRa3ViV051U1cxaFoyVjdDZ2tKQ1FrSmRtVnlkR2xqWVd3dFlXeHBaMjQ2WW05MGRHOXRPd29KQ1FrSmZRb0pDUWtKTG0xamJsUmxlSFJEYjI1MFpXNTBld29KQ1FrSkNYZHZjbVF0WW5KbFlXczZZbkpsWVdzdGQyOXlaRHNLQ1FrSkNYMEtDUWtKQ1M1dFkyNVVaWGgwUTI5dWRHVnVkQ0JwYldkN0Nna0pDUWtKYUdWcFoyaDBPbUYxZEc4Z0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pDUzV0WTI1RWFYWnBaR1Z5UW14dlkydDdDZ2tKQ1FrSmRHRmliR1V0YkdGNWIzVjBPbVpwZUdWa0lDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUdGblpRb0pDUWxBYzJWamRHbHZiaUJDWVdOclozSnZkVzVrSUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0IwYjNBZ1ltOXlaR1Z5SUdadmNpQjViM1Z5SUdWdFlXbHNMaUJaYjNVZ2JXRjVJSGRoYm5RZ2RHOGdZMmh2YjNObElHTnZiRzl5Y3lCMGFHRjBJRzFoZEdOb0lIbHZkWElnWTI5dGNHRnVlU2R6SUdKeVlXNWthVzVuTGdvSkNRa3FMd29KQ1FrSlltOWtlU3dqWW05a2VWUmhZbXhsZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5aVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lObU1tWXlaakk3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1VHRm5aUW9KQ1FsQWMyVmpkR2x2YmlCQ1lXTnJaM0p2ZFc1a0lGTjBlV3hsQ2drSkNVQjBhWEFnVTJWMElIUm9aU0JpWVdOclozSnZkVzVrSUdOdmJHOXlJR0Z1WkNCMGIzQWdZbTl5WkdWeUlHWnZjaUI1YjNWeUlHVnRZV2xzTGlCWmIzVWdiV0Y1SUhkaGJuUWdkRzhnWTJodmIzTmxJR052Ykc5eWN5QjBhR0YwSUcxaGRHTm9JSGx2ZFhJZ1kyOXRjR0Z1ZVNkeklHSnlZVzVrYVc1bkxnb0pDUWtxTHdvSkNRa0pJMkp2WkhsRFpXeHNld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpYjNKa1pYSXRkRzl3T2pBN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklERUtDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJR0ZzYkNCbWFYSnpkQzFzWlhabGJDQm9aV0ZrYVc1bmN5QnBiaUI1YjNWeUlHVnRZV2xzY3k0Z1ZHaGxjMlVnYzJodmRXeGtJR0psSUhSb1pTQnNZWEpuWlhOMElHOW1JSGx2ZFhJZ2FHVmhaR2x1WjNNdUNna0pDVUJ6ZEhsc1pTQm9aV0ZrYVc1bklERUtDUWtKS2k4S0NRa0pDV2d4ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5amIyeHZjam9qTmpBMk1EWXdPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExXWmhiV2xzZVRwQmNtbGhiQ3dnSjBobGJIWmxkR2xqWVNCT1pYVmxKeXdnU0dWc2RtVjBhV05oTENCellXNXpMWE5sY21sbU93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhOcGVtVTZNekJ3ZURzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6ZEhsc1pUcHViM0p0WVd3N0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0ZDJWcFoyaDBPbUp2YkdRN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakV5TlNVN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeGxkSFJsY2kxemNHRmphVzVuT2kweGNIZzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM1JsZUhRdFlXeHBaMjQ2YkdWbWREc0tDUWtKQ1gwS0NRa0pMeW9LQ1FrSlFIUmhZaUJRWVdkbENna0pDVUJ6WldOMGFXOXVJRWhsWVdScGJtY2dNZ29KQ1FsQWRHbHdJRk5sZENCMGFHVWdjM1I1YkdsdVp5Qm1iM0lnWVd4c0lITmxZMjl1WkMxc1pYWmxiQ0JvWldGa2FXNW5jeUJwYmlCNWIzVnlJR1Z0WVdsc2N5NEtDUWtKUUhOMGVXeGxJR2hsWVdScGJtY2dNZ29KQ1FrcUx3b0pDUWtKYURKN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNMk1EWXdOakE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRabUZ0YVd4NU9raGxiSFpsZEdsallUc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakkwY0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzNSNWJHVTZibTl5YldGc093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhkbGFXZG9kRHBpYjJ4a093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TWpVbE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNaWFIwWlhJdGMzQmhZMmx1WnpvdE1YQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTkwWlhoMExXRnNhV2R1T214bFpuUTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUdGblpRb0pDUWxBYzJWamRHbHZiaUJJWldGa2FXNW5JRE1LQ1FrSlFIUnBjQ0JUWlhRZ2RHaGxJSE4wZVd4cGJtY2dabTl5SUdGc2JDQjBhR2x5WkMxc1pYWmxiQ0JvWldGa2FXNW5jeUJwYmlCNWIzVnlJR1Z0WVdsc2N5NEtDUWtKUUhOMGVXeGxJR2hsWVdScGJtY2dNd29KQ1FrcUx3b0pDUWtKYURON0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNMk1EWXdOakE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRabUZ0YVd4NU9raGxiSFpsZEdsallUc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakU0Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzNSNWJHVTZibTl5YldGc093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhkbGFXZG9kRHBpYjJ4a093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TWpVbE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNaWFIwWlhJdGMzQmhZMmx1WnpvdE1YQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTkwWlhoMExXRnNhV2R1T214bFpuUTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUdGblpRb0pDUWxBYzJWamRHbHZiaUJJWldGa2FXNW5JRFFLQ1FrSlFIUnBjQ0JUWlhRZ2RHaGxJSE4wZVd4cGJtY2dabTl5SUdGc2JDQm1iM1Z5ZEdndGJHVjJaV3dnYUdWaFpHbHVaM01nYVc0Z2VXOTFjaUJsYldGcGJITXVJRlJvWlhObElITm9iM1ZzWkNCaVpTQjBhR1VnYzIxaGJHeGxjM1FnYjJZZ2VXOTFjaUJvWldGa2FXNW5jeTRLQ1FrSlFITjBlV3hsSUdobFlXUnBibWNnTkFvSkNRa3FMd29KQ1FrSmFEUjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTTJNRFl3TmpBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0Wm1GdGFXeDVPa2hsYkhabGRHbGpZVHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMXphWHBsT2pFMmNIZzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMzUjViR1U2Ym05eWJXRnNPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYZGxhV2RvZERwaWIyeGtPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE1qVWxPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzWlhSMFpYSXRjM0JoWTJsdVp6b3RNWEI0T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5MFpYaDBMV0ZzYVdkdU9teGxablE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1VISmxhR1ZoWkdWeUNna0pDVUJ6WldOMGFXOXVJRkJ5WldobFlXUmxjaUJUZEhsc1pRb0pDUWxBZEdsd0lGTmxkQ0IwYUdVZ1ltRmphMmR5YjNWdVpDQmpiMnh2Y2lCaGJtUWdZbTl5WkdWeWN5Qm1iM0lnZVc5MWNpQmxiV0ZwYkNkeklIQnlaV2hsWVdSbGNpQmhjbVZoTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFVISmxhR1ZoWkdWeWV3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWlZV05yWjNKdmRXNWtMV052Ykc5eU9pTm1abVptWm1ZN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwySnZjbVJsY2kxMGIzQTZNRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WW05eVpHVnlMV0p2ZEhSdmJUb3dPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTl3WVdSa2FXNW5MWFJ2Y0RveWNIZzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM0JoWkdScGJtY3RZbTkwZEc5dE9qSndlRHNLQ1FrSkNYMEtDUWtKTHlvS0NRa0pRSFJoWWlCUWNtVm9aV0ZrWlhJS0NRa0pRSE5sWTNScGIyNGdVSEpsYUdWaFpHVnlJRlJsZUhRS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlIbHZkWElnWlcxaGFXd25jeUJ3Y21Wb1pXRmtaWElnZEdWNGRDNGdRMmh2YjNObElHRWdjMmw2WlNCaGJtUWdZMjlzYjNJZ2RHaGhkQ0JwY3lCbFlYTjVJSFJ2SUhKbFlXUXVDZ2tKQ1NvdkNna0pDUWtqZEdWdGNHeGhkR1ZRY21Wb1pXRmtaWElnTG0xamJsUmxlSFJEYjI1MFpXNTBMQ04wWlcxd2JHRjBaVkJ5WldobFlXUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUWdjSHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WTI5c2IzSTZJelkxTmpVMk5Uc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxbVlXMXBiSGs2VkdGb2IyMWhMQ0JXWlhKa1lXNWhMQ0JUWldkdlpTd2djMkZ1Y3kxelpYSnBaanNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMXphWHBsT2pFd2NIZzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFMU1DVTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM1JsZUhRdFlXeHBaMjQ2YkdWbWREc0tDUWtKQ1gwS0NRa0pMeW9LQ1FrSlFIUmhZaUJRY21Wb1pXRmtaWElLQ1FrSlFITmxZM1JwYjI0Z1VISmxhR1ZoWkdWeUlFeHBibXNLQ1FrSlFIUnBjQ0JUWlhRZ2RHaGxJSE4wZVd4cGJtY2dabTl5SUhsdmRYSWdaVzFoYVd3bmN5QndjbVZvWldGa1pYSWdiR2x1YTNNdUlFTm9iMjl6WlNCaElHTnZiRzl5SUhSb1lYUWdhR1ZzY0hNZ2RHaGxiU0J6ZEdGdVpDQnZkWFFnWm5KdmJTQjViM1Z5SUhSbGVIUXVDZ2tKQ1NvdkNna0pDUWtqZEdWdGNHeGhkR1ZRY21Wb1pXRmtaWElnTG0xamJsUmxlSFJEYjI1MFpXNTBJR0VzSTNSbGJYQnNZWFJsVUhKbGFHVmhaR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0J3SUdGN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNMk5UWTFOalU3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRkMlZwWjJoME9tNXZjbTFoYkRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmRHVjRkQzFrWldOdmNtRjBhVzl1T25WdVpHVnliR2x1WlRzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQklaV0ZrWlhJS0NRa0pRSE5sWTNScGIyNGdTR1ZoWkdWeUlGTjBlV3hsQ2drSkNVQjBhWEFnVTJWMElIUm9aU0JpWVdOclozSnZkVzVrSUdOdmJHOXlJR0Z1WkNCaWIzSmtaWEp6SUdadmNpQjViM1Z5SUdWdFlXbHNKM01nYUdWaFpHVnlJR0Z5WldFdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVklaV0ZrWlhKN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwySmhZMnRuY205MWJtUXRZMjlzYjNJNkkyWXlaakptTWpzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlltOXlaR1Z5TFhSdmNEb3dPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpYjNKa1pYSXRZbTkwZEc5dE9qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM0JoWkdScGJtY3RkRzl3T2pJd2NIZzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM0JoWkdScGJtY3RZbTkwZEc5dE9qSXdjSGc3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1NHVmhaR1Z5Q2drSkNVQnpaV04wYVc5dUlFaGxZV1JsY2lCVVpYaDBDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQnpkSGxzYVc1bklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ2FHVmhaR1Z5SUhSbGVIUXVJRU5vYjI5elpTQmhJSE5wZW1VZ1lXNWtJR052Ykc5eUlIUm9ZWFFnYVhNZ1pXRnplU0IwYnlCeVpXRmtMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsU0dWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDd2pkR1Z0Y0d4aGRHVklaV0ZrWlhJZ0xtMWpibFJsZUhSRGIyNTBaVzUwSUhCN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNek16TXpNek03Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRabUZ0YVd4NU9sUmhhRzl0WVN3Z1ZtVnlaR0Z1WVN3Z1UyVm5iMlVzSUhOaGJuTXRjMlZ5YVdZN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzJsNlpUb3hObkI0T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hOVEFsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5MFpYaDBMV0ZzYVdkdU9teGxablE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1NHVmhaR1Z5Q2drSkNVQnpaV04wYVc5dUlFaGxZV1JsY2lCTWFXNXJDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQnpkSGxzYVc1bklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ2FHVmhaR1Z5SUd4cGJtdHpMaUJEYUc5dmMyVWdZU0JqYjJ4dmNpQjBhR0YwSUdobGJIQnpJSFJvWlcwZ2MzUmhibVFnYjNWMElHWnliMjBnZVc5MWNpQjBaWGgwTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFNHVmhaR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0JoTENOMFpXMXdiR0YwWlVobFlXUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUWdjQ0JoZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5amIyeHZjam9qT0RsaVl6VTFPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYZGxhV2RvZERwdWIzSnRZV3c3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNSbGVIUXRaR1ZqYjNKaGRHbHZianAxYm1SbGNteHBibVU3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1FtOWtlUW9KQ1FsQWMyVmpkR2x2YmlCQ2IyUjVJRk4wZVd4bENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUdGdVpDQmliM0prWlhKeklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ1ltOWtlU0JoY21WaExnb0pDUWtxTHdvSkNRa0pJM1JsYlhCc1lYUmxRbTlrZVhzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlltRmphMmR5YjNWdVpDMWpiMnh2Y2pvalJrWkdSa1pHT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5aWIzSmtaWEl0ZEc5d09qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMkp2Y21SbGNpMWliM1IwYjIwNk1Ec0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZjR0ZrWkdsdVp5MTBiM0E2T1hCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXdZV1JrYVc1bkxXSnZkSFJ2YlRveE1uQjRPd29KQ1FrSmZRb0pDUWt2S2dvSkNRbEFkR0ZpSUVKdlpIa0tDUWtKUUhObFkzUnBiMjRnUW05a2VTQlVaWGgwQ2drSkNVQjBhWEFnVTJWMElIUm9aU0J6ZEhsc2FXNW5JR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdZbTlrZVNCMFpYaDBMaUJEYUc5dmMyVWdZU0J6YVhwbElHRnVaQ0JqYjJ4dmNpQjBhR0YwSUdseklHVmhjM2tnZEc4Z2NtVmhaQzRLQ1FrSktpOEtDUWtKQ1NOMFpXMXdiR0YwWlVKdlpIa2dMbTFqYmxSbGVIUkRiMjUwWlc1MExDTjBaVzF3YkdGMFpVSnZaSGtnTG0xamJsUmxlSFJEYjI1MFpXNTBJSEI3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU16TXpNek16TTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2xSaGFHOXRZU3dnVm1WeVpHRnVZU3dnVTJWbmIyVXNJSE5oYm5NdGMyVnlhV1k3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5IQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTkwWlhoMExXRnNhV2R1T214bFpuUTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnUW05a2VRb0pDUWxBYzJWamRHbHZiaUJDYjJSNUlFeHBibXNLQ1FrSlFIUnBjQ0JUWlhRZ2RHaGxJSE4wZVd4cGJtY2dabTl5SUhsdmRYSWdaVzFoYVd3bmN5QmliMlI1SUd4cGJtdHpMaUJEYUc5dmMyVWdZU0JqYjJ4dmNpQjBhR0YwSUdobGJIQnpJSFJvWlcwZ2MzUmhibVFnYjNWMElHWnliMjBnZVc5MWNpQjBaWGgwTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFFtOWtlU0F1YldOdVZHVjRkRU52Ym5SbGJuUWdZU3dqZEdWdGNHeGhkR1ZDYjJSNUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZENCd0lHRjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTTRPV0pqTlRVN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0ZDJWcFoyaDBPbTV2Y20xaGJEc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9uVnVaR1Z5YkdsdVpUc0tDUWtKQ1gwS0NRa0pMeW9LQ1FrSlFIUmhZaUJHYjI5MFpYSUtDUWtKUUhObFkzUnBiMjRnUm05dmRHVnlJRk4wZVd4bENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUdGdVpDQmliM0prWlhKeklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ1ptOXZkR1Z5SUdGeVpXRXVDZ2tKQ1NvdkNna0pDUWtqZEdWdGNHeGhkR1ZHYjI5MFpYSjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMkpoWTJ0bmNtOTFibVF0WTI5c2IzSTZJMll5WmpKbU1qc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZbTl5WkdWeUxYUnZjRG93T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5aWIzSmtaWEl0WW05MGRHOXRPakE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNCaFpHUnBibWN0ZEc5d09qbHdlRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Y0dGa1pHbHVaeTFpYjNSMGIyMDZPWEI0T3dvSkNRa0pmUW9KQ1Frdktnb0pDUWxBZEdGaUlFWnZiM1JsY2dvSkNRbEFjMlZqZEdsdmJpQkdiMjkwWlhJZ1ZHVjRkQW9KQ1FsQWRHbHdJRk5sZENCMGFHVWdjM1I1YkdsdVp5Qm1iM0lnZVc5MWNpQmxiV0ZwYkNkeklHWnZiM1JsY2lCMFpYaDBMaUJEYUc5dmMyVWdZU0J6YVhwbElHRnVaQ0JqYjJ4dmNpQjBhR0YwSUdseklHVmhjM2tnZEc4Z2NtVmhaQzRLQ1FrSktpOEtDUWtKQ1NOMFpXMXdiR0YwWlVadmIzUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNJM1JsYlhCc1lYUmxSbTl2ZEdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZENCd2V3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWpiMnh2Y2pvak5qVTJOVFkxT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMV1poYldsc2VUcFVZV2h2YldFc0lGWmxjbVJoYm1Fc0lGTmxaMjlsTENCellXNXpMWE5sY21sbU93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhOcGVtVTZNVEp3ZURzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmJHbHVaUzFvWldsbmFIUTZNVFV3SlRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmRHVjRkQzFoYkdsbmJqcGpaVzUwWlhJN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdSbTl2ZEdWeUNna0pDVUJ6WldOMGFXOXVJRVp2YjNSbGNpQk1hVzVyQ2drSkNVQjBhWEFnVTJWMElIUm9aU0J6ZEhsc2FXNW5JR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdabTl2ZEdWeUlHeHBibXR6TGlCRGFHOXZjMlVnWVNCamIyeHZjaUIwYUdGMElHaGxiSEJ6SUhSb1pXMGdjM1JoYm1RZ2IzVjBJR1p5YjIwZ2VXOTFjaUIwWlhoMExnb0pDUWtxTHdvSkNRa0pJM1JsYlhCc1lYUmxSbTl2ZEdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZENCaExDTjBaVzF3YkdGMFpVWnZiM1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFnY0NCaGV3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWpiMnh2Y2pvak5qVTJOVFkxT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcHViM0p0WVd3N0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzUmxlSFF0WkdWamIzSmhkR2x2YmpwMWJtUmxjbXhwYm1VN0Nna0pDUWw5Q2drSkNVQnRaV1JwWVNCdmJteDVJSE5qY21WbGJpQmhibVFnS0cxcGJpMTNhV1IwYURvM05qaHdlQ2w3Q2drSkNRa3VkR1Z0Y0d4aGRHVkRiMjUwWVdsdVpYSjdDZ2tKQ1FrSmQybGtkR2c2TmpBd2NIZ2dJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNXSnZaSGtzZEdGaWJHVXNkR1FzY0N4aExHeHBMR0pzYjJOcmNYVnZkR1Y3Q2drSkNRa0pMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9tNXZibVVnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pDV0p2WkhsN0Nna0pDUWtKZDJsa2RHZzZNVEF3SlNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1cxcGJpMTNhV1IwYURveE1EQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNRa2pZbTlrZVVObGJHeDdDZ2tKQ1FrSmNHRmtaR2x1WnkxMGIzQTZNVEJ3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSkNRbDlDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMWhlQzEzYVdSMGFEb2dORGd3Y0hncGV3b0pDUWtKTG0xamJrbHRZV2RsZXdvSkNRa0pDWGRwWkhSb09qRXdNQ1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pDUzV0WTI1RFlYSjBRMjl1ZEdGcGJtVnlMQzV0WTI1RFlYQjBhVzl1Vkc5d1EyOXVkR1Z1ZEN3dWJXTnVVbVZqUTI5dWRHVnVkRU52Ym5SaGFXNWxjaXd1YldOdVEyRndkR2x2YmtKdmRIUnZiVU52Ym5SbGJuUXNMbTFqYmxSbGVIUkRiMjUwWlc1MFEyOXVkR0ZwYm1WeUxDNXRZMjVDYjNobFpGUmxlSFJEYjI1MFpXNTBRMjl1ZEdGcGJtVnlMQzV0WTI1SmJXRm5aVWR5YjNWd1EyOXVkR1Z1ZEVOdmJuUmhhVzVsY2l3dWJXTnVRMkZ3ZEdsdmJreGxablJVWlhoMFEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2l3dWJXTnVRMkZ3ZEdsdmJsSnBaMmgwVkdWNGRFTnZiblJsYm5SRGIyNTBZV2x1WlhJc0xtMWpia05oY0hScGIyNU1aV1owU1cxaFoyVkRiMjUwWlc1MFEyOXVkR0ZwYm1WeUxDNXRZMjVEWVhCMGFXOXVVbWxuYUhSSmJXRm5aVU52Ym5SbGJuUkRiMjUwWVdsdVpYSXNMbTFqYmtsdFlXZGxRMkZ5WkV4bFpuUlVaWGgwUTI5dWRHVnVkRU52Ym5SaGFXNWxjaXd1YldOdVNXMWhaMlZEWVhKa1VtbG5hSFJVWlhoMFEyOXVkR1Z1ZEVOdmJuUmhhVzVsY25zS0NRa0pDUWx0WVhndGQybGtkR2c2TVRBd0pTQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYZHBaSFJvT2pFd01DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNTNXRZMjVDYjNobFpGUmxlSFJEYjI1MFpXNTBRMjl1ZEdGcGJtVnlld29KQ1FrSkNXMXBiaTEzYVdSMGFEb3hNREFsSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUWt1YldOdVNXMWhaMlZIY205MWNFTnZiblJsYm5SN0Nna0pDUWtKY0dGa1pHbHVaem81Y0hnZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1M1dFkyNURZWEIwYVc5dVRHVm1kRU52Ym5SbGJuUlBkWFJsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFzTG0xamJrTmhjSFJwYjI1U2FXZG9kRU52Ym5SbGJuUlBkWFJsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp5MTBiM0E2T1hCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FrdWJXTnVTVzFoWjJWRFlYSmtWRzl3U1cxaFoyVkRiMjUwWlc1MExDNXRZMjVEWVhCMGFXOXVRbXh2WTJ0SmJtNWxjaUF1YldOdVEyRndkR2x2YmxSdmNFTnZiblJsYm5RNmJHRnpkQzFqYUdsc1pDQXViV051VkdWNGRFTnZiblJsYm5SN0Nna0pDUWtKY0dGa1pHbHVaeTEwYjNBNk1UaHdlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pmUW9KQ1FsOUNVQnRaV1JwWVNCdmJteDVJSE5qY21WbGJpQmhibVFnS0cxaGVDMTNhV1IwYURvZ05EZ3djSGdwZXdvSkNRa0pMbTFqYmtsdFlXZGxRMkZ5WkVKdmRIUnZiVWx0WVdkbFEyOXVkR1Z1ZEhzS0NRa0pDUWx3WVdSa2FXNW5MV0p2ZEhSdmJUbzVjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pDUzV0WTI1SmJXRm5aVWR5YjNWd1FteHZZMnRKYm01bGNuc0tDUWtKQ1Fsd1lXUmthVzVuTFhSdmNEb3dJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pjR0ZrWkdsdVp5MWliM1IwYjIwNk1DQWhhVzF3YjNKMFlXNTBPd29KQ1FrSmZRb0pDUWw5Q1VCdFpXUnBZU0J2Ym14NUlITmpjbVZsYmlCaGJtUWdLRzFoZUMxM2FXUjBhRG9nTkRnd2NIZ3Bld29KQ1FrSkxtMWpia2x0WVdkbFIzSnZkWEJDYkc5amEwOTFkR1Z5ZXdvSkNRa0pDWEJoWkdScGJtY3RkRzl3T2psd2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYQmhaR1JwYm1jdFltOTBkRzl0T2psd2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSmZRb0pDUWw5Q1VCdFpXUnBZU0J2Ym14NUlITmpjbVZsYmlCaGJtUWdLRzFoZUMxM2FXUjBhRG9nTkRnd2NIZ3Bld29KQ1FrSkxtMWpibFJsZUhSRGIyNTBaVzUwTEM1dFkyNUNiM2hsWkZSbGVIUkRiMjUwWlc1MFEyOXNkVzF1ZXdvSkNRa0pDWEJoWkdScGJtY3RjbWxuYUhRNk1UaHdlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDWEJoWkdScGJtY3RiR1ZtZERveE9IQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNRa3ViV051U1cxaFoyVkRZWEprVEdWbWRFbHRZV2RsUTI5dWRHVnVkQ3d1YldOdVNXMWhaMlZEWVhKa1VtbG5hSFJKYldGblpVTnZiblJsYm5SN0Nna0pDUWtKY0dGa1pHbHVaeTF5YVdkb2REb3hPSEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKY0dGa1pHbHVaeTFpYjNSMGIyMDZNQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDWEJoWkdScGJtY3RiR1ZtZERveE9IQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNRa3ViV053Y21WMmFXVjNMV2x0WVdkbExYVndiRzloWkdWeWV3b0pDUWtKQ1dScGMzQnNZWGs2Ym05dVpTQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYZHBaSFJvT2pFd01DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkx5b0tDUWtKUUhSaFlpQk5iMkpwYkdVZ1UzUjViR1Z6Q2drSkNVQnpaV04wYVc5dUlFaGxZV1JwYm1jZ01Rb0pDUWxBZEdsd0lFMWhhMlVnZEdobElHWnBjbk4wTFd4bGRtVnNJR2hsWVdScGJtZHpJR3hoY21kbGNpQnBiaUJ6YVhwbElHWnZjaUJpWlhSMFpYSWdjbVZoWkdGaWFXeHBkSGtnYjI0Z2MyMWhiR3dnYzJOeVpXVnVjeTRLQ1FrSktpOEtDUWtKQ1dneGV3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhOcGVtVTZNVGh3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TWpVbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1M4cUNna0pDVUIwWVdJZ1RXOWlhV3hsSUZOMGVXeGxjd29KQ1FsQWMyVmpkR2x2YmlCSVpXRmthVzVuSURJS0NRa0pRSFJwY0NCTllXdGxJSFJvWlNCelpXTnZibVF0YkdWMlpXd2dhR1ZoWkdsdVozTWdiR0Z5WjJWeUlHbHVJSE5wZW1VZ1ptOXlJR0psZEhSbGNpQnlaV0ZrWVdKcGJHbDBlU0J2YmlCemJXRnNiQ0J6WTNKbFpXNXpMZ29KQ1FrcUx3b0pDUWtKYURKN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzJsNlpUb3hObkI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakV5TlNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUnBibWNnTXdvSkNRbEFkR2x3SUUxaGEyVWdkR2hsSUhSb2FYSmtMV3hsZG1Wc0lHaGxZV1JwYm1keklHeGhjbWRsY2lCcGJpQnphWHBsSUdadmNpQmlaWFIwWlhJZ2NtVmhaR0ZpYVd4cGRIa2diMjRnYzIxaGJHd2djMk55WldWdWN5NEtDUWtKS2k4S0NRa0pDV2d6ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk1UWndlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUzhxQ2drSkNVQjBZV0lnVFc5aWFXeGxJRk4wZVd4bGN3b0pDUWxBYzJWamRHbHZiaUJJWldGa2FXNW5JRFFLQ1FrSlFIUnBjQ0JOWVd0bElIUm9aU0JtYjNWeWRHZ3RiR1YyWld3Z2FHVmhaR2x1WjNNZ2JHRnlaMlZ5SUdsdUlITnBlbVVnWm05eUlHSmxkSFJsY2lCeVpXRmtZV0pwYkdsMGVTQnZiaUJ6YldGc2JDQnpZM0psWlc1ekxnb0pDUWtxTHdvSkNRa0phRFI3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5uQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRTFNQ1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pMeW9LQ1FrSlFIUmhZaUJOYjJKcGJHVWdVM1I1YkdWekNna0pDVUJ6WldOMGFXOXVJRUp2ZUdWa0lGUmxlSFFLQ1FrSlFIUnBjQ0JOWVd0bElIUm9aU0JpYjNobFpDQjBaWGgwSUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0Z1YyVWdjbVZqYjIxdFpXNWtJR0VnWm05dWRDQnphWHBsSUc5bUlHRjBJR3hsWVhOMElERTJjSGd1Q2drSkNTb3ZDZ2tKQ1FrdWJXTnVRbTk0WldSVVpYaDBRMjl1ZEdWdWRFTnZiblJoYVc1bGNpQXViV051VkdWNGRFTnZiblJsYm5Rc0xtMWpia0p2ZUdWa1ZHVjRkRU52Ym5SbGJuUkRiMjUwWVdsdVpYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MElIQjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94TkhCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFMU1DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkx5b0tDUWtKUUhSaFlpQk5iMkpwYkdVZ1UzUjViR1Z6Q2drSkNVQnpaV04wYVc5dUlGQnlaV2hsWVdSbGNpQldhWE5wWW1sc2FYUjVDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQjJhWE5wWW1sc2FYUjVJRzltSUhSb1pTQmxiV0ZwYkNkeklIQnlaV2hsWVdSbGNpQnZiaUJ6YldGc2JDQnpZM0psWlc1ekxpQlpiM1VnWTJGdUlHaHBaR1VnYVhRZ2RHOGdjMkYyWlNCemNHRmpaUzRLQ1FrSktpOEtDUWtKQ1NOMFpXMXdiR0YwWlZCeVpXaGxZV1JsY25zS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlpHbHpjR3hoZVRwdWIyNWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQlFjbVZvWldGa1pYSWdWR1Y0ZEFvSkNRbEFkR2x3SUUxaGEyVWdkR2hsSUhCeVpXaGxZV1JsY2lCMFpYaDBJR3hoY21kbGNpQnBiaUJ6YVhwbElHWnZjaUJpWlhSMFpYSWdjbVZoWkdGaWFXeHBkSGtnYjI0Z2MyMWhiR3dnYzJOeVpXVnVjeTRLQ1FrSktpOEtDUWtKQ1NOMFpXMXdiR0YwWlZCeVpXaGxZV1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFzSTNSbGJYQnNZWFJsVUhKbGFHVmhaR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0J3ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk1USndlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hOVEFsSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUzhxQ2drSkNVQjBZV0lnVFc5aWFXeGxJRk4wZVd4bGN3b0pDUWxBYzJWamRHbHZiaUJJWldGa1pYSWdWR1Y0ZEFvSkNRbEFkR2x3SUUxaGEyVWdkR2hsSUdobFlXUmxjaUIwWlhoMElHeGhjbWRsY2lCcGJpQnphWHBsSUdadmNpQmlaWFIwWlhJZ2NtVmhaR0ZpYVd4cGRIa2diMjRnYzIxaGJHd2djMk55WldWdWN5NEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVWhsWVdSbGNpQXViV051VkdWNGRFTnZiblJsYm5Rc0kzUmxiWEJzWVhSbFNHVmhaR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0J3ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk1UWndlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hOVEFsSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUzhxQ2drSkNVQjBZV0lnVFc5aWFXeGxJRk4wZVd4bGN3b0pDUWxBYzJWamRHbHZiaUJDYjJSNUlGUmxlSFFLQ1FrSlFIUnBjQ0JOWVd0bElIUm9aU0JpYjJSNUlIUmxlSFFnYkdGeVoyVnlJR2x1SUhOcGVtVWdabTl5SUdKbGRIUmxjaUJ5WldGa1lXSnBiR2wwZVNCdmJpQnpiV0ZzYkNCelkzSmxaVzV6TGlCWFpTQnlaV052YlcxbGJtUWdZU0JtYjI1MElITnBlbVVnYjJZZ1lYUWdiR1ZoYzNRZ01UWndlQzRLQ1FrSktpOEtDUWtKQ1NOMFpXMXdiR0YwWlVKdlpIa2dMbTFqYmxSbGVIUkRiMjUwWlc1MExDTjBaVzF3YkdGMFpVSnZaSGtnTG0xamJsUmxlSFJEYjI1MFpXNTBJSEI3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5IQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRTFNQ1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pMeW9LQ1FrSlFIUmhZaUJOYjJKcGJHVWdVM1I1YkdWekNna0pDVUJ6WldOMGFXOXVJRVp2YjNSbGNpQlVaWGgwQ2drSkNVQjBhWEFnVFdGclpTQjBhR1VnWm05dmRHVnlJR052Ym5SbGJuUWdkR1Y0ZENCc1lYSm5aWElnYVc0Z2MybDZaU0JtYjNJZ1ltVjBkR1Z5SUhKbFlXUmhZbWxzYVhSNUlHOXVJSE50WVd4c0lITmpjbVZsYm5NdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVkdiMjkwWlhJZ0xtMWpibFJsZUhSRGIyNTBaVzUwTENOMFpXMXdiR0YwWlVadmIzUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUWdjSHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMXphWHBsT2pFemNIZ2dJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292YkdsdVpTMW9aV2xuYUhRNk1UVXdKU0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pmUW9KZlR3dmMzUjViR1UrUEM5b1pXRmtQZ29KUEdKdlpIa2djM1I1YkdVOUltaGxhV2RvZERvZ01UQXdKVHR0WVhKbmFXNDZJREE3Y0dGa1pHbHVaem9nTUR0M2FXUjBhRG9nTVRBd0pUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3WW1GamEyZHliM1Z1WkMxamIyeHZjam9nSTJZeVpqSm1NanNpUGdvSkNUeGpaVzUwWlhJK0Nna0pQSFJoWW14bElHRnNhV2R1UFNKalpXNTBaWElpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJvWldsbmFIUTlJakV3TUNVaUlIZHBaSFJvUFNJeE1EQWxJaUJwWkQwaVltOWtlVlJoWW14bElpQnpkSGxzWlQwaVltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdG9aV2xuYUhRNklERXdNQ1U3YldGeVoybHVPaUF3TzNCaFpHUnBibWM2SURBN2QybGtkR2c2SURFd01DVTdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMll5WmpKbU1qc2lQZ29KQ1FrOGRISStDZ2tKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKMGIzQWlJR2xrUFNKaWIyUjVRMlZzYkNJZ2MzUjViR1U5SW0xemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHRvWldsbmFIUTZJREV3TUNVN2JXRnlaMmx1T2lBd08zQmhaR1JwYm1jNklEQTdkMmxrZEdnNklERXdNQ1U3WW05eVpHVnlMWFJ2Y0RvZ01Ec2lQZ29KQ1FrSkNUd2hMUzBnUWtWSFNVNGdWRVZOVUV4QlZFVWdMeThnTFMwK0Nna0pDUWtKUEhSaFlteGxJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnYzNSNWJHVTlJbUp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlIWmhiR2xuYmowaWRHOXdJaUJwWkQwaWRHVnRjR3hoZEdWUWNtVm9aV0ZrWlhJaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3WW1GamEyZHliM1Z1WkMxamIyeHZjam9nSTJabVptWm1aanRpYjNKa1pYSXRkRzl3T2lBd08ySnZjbVJsY2kxaWIzUjBiMjA2SURBN2NHRmtaR2x1WnkxMGIzQTZJREp3ZUR0d1lXUmthVzVuTFdKdmRIUnZiVG9nTW5CNE95SStDZ2tKQ1FrSkNRa0pQQ0V0TFZ0cFppQm5kR1VnYlhOdklEbGRQZ29KQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaVkyVnVkR1Z5SWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnZDJsa2RHZzlJall3TUNJZ2MzUjViR1U5SW5kcFpIUm9Pall3TUhCNE95SStDZ2tKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQjJZV3hwWjI0OUluUnZjQ0lnZDJsa2RHZzlJall3TUNJZ2MzUjViR1U5SW5kcFpIUm9Pall3TUhCNE95SStDZ2tKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKalpXNTBaWElpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW5SbGJYQnNZWFJsUTI5dWRHRnBibVZ5SWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0dFlYZ3RkMmxrZEdnNklEWXdNSEI0SUNGcGJYQnZjblJoYm5RN0lqNEtDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lIWmhiR2xuYmowaWRHOXdJaUJqYkdGemN6MGljSEpsYUdWaFpHVnlRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUltMWpibFJsZUhSQ2JHOWpheUlnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNUlHTnNZWE56UFNKdFkyNVVaWGgwUW14dlkydFBkWFJsY2lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ1kyeGhjM005SW0xamJsUmxlSFJDYkc5amEwbHVibVZ5SWlCemRIbHNaVDBpY0dGa1pHbHVaeTEwYjNBNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUhOMGVXeGxQU0ozYVdSMGFEb3hNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ2RtRnNhV2R1UFNKMGIzQWlJSGRwWkhSb1BTSTJNREFpSUhOMGVXeGxQU0ozYVdSMGFEbzJNREJ3ZURzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoVzJWdVpHbG1YUzB0UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpYkdWbWRDSWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlITjBlV3hsUFNKdFlYZ3RkMmxrZEdnNklERXdNQ1U3YldsdUxYZHBaSFJvT2lBeE1EQWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUltMWpibFJsZUhSRGIyNTBaVzUwUTI5dWRHRnBibVZ5SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lIWmhiR2xuYmowaWRHOXdJaUJqYkdGemN6MGliV051VkdWNGRFTnZiblJsYm5RaUlITjBlV3hsUFNKd1lXUmthVzVuTFhSdmNEb2dNRHR3WVdSa2FXNW5MWEpwWjJoME9pQXhPSEI0TzNCaFpHUnBibWN0WW05MGRHOXRPaUE1Y0hnN2NHRmtaR2x1Wnkxc1pXWjBPaUF4T0hCNE8yMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0M2IzSmtMV0p5WldGck9pQmljbVZoYXkxM2IzSmtPMk52Ykc5eU9pQWpOalUyTlRZMU8yWnZiblF0Wm1GdGFXeDVPaUJVWVdodmJXRXNJRlpsY21SaGJtRXNJRk5sWjI5bExDQnpZVzV6TFhObGNtbG1PMlp2Ym5RdGMybDZaVG9nTVRCd2VEdHNhVzVsTFdobGFXZG9kRG9nTVRVd0pUdDBaWGgwTFdGc2FXZHVPaUJzWldaME95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKV1c5MWNpQm9ZWFpsSUdFZ2JtVjNJR2x1WW05MWJtUWdVSFZ5WTJoaGMyVWdUM0prWlhJZ2RHOGdjbVYyYVdWM0xnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDRLQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0ZpYkdVK1BDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ1ozUmxJRzF6YnlBNVhUNEtDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdhV1E5SW5SbGJYQnNZWFJsU0dWaFpHVnlJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE8ySmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1NbVl5WmpJN1ltOXlaR1Z5TFhSdmNEb2dNRHRpYjNKa1pYSXRZbTkwZEc5dE9pQXdPM0JoWkdScGJtY3RkRzl3T2lBeU1IQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQXlNSEI0T3lJK0Nna0pDUWtKQ1FrSlBDRXRMVnRwWmlCbmRHVWdiWE52SURsZFBnb0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpWTJWdWRHVnlJaUJpYjNKa1pYSTlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnWTJ4aGMzTTlJblJsYlhCc1lYUmxRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHR0WVhndGQybGtkR2c2SURZd01IQjRJQ0ZwYlhCdmNuUmhiblE3SWo0S0NRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaWFHVmhaR1Z5UTI5dWRHRnBibVZ5SWlCemRIbHNaVDBpYlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrUEhSaFlteGxJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnWTJ4aGMzTTlJbTFqYmtsdFlXZGxRbXh2WTJzaUlITjBlV3hsUFNKdGFXNHRkMmxrZEdnNklERXdNQ1U3WW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlU0JqYkdGemN6MGliV051U1cxaFoyVkNiRzlqYTA5MWRHVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lIWmhiR2xuYmowaWRHOXdJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp6b2dNSEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpSUdOc1lYTnpQU0p0WTI1SmJXRm5aVUpzYjJOclNXNXVaWElpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGliR1ZtZENJZ2QybGtkR2c5SWpFd01DVWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQmpiR0Z6Y3owaWJXTnVTVzFoWjJWRGIyNTBaVzUwUTI5dWRHRnBibVZ5SWlCemRIbHNaVDBpYldsdUxYZHBaSFJvT2lBeE1EQWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCamJHRnpjejBpYldOdVNXMWhaMlZEYjI1MFpXNTBJaUIyWVd4cFoyNDlJblJ2Y0NJZ2MzUjViR1U5SW5CaFpHUnBibWN0Y21sbmFIUTZJREJ3ZUR0d1lXUmthVzVuTFd4bFpuUTZJREJ3ZUR0d1lXUmthVzVuTFhSdmNEb2dNRHR3WVdSa2FXNW5MV0p2ZEhSdmJUb2dNRHQwWlhoMExXRnNhV2R1T2lCalpXNTBaWEk3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEdsdFp5QmhiR2xuYmowaVkyVnVkR1Z5SWlCaGJIUTlJaUlnYzNKalBTSm9kSFJ3Y3pvdkwzQnZjblJoYkM1d2JHRjBabTl5YlRZdWFXOHZjM1JoZEdsakwyeHZaMmx1WDNCaFoyVXZjR3hoZEdadmNtMDJMMnh2WjI4dWNHNW5JaUIzYVdSMGFEMGlNall3SWlCemRIbHNaVDBpYldGNExYZHBaSFJvT2lBeU5qQndlRHR3WVdSa2FXNW5MV0p2ZEhSdmJUb2dNRHRrYVhOd2JHRjVPaUJwYm14cGJtVWdJV2x0Y0c5eWRHRnVkRHQyWlhKMGFXTmhiQzFoYkdsbmJqb2dZbTkwZEc5dE8ySnZjbVJsY2pvZ01EdG9aV2xuYUhRNklHRjFkRzg3YjNWMGJHbHVaVG9nYm05dVpUdDBaWGgwTFdSbFkyOXlZWFJwYjI0NklHNXZibVU3TFcxekxXbHVkR1Z5Y0c5c1lYUnBiMjR0Ylc5a1pUb2dZbWxqZFdKcFl6c2lJR05zWVhOelBTSnRZMjVKYldGblpTSStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNEtDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWs4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnWjNSbElHMXpieUE1WFQ0S0NRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJblJ2Y0NJZ2FXUTlJblJsYlhCc1lYUmxRbTlrZVNJZ2MzUjViR1U5SW0xemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHRpWVdOclozSnZkVzVrTFdOdmJHOXlPaUFqUmtaR1JrWkdPMkp2Y21SbGNpMTBiM0E2SURBN1ltOXlaR1Z5TFdKdmRIUnZiVG9nTUR0d1lXUmthVzVuTFhSdmNEb2dPWEI0TzNCaFpHUnBibWN0WW05MGRHOXRPaUF4TW5CNE95SStDZ2tKQ1FrSkNRa0pQQ0V0TFZ0cFppQm5kR1VnYlhOdklEbGRQZ29KQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaVkyVnVkR1Z5SWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnZDJsa2RHZzlJall3TUNJZ2MzUjViR1U5SW5kcFpIUm9Pall3TUhCNE95SStDZ2tKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQjJZV3hwWjI0OUluUnZjQ0lnZDJsa2RHZzlJall3TUNJZ2MzUjViR1U5SW5kcFpIUm9Pall3TUhCNE95SStDZ2tKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKalpXNTBaWElpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW5SbGJYQnNZWFJsUTI5dWRHRnBibVZ5SWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0dFlYZ3RkMmxrZEdnNklEWXdNSEI0SUNGcGJYQnZjblJoYm5RN0lqNEtDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lIWmhiR2xuYmowaWRHOXdJaUJqYkdGemN6MGlZbTlrZVVOdmJuUmhhVzVsY2lJZ2MzUjViR1U5SW0xemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGp4MFlXSnNaU0JpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0p0WTI1VVpYaDBRbXh2WTJzaUlITjBlV3hsUFNKdGFXNHRkMmxrZEdnNklERXdNQ1U3WW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlU0JqYkdGemN6MGliV051VkdWNGRFSnNiMk5yVDNWMFpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRazhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ2RtRnNhV2R1UFNKMGIzQWlJR05zWVhOelBTSnRZMjVVWlhoMFFteHZZMnRKYm01bGNpSWdjM1I1YkdVOUluQmhaR1JwYm1jdGRHOXdPaUE1Y0hnN2JYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGliR1ZtZENJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQnpkSGxzWlQwaWQybGtkR2c2TVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFZ0cFppQnRjMjlkUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJSFpoYkdsbmJqMGlkRzl3SWlCM2FXUjBhRDBpTmpBd0lpQnpkSGxzWlQwaWQybGtkR2c2TmpBd2NIZzdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJ6ZEhsc1pUMGliV0Y0TFhkcFpIUm9PaUF4TURBbE8yMXBiaTEzYVdSMGFEb2dNVEF3SlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0p0WTI1VVpYaDBRMjl1ZEdWdWRFTnZiblJoYVc1bGNpSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ1kyeGhjM005SW0xamJsUmxlSFJEYjI1MFpXNTBJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp6b2dNSEI0SURFNGNIZ2dPWEI0TzJadmJuUXRabUZ0YVd4NU9pQlVZV2h2YldFc0lGWmxjbVJoYm1Fc0lGTmxaMjlsTENCellXNXpMWE5sY21sbU8yMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0M2IzSmtMV0p5WldGck9pQmljbVZoYXkxM2IzSmtPMk52Ykc5eU9pQWpNek16TXpNek8yWnZiblF0YzJsNlpUb2dNVFJ3ZUR0c2FXNWxMV2hsYVdkb2REb2dNVFV3SlR0MFpYaDBMV0ZzYVdkdU9pQnNaV1owT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR2d6SUhOMGVXeGxQU0owWlhoMExXRnNhV2R1T2lCc1pXWjBPMlJwYzNCc1lYazZJR0pzYjJOck8yMWhjbWRwYmpvZ01EdHdZV1JrYVc1bk9pQXdPMk52Ykc5eU9pQWpOakEyTURZd08yWnZiblF0Wm1GdGFXeDVPaUJJWld4MlpYUnBZMkU3Wm05dWRDMXphWHBsT2lBeE9IQjRPMlp2Ym5RdGMzUjViR1U2SUc1dmNtMWhiRHRtYjI1MExYZGxhV2RvZERvZ1ltOXNaRHRzYVc1bExXaGxhV2RvZERvZ01USTFKVHRzWlhSMFpYSXRjM0JoWTJsdVp6b2dMVEZ3ZURzaVBrbHVZbTkxYm1RZ1VIVnlZMmhoYzJVZ1QzSmtaWElnZEc4Z2NtVjJhV1YzUEM5b016NEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOFpHbDJJSE4wZVd4bFBTSjBaWGgwTFdGc2FXZHVPaUJzWldaME95SStQR0p5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4STJsbUlIVnpaWEl1Wm1seWMzUk9ZVzFsUHo4Z0ppWWdkWE5sY2k1bWFYSnpkRTVoYldVL2FHRnpYMk52Ym5SbGJuUStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4STJsbUlIVnpaWEl1YkdGemRFNWhiV1UvUHlBbUppQjFjMlZ5TG14aGMzUk9ZVzFsUDJoaGMxOWpiMjUwWlc1MFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUVobGJHeHZJQ1I3ZFhObGNpNW1hWEp6ZEU1aGJXVjlMQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUENObGJITmxQZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lFaGxiR3h2SUNSN2RYTmxjaTVtYVhKemRFNWhiV1Y5TEFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1BDOGphV1krQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHdqWld4elpUNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRWhsYkd4dklDUjdkWE5sY2k1bGJXRnBiSDBzQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHd2STJsbVBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBOFluSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeGljajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pXVzkxSUdoaGRtVWdZU0J1WlhjZ2FXNWliM1Z1WkNCUGNtUmxjaUIwYnlCeVpYWnBaWGN1SUZCc1pXRnpaU0E4WVNCb2NtVm1QU0lrZTJoeVpXWjlJaUIwWVhKblpYUTlJbDlpYkdGdWF5SStiRzluSUc5dUlHRnVaQ0JoWTJObGNIUWdiM0lnY21WcVpXTjBMand2WVQ0OFluSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkptNWljM0E3UEM5a2FYWStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGdvSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWVdKc1pUNDhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVSR2wyYVdSbGNrSnNiMk5ySWlCemRIbHNaVDBpYldsdUxYZHBaSFJvT2lBeE1EQWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3ZEdGaWJHVXRiR0Y1YjNWME9pQm1hWGhsWkNBaGFXMXdiM0owWVc1ME95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrOGRHSnZaSGtnWTJ4aGMzTTlJbTFqYmtScGRtbGtaWEpDYkc5amEwOTFkR1Z5SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWs4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmpiR0Z6Y3owaWJXTnVSR2wyYVdSbGNrSnNiMk5yU1c1dVpYSWlJSE4wZVd4bFBTSnRhVzR0ZDJsa2RHZzZJREV3TUNVN2NHRmtaR2x1WnpvZ05YQjRJREU0Y0hnN2JYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWTJ4aGMzTTlJbTFqYmtScGRtbGtaWEpEYjI1MFpXNTBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUhOMGVXeGxQU0p0YVc0dGQybGtkR2c2SURFd01DVTdZbTl5WkdWeUxYUnZjQzEzYVdSMGFEb2dNbkI0TzJKdmNtUmxjaTEwYjNBdGMzUjViR1U2SUc1dmJtVTdZbTl5WkdWeUxYUnZjQzFqYjJ4dmNqb2dJMFZCUlVGRlFUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJSE4wZVd4bFBTSnRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHh6Y0dGdVBqd3ZjM0JoYmo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJ0SmJtNWxjaUlnYzNSNWJHVTlJbkJoWkdScGJtYzZJREU0Y0hnN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhhSElnWTJ4aGMzTTlJbTFqYmtScGRtbGtaWEpEYjI1MFpXNTBJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXSnZkSFJ2YlMxamIyeHZjanB1YjI1bE95QmliM0prWlhJdGJHVm1kQzFqYjJ4dmNqcHViMjVsT3lCaWIzSmtaWEl0Y21sbmFIUXRZMjlzYjNJNmJtOXVaVHNnWW05eVpHVnlMV0p2ZEhSdmJTMTNhV1IwYURvd095QmliM0prWlhJdGJHVm1kQzEzYVdSMGFEb3dPeUJpYjNKa1pYSXRjbWxuYUhRdGQybGtkR2c2TURzZ2JXRnlaMmx1TFhSdmNEb3dPeUJ0WVhKbmFXNHRjbWxuYUhRNk1Ec2diV0Z5WjJsdUxXSnZkSFJ2YlRvd095QnRZWEpuYVc0dGJHVm1kRG93T3lJZ0x6NEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa3RMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0S0NRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdGaWJHVStQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRazhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdaM1JsSUcxemJ5QTVYVDRLQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSlBDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQjJZV3hwWjI0OUluUnZjQ0lnYVdROUluUmxiWEJzWVhSbFJtOXZkR1Z5SWlCemRIbHNaVDBpYlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPMkpoWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05tTW1ZeVpqSTdZbTl5WkdWeUxYUnZjRG9nTUR0aWIzSmtaWEl0WW05MGRHOXRPaUF3TzNCaFpHUnBibWN0ZEc5d09pQTVjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRGx3ZURzaVBnb0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ1ozUmxJRzF6YnlBNVhUNEtDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnWW05eVpHVnlQU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJSGRwWkhSb1BTSTJNREFpSUhOMGVXeGxQU0ozYVdSMGFEbzJNREJ3ZURzaVBnb0pDUWtKQ1FrSkNRazhkSEkrQ2drSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKMGIzQWlJSGRwWkhSb1BTSTJNREFpSUhOMGVXeGxQU0ozYVdSMGFEbzJNREJ3ZURzaVBnb0pDUWtKQ1FrSkNRa0pDVHdoVzJWdVpHbG1YUzB0UGdvSkNRa0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpWTJWdWRHVnlJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0owWlcxd2JHRjBaVU52Ym5SaGFXNWxjaUlnYzNSNWJHVTlJbUp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3YldGNExYZHBaSFJvT2lBMk1EQndlQ0FoYVcxd2IzSjBZVzUwT3lJK0Nna0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCMllXeHBaMjQ5SW5SdmNDSWdZMnhoYzNNOUltWnZiM1JsY2tOdmJuUmhhVzVsY2lJZ2MzUjViR1U5SW0xemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGp4MFlXSnNaU0JpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2RDYkc5amF5SWdjM1I1YkdVOUltMXBiaTEzYVdSMGFEb2dNVEF3SlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1SUdOc1lYTnpQU0p0WTI1R2IyeHNiM2RDYkc5amEwOTFkR1Z5SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlIWmhiR2xuYmowaWRHOXdJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp6b2dPWEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2RDYkc5amEwbHVibVZ5SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRU52Ym5SaGFXNWxjaUlnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdjM1I1YkdVOUluQmhaR1JwYm1jdGJHVm1kRG9nT1hCNE8zQmhaR1JwYm1jdGNtbG5hSFE2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRDSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKd1lXUmthVzVuTFhSdmNEb2dPWEI0TzNCaFpHUnBibWN0Y21sbmFIUTZJRGx3ZUR0d1lXUmthVzVuTFd4bFpuUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUltTmxiblJsY2lJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhOMGVXeGxQU0ppYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKMGIzQWlJSE4wZVd4bFBTSnRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJUzB0VzJsbUlHMXpiMTArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSmpaVzUwWlhJaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdiWE52WFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQjJZV3hwWjI0OUluUnZjQ0krQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdjM1I1YkdVOUltUnBjM0JzWVhrNklHbHViR2x1WlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ2RtRnNhV2R1UFNKMGIzQWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYSnBaMmgwT2lBeE1IQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQTVjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUlnWTJ4aGMzTTlJbTFqYmtadmJHeHZkME52Ym5SbGJuUkpkR1Z0UTI5dWRHRnBibVZ5SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRFbDBaVzBpSUhOMGVXeGxQU0ppYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUlteGxablFpSUhaaGJHbG5iajBpYldsa1pHeGxJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp5MTBiM0E2SURWd2VEdHdZV1JrYVc1bkxYSnBaMmgwT2lBeE1IQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQTFjSGc3Y0dGa1pHbHVaeTFzWldaME9pQTVjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnZDJsa2RHZzlJaUlnYzNSNWJHVTlJbUp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpYldsa1pHeGxJaUIzYVdSMGFEMGlNalFpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2RKWTI5dVEyOXVkR1Z1ZENJZ2MzUjViR1U5SW0xemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeGhJR2h5WldZOUltaDBkSEE2THk5M2QzY3VZVzFoYkhSdkxtTnZiUzhpSUhSaGNtZGxkRDBpWDJKc1lXNXJJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStQR2x0WnlCemNtTTlJbWgwZEhBNkx5OWpaRzR0YVcxaFoyVnpMbTFoYVd4amFHbHRjQzVqYjIwdmFXTnZibk12YzI5amFXRnNMV0pzYjJOckxYWXlMMk52Ykc5eUxXeHBibXN0TkRndWNHNW5JaUJ6ZEhsc1pUMGlaR2x6Y0d4aGVUb2dZbXh2WTJzN1ltOXlaR1Z5T2lBd08yaGxhV2RvZERvZ1lYVjBienR2ZFhSc2FXNWxPaUJ1YjI1bE8zUmxlSFF0WkdWamIzSmhkR2x2YmpvZ2JtOXVaVHN0YlhNdGFXNTBaWEp3YjJ4aGRHbHZiaTF0YjJSbE9pQmlhV04xWW1sak95SWdhR1ZwWjJoMFBTSXlOQ0lnZDJsa2RHZzlJakkwSWlCamJHRnpjejBpSWo0OEwyRStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFZ0cFppQnRjMjlkUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlIWmhiR2xuYmowaWRHOXdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ2FXNXNhVzVsTzJKdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCMllXeHBaMjQ5SW5SdmNDSWdjM1I1YkdVOUluQmhaR1JwYm1jdGNtbG5hSFE2SURFd2NIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRFbDBaVzFEYjI1MFlXbHVaWElpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZERiMjUwWlc1MFNYUmxiU0lnYzNSNWJHVTlJbUp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaWJHVm1kQ0lnZG1Gc2FXZHVQU0p0YVdSa2JHVWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYUnZjRG9nTlhCNE8zQmhaR1JwYm1jdGNtbG5hSFE2SURFd2NIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEVndlRHR3WVdSa2FXNW5MV3hsWm5RNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHSnZaSGsrUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0p0YVdSa2JHVWlJSGRwWkhSb1BTSXlOQ0lnWTJ4aGMzTTlJbTFqYmtadmJHeHZkMGxqYjI1RGIyNTBaVzUwSWlCemRIbHNaVDBpYlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHRWdhSEpsWmowaWFIUjBjSE02THk5M2QzY3VabUZqWldKdmIyc3VZMjl0TDJGdFlXeDBiM1JsWTJodWIyeHZaMmxsY3lJZ2RHRnlaMlYwUFNKZllteGhibXNpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajQ4YVcxbklITnlZejBpYUhSMGNEb3ZMMk5rYmkxcGJXRm5aWE11YldGcGJHTm9hVzF3TG1OdmJTOXBZMjl1Y3k5emIyTnBZV3d0WW14dlkyc3Rkakl2WTI5c2IzSXRabUZqWldKdmIyc3RORGd1Y0c1bklpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ1lteHZZMnM3WW05eVpHVnlPaUF3TzJobGFXZG9kRG9nWVhWMGJ6dHZkWFJzYVc1bE9pQnViMjVsTzNSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUc3RiWE10YVc1MFpYSndiMnhoZEdsdmJpMXRiMlJsT2lCaWFXTjFZbWxqT3lJZ2FHVnBaMmgwUFNJeU5DSWdkMmxrZEdnOUlqSTBJaUJqYkdGemN6MGlJajQ4TDJFK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCemRIbHNaVDBpWkdsemNHeGhlVG9nYVc1c2FXNWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ2MzUjViR1U5SW5CaFpHUnBibWN0Y21sbmFIUTZJREV3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZEVsMFpXMURiMjUwWVdsdVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZV0pzWlNCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnZDJsa2RHZzlJakV3TUNVaUlHTnNZWE56UFNKdFkyNUdiMnhzYjNkRGIyNTBaVzUwU1hSbGJTSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpYkdWbWRDSWdkbUZzYVdkdVBTSnRhV1JrYkdVaUlITjBlV3hsUFNKd1lXUmthVzVuTFhSdmNEb2dOWEI0TzNCaFpHUnBibWN0Y21sbmFIUTZJREV3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURWd2VEdHdZV1JrYVc1bkxXeGxablE2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaUlpQnpkSGxzWlQwaVltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSnRhV1JrYkdVaUlIZHBaSFJvUFNJeU5DSWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwbGpiMjVEYjI1MFpXNTBJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEdFZ2FISmxaajBpYUhSMGNITTZMeTkzZDNjdWJHbHVhMlZrYVc0dVkyOXRMMk52YlhCaGJua3ZZVzFoYkhSdkxYUmxZMmh1YjJ4dloybGxjeUlnZEdGeVoyVjBQU0pmWW14aGJtc2lJSE4wZVd4bFBTSnRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNDhhVzFuSUhOeVl6MGlhSFIwY0RvdkwyTmtiaTFwYldGblpYTXViV0ZwYkdOb2FXMXdMbU52YlM5cFkyOXVjeTl6YjJOcFlXd3RZbXh2WTJzdGRqSXZZMjlzYjNJdGJHbHVhMlZrYVc0dE5EZ3VjRzVuSWlCemRIbHNaVDBpWkdsemNHeGhlVG9nWW14dlkyczdZbTl5WkdWeU9pQXdPMmhsYVdkb2REb2dZWFYwYnp0dmRYUnNhVzVsT2lCdWIyNWxPM1JsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlRzdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPaUJpYVdOMVltbGpPeUlnYUdWcFoyaDBQU0l5TkNJZ2QybGtkR2c5SWpJMElpQmpiR0Z6Y3owaUlqNDhMMkUrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdiWE52WFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGlkRzl3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJ6ZEhsc1pUMGlaR2x6Y0d4aGVUb2dhVzVzYVc1bE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnYzNSNWJHVTlJbkJoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcxRGIyNTBZV2x1WlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2REYjI1MFpXNTBTWFJsYlNJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGliR1ZtZENJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ05YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRFZ3ZUR0d1lXUmthVzVuTFd4bFpuUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrK1BIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhkcFpIUm9QU0l5TkNJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBsamIyNURiMjUwWlc1MElpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0VnYUhKbFpqMGlhSFIwY0hNNkx5OTBkMmwwZEdWeUxtTnZiUzlCYldGc2RHOGlJSFJoY21kbGREMGlYMkpzWVc1cklpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK1BHbHRaeUJ6Y21NOUltaDBkSEE2THk5alpHNHRhVzFoWjJWekxtMWhhV3hqYUdsdGNDNWpiMjB2YVdOdmJuTXZjMjlqYVdGc0xXSnNiMk5yTFhZeUwyTnZiRzl5TFhSM2FYUjBaWEl0TkRndWNHNW5JaUJ6ZEhsc1pUMGlaR2x6Y0d4aGVUb2dZbXh2WTJzN1ltOXlaR1Z5T2lBd08yaGxhV2RvZERvZ1lYVjBienR2ZFhSc2FXNWxPaUJ1YjI1bE8zUmxlSFF0WkdWamIzSmhkR2x2YmpvZ2JtOXVaVHN0YlhNdGFXNTBaWEp3YjJ4aGRHbHZiaTF0YjJSbE9pQmlhV04xWW1sak95SWdhR1ZwWjJoMFBTSXlOQ0lnZDJsa2RHZzlJakkwSWlCamJHRnpjejBpSWo0OEwyRStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFZ0cFppQnRjMjlkUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlIWmhiR2xuYmowaWRHOXdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ2FXNXNhVzVsTzJKdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCMllXeHBaMjQ5SW5SdmNDSWdjM1I1YkdVOUluQmhaR1JwYm1jdGNtbG5hSFE2SURBN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZEVsMFpXMURiMjUwWVdsdVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZV0pzWlNCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnZDJsa2RHZzlJakV3TUNVaUlHTnNZWE56UFNKdFkyNUdiMnhzYjNkRGIyNTBaVzUwU1hSbGJTSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpYkdWbWRDSWdkbUZzYVdkdVBTSnRhV1JrYkdVaUlITjBlV3hsUFNKd1lXUmthVzVuTFhSdmNEb2dOWEI0TzNCaFpHUnBibWN0Y21sbmFIUTZJREV3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURWd2VEdHdZV1JrYVc1bkxXeGxablE2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaUlpQnpkSGxzWlQwaVltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSnRhV1JrYkdVaUlIZHBaSFJvUFNJeU5DSWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwbGpiMjVEYjI1MFpXNTBJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEdFZ2FISmxaajBpYUhSMGNITTZMeTkzZDNjdWVXOTFkSFZpWlM1amIyMHZZMmhoYm01bGJDOVZRemxYV0MxcVJXRkRXRzA0VkZZemNtUmpRMmszWTNjaUlIUmhjbWRsZEQwaVgySnNZVzVySWlCemRIbHNaVDBpYlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrUEdsdFp5QnpjbU05SW1oMGRIQTZMeTlqWkc0dGFXMWhaMlZ6TG0xaGFXeGphR2x0Y0M1amIyMHZhV052Ym5NdmMyOWphV0ZzTFdKc2IyTnJMWFl5TDJOdmJHOXlMWGx2ZFhSMVltVXRORGd1Y0c1bklpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ1lteHZZMnM3WW05eVpHVnlPaUF3TzJobGFXZG9kRG9nWVhWMGJ6dHZkWFJzYVc1bE9pQnViMjVsTzNSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUc3RiWE10YVc1MFpYSndiMnhoZEdsdmJpMXRiMlJsT2lCaWFXTjFZbWxqT3lJZ2FHVnBaMmgwUFNJeU5DSWdkMmxrZEdnOUlqSTBJaUJqYkdGemN6MGlJajQ4TDJFK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytDZ2tKQ1FrSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGp4MFlXSnNaU0JpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0p0WTI1RWFYWnBaR1Z5UW14dlkyc2lJSE4wZVd4bFBTSnRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdDBZV0pzWlMxc1lYbHZkWFE2SUdacGVHVmtJQ0ZwYlhCdmNuUmhiblE3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VTQmpiR0Z6Y3owaWJXTnVSR2wyYVdSbGNrSnNiMk5yVDNWMFpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdOc1lYTnpQU0p0WTI1RWFYWnBaR1Z5UW14dlkydEpibTVsY2lJZ2MzUjViR1U5SW0xcGJpMTNhV1IwYURvZ01UQXdKVHR3WVdSa2FXNW5PaUExY0hnZ01UaHdlQ0F5TUhCNE8yMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdOc1lYTnpQU0p0WTI1RWFYWnBaR1Z5UTI5dWRHVnVkQ0lnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCemRIbHNaVDBpYldsdUxYZHBaSFJvT2lBeE1EQWxPMkp2Y21SbGNpMTBiM0F0ZDJsa2RHZzZJREp3ZUR0aWIzSmtaWEl0ZEc5d0xYTjBlV3hsT2lCemIyeHBaRHRpYjNKa1pYSXRkRzl3TFdOdmJHOXlPaUFqUlVWRlJVVkZPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHSnZaSGsrUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhOd1lXNCtQQzl6Y0dGdVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWTJ4aGMzTTlJbTFqYmtScGRtbGtaWEpDYkc5amEwbHVibVZ5SWlCemRIbHNaVDBpY0dGa1pHbHVaem9nTVRod2VEc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHhvY2lCamJHRnpjejBpYldOdVJHbDJhV1JsY2tOdmJuUmxiblFpSUhOMGVXeGxQU0ppYjNKa1pYSXRZbTkwZEc5dExXTnZiRzl5T201dmJtVTdJR0p2Y21SbGNpMXNaV1owTFdOdmJHOXlPbTV2Ym1VN0lHSnZjbVJsY2kxeWFXZG9kQzFqYjJ4dmNqcHViMjVsT3lCaWIzSmtaWEl0WW05MGRHOXRMWGRwWkhSb09qQTdJR0p2Y21SbGNpMXNaV1owTFhkcFpIUm9PakE3SUdKdmNtUmxjaTF5YVdkb2RDMTNhV1IwYURvd095QnRZWEpuYVc0dGRHOXdPakE3SUcxaGNtZHBiaTF5YVdkb2REb3dPeUJ0WVhKbmFXNHRZbTkwZEc5dE9qQTdJRzFoY21kcGJpMXNaV1owT2pBN0lpQXZQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUzB0UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBnb0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFlXSnNaVDQ4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051VkdWNGRFSnNiMk5ySWlCemRIbHNaVDBpYldsdUxYZHBaSFJvT2lBeE1EQWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VTQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVKc2IyTnJUM1YwWlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJSFpoYkdsbmJqMGlkRzl3SWlCamJHRnpjejBpYldOdVZHVjRkRUpzYjJOclNXNXVaWElpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ09YQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFZ0cFppQnRjMjlkUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJSE4wZVd4bFBTSjNhV1IwYURveE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lIWmhiR2xuYmowaWRHOXdJaUIzYVdSMGFEMGlOakF3SWlCemRIbHNaVDBpZDJsa2RHZzZOakF3Y0hnN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoVzJWdVpHbG1YUzB0UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2MzUjViR1U5SW0xaGVDMTNhV1IwYURvZ01UQXdKVHR0YVc0dGQybGtkR2c2SURFd01DVTdZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVOdmJuUmxiblJEYjI1MFlXbHVaWElpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVQ0OGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlHTnNZWE56UFNKdFkyNVVaWGgwUTI5dWRHVnVkQ0lnYzNSNWJHVTlJbkJoWkdScGJtY3RkRzl3T2lBd08zQmhaR1JwYm1jdGNtbG5hSFE2SURFNGNIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEbHdlRHR3WVdSa2FXNW5MV3hsWm5RNklERTRjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPM2R2Y21RdFluSmxZV3M2SUdKeVpXRnJMWGR2Y21RN1kyOXNiM0k2SUNNMk5UWTFOalU3Wm05dWRDMW1ZVzFwYkhrNklGUmhhRzl0WVN3Z1ZtVnlaR0Z1WVN3Z1UyVm5iMlVzSUhOaGJuTXRjMlZ5YVdZN1ptOXVkQzF6YVhwbE9pQXhNbkI0TzJ4cGJtVXRhR1ZwWjJoME9pQXhOVEFsTzNSbGVIUXRZV3hwWjI0NklHTmxiblJsY2pzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhaR2wySUhOMGVXeGxQU0owWlhoMExXRnNhV2R1T2lCalpXNTBaWEk3SWo1UWJHVmhjMlVnWkc4Z2JtOTBJSEpsY0d4NUlIUnZJSFJvYVhNZ1pTMXRZV2xzTGlCVWFHVWdjMlZ1WkdWeUlHVnRZV2xzSUdGa1pISmxjM01nYVhNZ2JtOTBJRzF2Ym1sMGIzSmxaQzQ4WW5JK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUm05eUlHRnVlU0J4ZFdWemRHbHZiaXdnY0d4bFlYTmxJRHhoSUdoeVpXWTlJbTFoYVd4MGJ6cGpiMjUwWVdOMFFIQnNZWFJtYjNKdE5pNXBieUlnZEdGeVoyVjBQU0pmWW14aGJtc2lJSE4wZVd4bFBTSnRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN1kyOXNiM0k2SUNNMk5UWTFOalU3Wm05dWRDMTNaV2xuYUhRNklHNXZjbTFoYkR0MFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUhWdVpHVnliR2x1WlRzaVBuTmxibVFnZFhNZ1lTQnRaWE56WVdkbFBDOWhQaTQ4WW5JK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEdKeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4emRISnZibWMrVUd4aGRHWnZjbTBnTmlCaWVTQkJiV0ZzZEc4Z1ZHVmphRzV2Ykc5bmFXVnpQQzl6ZEhKdmJtYytQR0p5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHhpY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDY0twSm01aWMzQTdKSHN1Ym05M1AzTjBjbWx1Wnk1NWVYbDVmU1p1WW5Od08wTnZjSGx5YVdkb2RDNGdRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzQ4TDJScGRqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFZ0cFppQnRjMjlkUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBnb0pDUWtKQ1FrSkNRa0pDUWs4TDNSaFlteGxQand2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNUd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRazhJUzB0VzJsbUlHZDBaU0J0YzI4Z09WMCtDZ2tKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDVHd2ZEdGaWJHVStDZ2tKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWs4TDNSeVBnb0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNUd2hMUzBnTHk4Z1JVNUVJRlJGVFZCTVFWUkZJQzB0UGdvSkNRazhMM1JrUGdvSkNUd3ZkSEkrQ2drOEwzUmhZbXhsUGdvSlBDOWpaVzUwWlhJK0Nqd3ZZbTlrZVQ0S1BDOW9kRzFzUGdvPVwiLFwidGFyZ2V0Um9vdFwiOlwiJHtCMkJPWF9EQVRBfVwiLFwidGFyZ2V0UGF0aFwiOlwiL3Jlc291cmNlcy90ZW1wbGF0ZXMvcDZkZW1vX1BPUmV2aWV3LmZ0bFwiLFwicHJvcHNcIjp7fSxcImRlcGxveWVkXCI6dHJ1ZSxcImhhc0J5dGVzQXR0YWNobWVudFwiOnRydWUsXCJhdHRhY2htZW50TmFtZVwiOlwicDZkZW1vX1BPUmV2aWV3LmZ0bFwiLFwiYXR0YWNobWVudFNpemVcIjo1MTI2Nn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjE1NzU1OTg4MjYsIm1pbkV4dHJhU2VydmljZVZlcnNpb24iOiIiLCJtYXhFeHRyYVNlcnZpY2VWZXJzaW9uIjoiIn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5idW5kbGVkcmVzb3VyY2VzIiwibmFtZSI6IlRhYmxlSXRlbXNEYXRhIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVGFibGVJdGVtc0RhdGFcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQ1NWIGZpbGUgdG8gaW1wb3J0IGludG8gdGFibGUgSXRlbXNcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1NzU1OTg4NDQsXCJyZXZpc2lvbklkXCI6XCI3Mjg2ODllY2I3YWFiYjMwZDVhN2EwYWQzZWE2NjJlMVwiLFwiaXRlbUJ5dGVzXCI6XCJTV1FzUkdWelkzSnBjSFJwYjI0c1ZXNXBkRkJ5YVdObExFTjFjbkpsYm1ONUxGVlBUU3hEWVhSbFoyOXllUW93TURNME16UTFMRk5wYkhabGNpQklaV3h0WlhRc01qQXNWVk5FTEVWQkxFaGxiRzFsZEFveE1URXhNVEVzVTJ4dmRIUmxaQ0JUWTNKbGQyUnlhWFpsY2l3eU5TeFZVMFFzUlVFc1UyTnlaWGRrY21sMlpYSUtNVE01TkRVeE1URXNVR3hoYzNScFl5QklaV3h0WlhRc01UTXNWVk5FTEVWQkxFaGxiRzFsZEFveE5qYzJOemdzUTJ4aGR5QklZVzF0WlhJc01UVXNWVk5FTEVWQkxFaGhiVzFsY2dveU1qSXlNaklzVUdocGJHbHdjeUJUWTNKbGQyUnlhWFpsY2l3eU55eFZVMFFzUlVFc1UyTnlaWGRrY21sMlpYSUtNakl5TWpJMExGQnZlbWxrY21sMklGTmpjbVYzWkhKcGRtVnlMRE13TEZWVFJDeEZRU3hUWTNKbGQyUnlhWFpsY2dvME5EUTFOallzUTJ4MVlpQklZVzF0WlhJc01qQXNWVk5FTEVWQkxFaGhiVzFsY2dvNE9UTXlNak1zVTJ4bFpHZGxJRWhoYlcxbGNpd3hNREFzVlZORUxFVkJMRWhoYlcxbGNnbz1cIixcInRhcmdldFJvb3RcIjpcIiR7VE1QfVwiLFwidGFyZ2V0UGF0aFwiOlwiL3A2X2RlbW9faXRlbXMuY3N2XCIsXCJwcm9wc1wiOnt9LFwiZGVwbG95ZWRcIjp0cnVlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJ0YWJsZV9wNl9kZW1vLkl0ZW1zX2RhdGFfZXhwb3J0LmNzdlwiLFwiYXR0YWNobWVudFNpemVcIjozODZ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNTc1NTk4ODQ0LCJtaW5FeHRyYVNlcnZpY2VWZXJzaW9uIjoiIiwibWF4RXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiJ9XSwicGxhdGZvcm02LnN0b3JlZHByb2NlZHVyZXMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnN0b3JlZHByb2NlZHVyZXMiLCJuYW1lIjoiRGVsZXRlUDZEZW1vVHJhbnNhY3Rpb25zIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiRGVsZXRlUDZEZW1vVHJhbnNhY3Rpb25zXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkRlbGV0ZSBhbGwgcDZfZGVtbyB0cmFuc2FjdGlvbiAtIGF1dG9tYXRpY2FsbHkgY2FsbGVkIHdoZW4gcDZfZGVtbyBhcHBsaWNhdGlvbiBpcyB1bmluc3RhbGxlZFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODUwNyxcInJldmlzaW9uSWRcIjpcImQxZmFjYWQwOWQxYjYyNWRkMDdlMzY1YjFjY2QxMTViXCIsXCJ0eXBlXCI6XCJVc2VyRGVmaW5lZFwiLFwidXNlclF1ZXJ5VmFsdWVcIjpcImRlbGV0ZVxcbmZyb20gcDZjb3JlLml0ZW1cXG53aGVyZSB4cGF0aF9leGlzdHMoJy9UcmFuc2FjdGlvbkluZm8vS2V5VmFsdWVbLi9LZXkgPSBcXFwiQXBwbGljYXRpb25cXFwiIGFuZCBWYWx1ZT1cXFwicDZfZGVtb1xcXCJdJyAsIGNvbnRlbnQpO1xcblxcbmRlbGV0ZVxcbmZyb20gcDZjb3JlLml0ZW1cXG53aGVyZSB4cGF0aF9leGlzdHMoJy9Xb3JrZmxvd1Rhc2svZmxpbmsvdmlld1suPVxcXCJwNl9kZW1vLlRyYW5zYWN0aW9uc1xcXCJdJyAsIGNvbnRlbnQpO1xcblwiLFwidGFyZ2V0RGF0YVNvdXJjZU5hbWVcIjpudWxsLFwiZGVmaW5lZFBhcmFtZXRlcnNcIjp7fSxcImNhY2hpbmdPdmVycmlkZVwiOmZhbHNlLFwiYXBwZW5kVGFyZ2V0RGF0YVNvdXJjZVwiOmZhbHNlfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODUwNywibWluRXh0cmFTZXJ2aWNlVmVyc2lvbiI6IiIsIm1heEV4dHJhU2VydmljZVZlcnNpb24iOiIifV19", "enabled": false, "version": "0.9.0", "installed": false, "signature": "iFQW0O4XEEegBOjeFCSa9uPhgsLOYGmSNBp00+HqghXRAqYytr/n38ARcT3XMCsf83YU7sHxiQi9jTXOOl+CL8DGzxMH6W8YtFHOgS6XAgwKAxJbCeYgx0jD75R/wMHrxiW/2hJId0fk36vgER3wQv1iXs/DO7ZeTwsqqDlFvB8=", "createDate": 1563207513125, "expiryDays": 0, "revisionId": "48132e8a66f5d620dd8e5f9960a84b48", "contentMode": "READ", "description": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "publisherId": "4d8c4ac1-9db1-44d9-8d4e-604a845478e9", "appProperties": null, "publisherName": "Platform 6", "lastModifiedBy": "choucri.fahed@amalto.com", "applicationName": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "componentBundle": null, "installationDate": null, "lastModifiedDate": 1563870921843, "underDevelopment": false, "uninstallScriptId": "UninstallApplication", "maxInstanceVersion": "", "minInstanceVersion": "6.0.0-alpha-5", "preInstallScriptId": null, "postInstallScriptId": "InitializeApplication"} \N 1563870921894
WorkflowTask datamodels {"name": "WorkflowTask", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n", "enabled": false, "revisionId": "05d747b40331bffd64ce9f7aa64c7692", "contentMode": "READ", "description": {"EN": "WorkflowTask Data Model"}, "lastModifiedBy": null, "lastModifiedDate": 1562691470454} \N 1562691470561
-TransactionInfo datamodels {"name": "TransactionInfo", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n", "enabled": false, "revisionId": "496ee1078835d0c5761ed911ff48d62e", "contentMode": "READ", "description": {"EN": "TransactionInfo Data Model"}, "lastModifiedBy": null, "lastModifiedDate": 1563879036183} \N 1563879036261
-MessageInfo datamodels {"name": "MessageInfo", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n", "enabled": false, "revisionId": "301a8ba2b16b779897183cb2bafedc83", "contentMode": "READ", "description": {"EN": "MessageInfo Data Model"}, "lastModifiedBy": null, "lastModifiedDate": 1563879036555} \N 1563879036563
+2c101aa8e2234e1baf8bbd278ce3732d p6_demo applications {"logo": "data:image/jpeg;base64,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", "name": "2c101aa8e2234e1baf8bbd278ce3732d", "appKey": "p6_demo", "status": "6.0.0-beta-1", "content": "eyJwbGF0Zm9ybTYudmlld3MiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnZpZXdzIiwibmFtZSI6IlRyYW5zYWN0aW9ucyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUcmFuc2FjdGlvbnMgZm9yIHA2X2RlbW9cIixcIkZSXCI6XCJUcmFuc2FjdGlvbnMgcG91ciBwNl9kZW1vXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1NjQsXCJyZXZpc2lvbklkXCI6XCI1Y2ZmMGFkMTQ5ZDJjMzFkNmQyOWNiMGUzZDA3YWJkYVwiLFwidHlwZVwiOlwiVFJBTlNBQ1RJT05TXCIsXCJ4bWxWaWV3XCI6XCI8Vmlldz5cXG4gICAgPFNtYXJ0VGFncz5cXG4gICAgICAgIDxUcmFuc2FjdGlvblR5cGU+VHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZTwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICAgICAgPFRyYW5zYWN0aW9uRm9ybWF0PlRyYW5zYWN0aW9uSW5mby9QaXZvdERvY3VtZW50Rm9ybWF0PC9UcmFuc2FjdGlvbkZvcm1hdD5cXG4gICAgPC9TbWFydFRhZ3M+XFxuICAgIDxEYXRhVHlwZT5UcmFuc2FjdGlvbkluZm88L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPlRyYW5zYWN0aW9uSW5mbzwvRGF0YU1vZGVsPlxcbiAgICA8RGF0YVBhcnRpdGlvbj5UUkFOU0FDVElPTjwvRGF0YVBhcnRpdGlvbj5cXG4gICAgPFJlcHJvY2Vzc1JvdXRlVXJpPmRpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXI8L1JlcHJvY2Vzc1JvdXRlVXJpPlxcbiAgICA8TGlzdE9mS2V5cz5cXG4gICAgICAgIDxLZXk+XFxuICAgICAgICAgICAgPE5hbWU+SWQ8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+SWQ8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+SWQ8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9JZDwvWFBhdGg+XFxuICAgICAgICA8L0tleT5cXG4gICAgPC9MaXN0T2ZLZXlzPlxcbiAgICA8TGlzdE9mU2VhcmNoYWJsZXM+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Mb2FkRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Mb2FkIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBjcsOpYXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9DcmVhdGlvbkRhdGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlJhbmdlT2ZEYXRlcyh5eXl5TU1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlN0YXR1c0RhdGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VGVjaC4gU3RhdHVzIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBtb2RpZi4gU3RhdHV0IFRlY2guPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzRGF0ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+UmFuZ2VPZkRhdGVzKHl5eXlNTWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VHJhbnNhY3Rpb25UeXBlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRyYW5zYWN0aW9uIFR5cGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+VHlwZSBkZSB0cmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICAgICAgPENob2ljZSBmaWVsZC1saW5lLWhlaWdodD1cXFwiMVxcXCIgbXVsdGktc2VsZWN0PVxcXCJ0cnVlXFxcIiBtdWx0aS1zZWxlY3QtZGVsaW1pdGVyPVxcXCJ8XFxcIj5SZXF1ZXN0IGZvciBRdW90YXRpb24sIFF1b3RlLCBQdXJjaGFzZSBPcmRlcjwvQ2hvaWNlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VHJhbnNhY3Rpb25OdW1iZXI8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gTnVtYmVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk51bcOpcm8gZGUgdHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvbk51bWJlcjwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5CdXllck5hbWU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+QnV5ZXIgTmFtZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Ob20gZGUgbCdhY2hldGV1cjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlWy4vS2V5ID0gXFxcIkJ1eWVyIE5hbWVcXFwiXS9WYWx1ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5LZXl3b3JkczwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5LZXl3b3JkczwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Nb3RzIGNsZWZzPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm88L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+VGVjaG5pY2FsU3RhdHVzQ29kZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UZWNobmljYWwgU3RhdHVzPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlN0YXR1dCB0ZWNobmlxdWU8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgICAgICA8Q2hvaWNlIGZpZWxkLWxpbmUtaGVpZ2h0PVxcXCIyXFxcIiBtdWx0aS1zZWxlY3Q9XFxcInRydWVcXFwiIG11bHRpLXNlbGVjdC1kZWxpbWl0ZXI9XFxcInxcXFwiPkhhbmRsZWQsUmVjZWl2ZWQsU2VudDwvQ2hvaWNlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+RnVuY3Rpb25hbFN0YXR1c0NvZGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+RnVuY3Rpb25hbCBTdGF0dXM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+U3RhdHV0IGZvbmN0aW9ubmVsPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vRnVuY3Rpb25hbFN0YXR1c0NvZGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgICAgIDxDaG9pY2UgZmllbGQtbGluZS1oZWlnaHQ9XFxcIjJcXFwiIG11bHRpLXNlbGVjdD1cXFwidHJ1ZVxcXCIgbXVsdGktc2VsZWN0LWRlbGltaXRlcj1cXFwifFxcXCI+QWNjZXB0ZWQsRGVjbGluZWQsUXVvdGUgcHJvdmlkZWQsUmVqZWN0ZWQ8L0Nob2ljZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgPC9MaXN0T2ZTZWFyY2hhYmxlcz5cXG4gICAgPExpc3RPZlZpZXdhYmxlcz5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Mb2FkRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Mb2FkIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBkZSBjcsOpYXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9DcmVhdGlvbkRhdGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eU1NZGQnVCdISDptbTpzcyk8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlN0YXR1c0RhdGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+U3RhdHVzIERhdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RGF0ZSBzdGF0dXQ8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNEYXRlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5EYXRlKHl5eXlNTWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UcmFuc2FjdGlvblR5cGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGRlIHRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlRyYW5zYWN0aW9uTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRyYW5zYWN0aW9uICM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+TsKwIGRlIHRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25OdW1iZXI8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+U2VsbGVyTmFtZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5TZWxsZXIgTmFtZTwvRU4+XFxuICAgICAgICAgICAgICAgICA8RlI+Tm9tIHZlbmRldXI8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9LZXlWYWx1ZVtLZXk9XFxcIlNlbGxlciBOYW1lXFxcIl0vVmFsdWU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+QnV5ZXJOYW1lPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkJ1eWVyIE5hbWU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+Tm9tIGRlIGwnYWNoZXRldXI8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9LZXlWYWx1ZVtLZXk9XFxcIkJ1eWVyIE5hbWVcXFwiXS9WYWx1ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UZWNobmljYWxTdGF0dXNDb2RlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRlY2guIFN0YXR1czwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgdGVjaC48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkZ1bmN0aW9uYWxTdGF0dXNDb2RlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkZ1bmN0LiBTdGF0dXM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+U3RhdHV0IGZvbmN0LjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0Z1bmN0aW9uYWxTdGF0dXNDb2RlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkZ1bmN0LiBTdGF0dXMgTXNnLjwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgRm9uY3QuIE1zZy48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5Eb2N1bWVudDwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5Eb2N1bWVudDwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5BY2PDqHMgZG9jLjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RhcmdldERvY3VtZW50VVJJPC9YUGF0aD5cXG4gICAgICAgICAgICAgPFR5cGU+VVJJPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIFxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgIDxOYW1lPml0ZW1MaW5rPC9OYW1lPlxcbiAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8RU4+V29yayBJdGVtPC9FTj5cXG4gICAgICAgICAgICA8RlI+VHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9Xb3JrZmxvdy9JbnN0YW5jZS9mbGluazwvWFBhdGg+XFxuICAgICAgICAgPFR5cGU+SXRlbUxpbms8L1R5cGU+XFxuICAgICAgPC9WaWV3YWJsZT5cXG4gICAgPC9MaXN0T2ZWaWV3YWJsZXM+XFxuPC9WaWV3PlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODU2NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi52aWV3cyIsIm5hbWUiOiJXb3JrZmxvdyBUYXNrcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldvcmtmbG93IFRhc2tzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIldvcmtmbG93IFRhc2tzIGZvciBwNl9kZW1vXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1NzgsXCJyZXZpc2lvbklkXCI6XCIyMGY2MTFlYjg2MzUzYjdhNzk3ZGQ2Y2Y3NmQ2ZGExM1wiLFwidHlwZVwiOlwiV09SS0lURU1TXCIsXCJ4bWxWaWV3XCI6XCI8Vmlldz5cXG4gICAgPFNtYXJ0VGFncy8+XFxuICAgIDxEYXRhVHlwZT5Xb3JrZmxvd1Rhc2s8L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPldvcmtmbG93VGFzazwvRGF0YU1vZGVsPlxcbiAgICA8RGF0YVBhcnRpdGlvbj5UUkFOU0FDVElPTjwvRGF0YVBhcnRpdGlvbj5cXG4gICAgPFJlcHJvY2Vzc1JvdXRlVXJpLz5cXG4gICAgPExpc3RPZktleXM+XFxuICAgICAgICA8S2V5PlxcbiAgICAgICAgICAgIDxOYW1lPklkPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPklkPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPklkPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaWQ8L1hQYXRoPlxcbiAgICAgICAgPC9LZXk+XFxuICAgIDwvTGlzdE9mS2V5cz5cXG4gICAgPExpc3RPZlNlYXJjaGFibGVzPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+RG9jLiBUeXBlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGR1IERvYzwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25UeXBlXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkRvYy4gTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gTnVtYmVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk7CsCBkdSBEb2M8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPldvcmtmbG93VGFzay9pdGVtQXR0cmlidXRlc1trZXk9XFxcIlRyYW5zYWN0aW9uTnVtYmVyXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkFzc2lnbmVlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkFzc2lnbmVlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRlc3RpbmF0YWlyZTwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2Fzc2lnbmVlcy9hc3NpZ25lZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+SW5MaXN0PC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICA8L0xpc3RPZlNlYXJjaGFibGVzPlxcbiAgICA8TGlzdE9mVmlld2FibGVzPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPldGU3RhcnREYXRlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBTdGFydCBEYXRlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRhdGUgZGUgZMOpYnV0PC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJTdGFydERhdGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eS1NTS1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgIDxOYW1lPkRvY1R5cGU8L05hbWU+XFxuICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgIDxGUj5UeXBlPC9GUj5cXG4gICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPFhQYXRoPi9Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJUcmFuc2FjdGlvblR5cGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgPE5hbWU+RG9jTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgIDxFTj5Eb2MuIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgIDxGUj5OwrAgZG9jLjwvRlI+XFxuICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgIDxYUGF0aD4vV29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25OdW1iZXJcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICBcXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5pdGVtTGluazwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UcmFuc2FjdGlvbjwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UcmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2ZsaW5rPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5JdGVtTGluazwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+V29ya2Zsb3dTdGVwPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBBY3Rpb25zPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjdGlvbnMgV0YuPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svc3RlcC9Xb3JrZmxvd1N0ZXA8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPldvcmtmbG93U3RlcDwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgIDwvTGlzdE9mVmlld2FibGVzPlxcbjwvVmlldz5cXG5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1Nzh9XSwicGxhdGZvcm02LnJvdXRlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlJvdXRpbmdSdWxlRGlzcGF0Y2hlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJvdXRpbmdSdWxlRGlzcGF0Y2hlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEaXNwYXRjaGVyIHRvIFJGUSwgUXVvdGUgb3IgUE8gUm91dGluZyBSdWxlc1wifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MDAzLFwicmV2aXNpb25JZFwiOlwiZjA1MDM1NzA2NGJiMmVmYWU4NTQ3ZmVmZGYzYmY2ZDRcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcbiAgICAgICAgICAgIC5jaG9pY2UoKVxcbiAgICAgICAgICAgICAgICAud2hlbih4cGF0aChcXFwiL1RyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvblR5cGU9J1JlcXVlc3QgRm9yIFF1b3RhdGlvbidcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC50bygnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUmVxdWVzdEZvclF1b3RhdGlvbicpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZT0nUXVvdGUnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAudG8oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1F1b3RlJylcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPSdQdXJjaGFzZSBPcmRlcidcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC50bygnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUHVyY2hhc2VPcmRlcicpXFxuICAgICAgICAgICAgICAgIC5vdGhlcndpc2UoKVxcbiAgICAgICAgICAgICAgICAgICAgLnRocm93RXhjZXB0aW9uKGlvLnBsYXRmb3JtNi5jb21tb24udXRpbC5QNkV4Y2VwdGlvbiwnTm8gbWF0Y2hpbmcgcnVsZSBmb3VuZCBmb3IgaXRlbSEnKVxcbiAgICAgICAgICAgIC5lbmQoKVxcbiAgICAgICAgICAgIC5yb3V0ZUlkKFxcXCJwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlclxcXCIpXFxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlclxcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MDAzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJTY2hlZHVsZXJGb3JSRlFDcmVhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNjaGVkdWxlckZvclJGUUNyZWF0aW9uXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlNjaGVkdWxlZCBjcmVhdGlvbiBvZiBSZXF1ZXN0cyBmb3IgUXVvdGF0aW9uXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjMxOTc3ODk3OTgsXCJyZXZpc2lvbklkXCI6XCJmZmM2MTA4MTEzNDU2M2RkODMyZWEwMTI0NTdjODhmNVwiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwiZGVmIHJvdXRlSWQgPSBcXFwicDZfZGVtbyBTY2hlZHVsZWQgY3JlYXRpb24gb2YgUkZRc1xcXCJcXG5cXG50cnkge1xcbiAgICBwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG4gICAgICAgIHZvaWQgY29uZmlndXJlKCkge1xcbiAgICAgICAgICAgIGZyb20oXFxcInRpbWVyOi8vbXlUaW1lcj9wZXJpb2Q9MTBtXFxcIilcXG4gICAgICAgICAgICAgICAgLnRvKCdwNmNtYjovL3NjcmlwdHM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPWV4ZWN1dGUmaWQ9cDZfZGVtby5DcmVhdGVSRlFUcmFuc2FjdGlvbicpXFxuICAgICAgICAgICAgICAgIC5yb3V0ZUlkKHJvdXRlSWQpXFxuICAgICAgICAgICAgICAgIC5kZXNjcmlwdGlvbihyb3V0ZUlkKVxcbiAgICAgICAgfVxcbiAgICB9KVxcblxcbiAgICBwNi51dGlscy5wYXVzZSgpXFxufSBmaW5hbGx5IHtcXG4gIHA2LmNhbWVsLmRlc3Ryb3lSb3V0ZShyb3V0ZUlkKVxcbn1cXG5cIixcInR5cGVcIjpcInNjaGVkdWxlclwiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjMxOTc3ODk3OTh9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlJvdXRpbmdSdWxlc0ZvclB1cmNoYXNlT3JkZXJzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUm91dGluZ1J1bGVzRm9yUHVyY2hhc2VPcmRlcnNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1Nzg5OTM3MTAsXCJyZXZpc2lvbklkXCI6XCI3ZDhlM2I4ZmM0ZDk0ZmFiMmExNGJlOGY5NzBkYmJiY1wiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwicDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuXFxuICAgIHZvaWQgY29uZmlndXJlKCkge1xcblxcbiAgICAgICAgZnJvbSgnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUHVyY2hhc2VPcmRlcicpXFxuICAgICAgICAgICAgLmNob2ljZSgpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0NvZGU9J1JlY2VpdmVkJ1xcXCIpKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwicGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uXFxcIikuY29uc3RhbnQoXFxcImludm9rZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGF0dXNcXFwiKS5jb25zdGFudChcXFwiUmVjZWl2ZWRcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwic3RlcFxcXCIpLmNvbnN0YW50KFxcXCJIYW5kbGVQdXJjaGFzZU9yZGVyXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcImFwcGtleVxcXCIpLmNvbnN0YW50KFxcXCJwNl9kZW1vXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcImZsb3duYW1lXFxcIikuY29uc3RhbnQoXFxcIlVVSURcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwic2NyaXB0XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW8uV0ZTdGVwQnVpbGRlclxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAudG8oXFxcInA2cm91dGU6Ly9wbGF0Zm9ybTYud29ya2Zsb3dzdGVwc1xcXCIpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzJylcXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzXFxcIilcXG4gICAgfVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJ4bWxfcm91dGluZ1wiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjE1Nzg5OTM3MTB9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlNjaGVkdWxlckZvckNvdW50ZXJzUmVmcmVzaCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNjaGVkdWxlckZvckNvdW50ZXJzUmVmcmVzaFwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRlcnNcIixcIkZSXCI6XCJBY3R1YWxpc2F0aW9uIHBsYW5pZmnDqWUgZGVzIGNvbXB0ZXVyc1wifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MDI4LFwicmV2aXNpb25JZFwiOlwiMzlkYTE5NmNkNGNkNTM4YjJiMmU1ZTE1MWU0ZGQ4ZTZcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcblxcdGRlZiB2b2lkIGNvbmZpZ3VyZSgpIHtcXG5cXHRcXHRmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfUkZRcz9jcm9uPTArMSsqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudFJGUXMnKVxcblxcdFxcdFxcdC5yb3V0ZUlkKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSRlFzJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UkZRcyBjb3VudGVyXFxcIilcXG5cXG5cXHRcXHRmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfUXVvdGVzP2Nyb249MCsyKyorKisqKz8rKlxcXCIpXFxuXFx0XFx0XFx0LnRvKCdwNmNtYjovL2NvdW50ZXJzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1zeW5jaHJvbml6ZSZpZD1wNl9kZW1vLkNvdW50UXVvdGVzJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50UXVvdGVzJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UXVvdGVzIGNvdW50ZXJcXFwiKVxcblxcbiAgICAgICAgZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X1BPc19BY2NlcHRlZD9jcm9uPTArMysqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudEFjY2VwdGVkUE9zJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50QWNjZXB0ZWRQT3MnKVxcblxcdFxcdFxcdC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRBY2NlcHRlZFBPcyBjb3VudGVyXFxcIilcXG5cXG4gICAgICAgIGZyb20oXFxcInF1YXJ0ejI6Ly9wbGF0Zm9ybTYvcDZyb3V0ZV9Db3VudF9QT3NfUmVqZWN0ZWQ/Y3Jvbj0wKzQrKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRSZWplY3RlZFBPcycpXFxuXFx0XFx0XFx0LnJvdXRlSWQoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFJlamVjdGVkUE9zJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50UmVqZWN0ZWRQT3MgY291bnRlclxcXCIpXFxuXFxuXFx0XFx0ZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X0ZhaWxlZFJvdXRpbmdPcmRlcnM/Y3Jvbj0wKzAvMTUrKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50RmFpbGVkUm91dGluZ09yZGVycycpXFxuXFx0XFx0XFx0LmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFNjaGVkdWxlZCByZWZyZXNoIG9mIHRoZSBDb3VudEZhaWxlZFJvdXRpbmdPcmRlcnMgY291bnRlclxcXCIpXFxuXFx0fVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJzY2hlZHVsZXJcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MDI4fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJCbG9ja2NoYWluRXZlbnRIYW5kbGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQmxvY2tjaGFpbkV2ZW50SGFuZGxlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJCbG9ja2NoYWluIEV2ZW50IEhhbmRsZXJcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MzE5ODQyMjU0OCxcInJldmlzaW9uSWRcIjpcIjc1YTUxMTc2Mjc1MWI5N2U0ODUzYzA0Zjc2MDZlMDRhXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJkZWYgZXRoQ2xpZW50VVJMID0gcDYuYXBwY29uZmlnLmdldCgncDZfZGVtbycsICdldGhDbGllbnRVUkwnKVxcbmRlZiBjb250cmFjdEFkZHJlc3MgPSAgcDYuYXBwY29uZmlnLmdldCgncDZfZGVtbycsICdjb250cmFjdEFkZHJlc3MnKVxcblxcbnA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oXFxcIndlYjNqOi8vXFxcIiArIGV0aENsaWVudFVSTCArIFxcXCI/YWRkcmVzcz1cXFwiICsgY29udHJhY3RBZGRyZXNzICsgXFxcIiZvcGVyYXRpb249RVRIX0xPR19GTE9XQUJMRVxcXCIpXFxuICAgICAgICAgICAgLnRvKFxcXCJwNmNtYjovL3NjcmlwdHM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPWV4ZWN1dGUmaWQ9cDZfZGVtby5CbG9ja2NoYWluRXZlbnRIYW5kbGVyXFxcIilcXG4gICAgICAgICAgICAucm91dGVJZChcXFwicDZfZGVtbyBXZWIzaiAtIEJsb2NrY2hhaW5FdmVudEhhbmRsZXJcXFwiKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBCbG9ja2NoYWluIEV2ZW50IEhhbmRsZXJcXFwiKVxcbiAgICB9XFxufSlcXG5cIixcInR5cGVcIjpcIndlYjNqXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MzE5ODQyMjU0OH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5yb3V0ZXMiLCJuYW1lIjoiUm91dGluZ1J1bGVzRm9yUkZRcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJvdXRpbmdSdWxlc0ZvclJGUXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnNcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTU3ODk5Mzc1MyxcInJldmlzaW9uSWRcIjpcIjY5NDg1ZGFmYmIyZGVlYzQ4YTc2ZmI5MGM4ZTdmNGVkXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG5cXG4gICAgdm9pZCBjb25maWd1cmUoKSB7XFxuICAgICAgICBmcm9tKCdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19SZXF1ZXN0Rm9yUXVvdGF0aW9uJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzQ29kZT0nUmVjZWl2ZWQnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJwbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb25cXFwiKS5jb25zdGFudChcXFwiaW52b2tlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcInN0YXR1c1xcXCIpLmNvbnN0YW50KFxcXCJSZWNlaXZlZFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGVwXFxcIikuY29uc3RhbnQoXFxcIkhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb25cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiYXBwa2V5XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiZmxvd25hbWVcXFwiKS5jb25zdGFudChcXFwiVVVJRFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzY3JpcHRcXFwiKS5jb25zdGFudChcXFwicDZfZGVtby5XRlN0ZXBCdWlsZGVyXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC50byhcXFwicDZyb3V0ZTovL3BsYXRmb3JtNi53b3JrZmxvd3N0ZXBzXFxcIilcXG4gICAgICAgICAgICAgICAgLm90aGVyd2lzZSgpXFxuICAgICAgICAgICAgICAgICAgICAudGhyb3dFeGNlcHRpb24oaW8ucGxhdGZvcm02LmNvbW1vbi51dGlsLlA2RXhjZXB0aW9uLCdObyBtYXRjaGluZyBydWxlIGZvdW5kIGZvciBpdGVtIScpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnNcXFwiKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBSZXF1ZXN0Rm9yUXVvdGF0aW9uc1xcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNTc4OTkzNzUzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJSb3V0aW5nUnVsZXNGb3JRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSb3V0aW5nUnVsZXNGb3JRdW90ZXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUXVvdGVzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDcyNDc4MDcsXCJyZXZpc2lvbklkXCI6XCI0ZGUzY2RmZGJlMTJkZDVmMzIzZmViY2FhZjY5ZDA0ZVwiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwicDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuICAgIFxcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1F1b3RlJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzQ29kZT0nQ3JlYXRlZCdcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoICdwbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb24nKS5jb25zdGFudCgnZXhlY3V0ZScpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJhcHBrZXlcXFwiKS5jb25zdGFudChcXFwicDZfZGVtb1xcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKCdpZCcpLmNvbnN0YW50KCdwNl9kZW1vLlNlbmRRdW90ZVRvQmxvY2tjaGFpbicpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0UHJvcGVydHkoJ2V4ZWN1dGUuYXN5bmMnKS5jb25zdGFudCh0cnVlKVxcbiAgICAgICAgICAgICAgICAgICAgLnRvKFxcXCJwNnJvdXRlOi8vcGxhdGZvcm02LnNjcmlwdHNcXFwiKVxcbiAgICAgICAgICAgICAgICAub3RoZXJ3aXNlKClcXG4gICAgICAgICAgICAgICAgICAgIC50aHJvd0V4Y2VwdGlvbihpby5wbGF0Zm9ybTYuY29tbW9uLnV0aWwuUDZFeGNlcHRpb24sJ05vIG1hdGNoaW5nIHJ1bGUgZm91bmQgZm9yIGl0ZW0hJylcXG4gICAgICAgICAgICAuZW5kKClcXG4gICAgICAgICAgICAucm91dGVJZCgncDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBRdW90ZXMnKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBRdW90ZXNcXFwiKVxcbiAgICB9XFxufSlcXG5cIixcInR5cGVcIjpcInhtbF9yb3V0aW5nXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NzI0NzgwN31dLCJwbGF0Zm9ybTYudGFibGVzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi50YWJsZXMiLCJuYW1lIjoiSXRlbXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJJdGVtc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJJdGVtc1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODU0NSxcInJldmlzaW9uSWRcIjpcIjk1MjUxOTI4YTdlMTZlMTI5MTlkMjhmNzdjMDc2NTQ4XCIsXCJmaWVsZHNcIjpbe1wibmFtZVwiOlwiSWRcIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH0se1wibmFtZVwiOlwiRGVzY3JpcHRpb25cIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH0se1wibmFtZVwiOlwiVW5pdFByaWNlXCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcIkN1cnJlbmN5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcIlVPTVwiLFwidHlwZVwiOlwic3RyaW5nXCIsXCJsZW5ndGhcIjotMS4wfSx7XCJuYW1lXCI6XCJDYXRlZ29yeVwiLFwidHlwZVwiOlwic3RyaW5nXCIsXCJsZW5ndGhcIjotMS4wfV0sXCJrZXlzXCI6W1wiSWRcIl19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4NTQ1fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnRhYmxlcyIsIm5hbWUiOiJBcHBDb25maWciLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJBcHBDb25maWdcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQXBwbGljYXRpb24gQ29uZmlndXJhdGlvbiBUYWJsZVwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODUzMyxcInJldmlzaW9uSWRcIjpcImY1OTkzMWM0M2Q3YjlkNTc5NzE3ODIxM2FiOTQxMDVkXCIsXCJmaWVsZHNcIjpbe1wibmFtZVwiOlwia2V5XCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcInZhbHVlXCIsXCJ0eXBlXCI6XCJzdHJpbmdcIixcImxlbmd0aFwiOi0xLjB9LHtcIm5hbWVcIjpcInR5cGVcIixcInR5cGVcIjpcInN0cmluZ1wiLFwibGVuZ3RoXCI6LTEuMH1dLFwia2V5c1wiOltcImtleVwiXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1MzN9XSwicGxhdGZvcm02LnNjcmlwdHMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiVmlld19Xb3JrZmxvdyBUYXNrcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlZpZXdfV29ya2Zsb3cgVGFza3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJvdmlkZSBodG1sIGRpc3BsYXkgb2YgV29ya2Zsb3cgVGFza3NcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTgyMTksXCJyZXZpc2lvbklkXCI6XCIyOWZmMTM4Y2MzYTliOTk3ZjE1ZDUwMWUzZjljZTc5NFwiLFwibWFpblNjcmlwdFwiOlwiZGVmIHJlc3VsdHMgPSBwNi54c2x0LnByb2Nlc3MoXFxcIlZpZXdfV29ya2xvdyBUYXNrc1xcXCIsIHA2LnJlc291cmNlLmdldCgnV29ya2Zsb3dfVGFza190b19IVE1MJyksIHA2LnBpcGVsaW5lLmdldCggJ3htbCcpKVxcblxcbnA2LnBpcGVsaW5lLnB1dCAncG9ydGFsSHRtbCcsIHJlc3VsdHMsICd0ZXh0L2h0bWwnXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOlt7XCJuYW1lXCI6XCJXb3JrZmxvd19UYXNrX3RvX0hUTUxcIixcInR5cGVcIjpcIlhTTFRcIixcImNvbnRlbnRcIjpcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD1cXFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtXFxcIiB2ZXJzaW9uPVxcXCIyLjBcXFwiPlxcbiAgICA8eHNsOm91dHB1dCBtZXRob2Q9XFxcImh0bWxcXFwiIGluZGVudD1cXFwieWVzXFxcIiBvbWl0LXhtbC1kZWNsYXJhdGlvbj1cXFwieWVzXFxcIiAvPlxcbiAgICBcXG4gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD1cXFwiL1dvcmtmbG93VGFza1xcXCI+XFxuXFxuXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZpZXctd3JhcHBlclxcXCI+XFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHRleHQtbWVkaXVtXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J1RyYW5zYWN0aW9uVHlwZSddL3ZhbHVlcy9fdGV4dFxcXCIvPjx4c2w6dGV4dD4gIyA8L3hzbDp0ZXh0Pjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J1RyYW5zYWN0aW9uTnVtYmVyJ10vdmFsdWVzL190ZXh0XFxcIi8+PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHRleHQtbWVkaXVtXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPkFzc2lnbmVkIHRvOjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVxcXCIjXFxcIiBkYXRhLXRvZ2dsZT1cXFwibW9kYWxcXFwiIGRhdGEtdGFyZ2V0PVxcXCIjYXNzaWduZWVzRGlhbG9nXFxcIj48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdBc3NpZ25lZFRvJ10vdmFsdWVzL0VOXFxcIi8+PC9hPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbGctNFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGF0dXM8L2Rpdj5cXG5cXHQgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdTdGF0dXMnXS92YWx1ZXMvRU5cXFwiLz48L2Rpdj5cXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbGctNFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGFydCBkYXRlPC9kaXY+XFxuXFx0ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9XFxcIml0ZW1BdHRyaWJ1dGVzW2tleT0nU3RhcnREYXRlJ10vdmFsdWVzL190ZXh0XFxcIi8+PC9kaXY+XFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0PC9kaXY+XFxuICAgICAgICBcXG4gICAgICAgIDxkaXYgaWQ9XFxcImFzc2lnbmVlc0RpYWxvZ1xcXCIgY2xhc3M9XFxcIm1vZGFsIGZhZGVcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWRpYWxvZ1xcXCI+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWNvbnRlbnRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtaGVhZGVyXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImNsb3NlXFxcIiBkYXRhLWRpc21pc3M9XFxcIm1vZGFsXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JiMyMTU7PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cXFwibW9kYWwtdGl0bGVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicmlnaHQtc3BhY2VkXFxcIj5Bc3NpZ25lZCB0bzo8L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J0Fzc2lnbmVkVG8nXS92YWx1ZXMvRU5cXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2g0PlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1ib2R5XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XFxcImJhc2ljLWxpc3Qgbm8tYm90dG9tLW1hcmdpblxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PVxcXCJhc3NpZ25lZXMvYXNzaWduZWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCIuXFxcIi8+PC9saT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcblxcdDwveHNsOnRlbXBsYXRlPlxcblxcbjwveHNsOnN0eWxlc2hlZXQ+XCIsXCJjb21waWxlZENvbnRlbnRcIjpudWxsLFwiYnl0ZUNvbnRlbnRcIjpudWxsfV19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MjE5fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZTdGVwQnVpbGRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGU3RlcEJ1aWxkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWRhcHQgV29ya2Zsb3cgU3RlcHMgb24gdGhlIGZseSBsZXZlcmFnaW5nIGEgV29ya2Zsb3cgU3RlcCB1c2VkIGFzIHRlbXBsYXRlIChvcHRpb25hbClcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ4MjEsXCJyZXZpc2lvbklkXCI6XCIwOGQyOWRhZWJhN2E0NmNiMjhiYTAwZWZlZDNmYTc0ZVwiLFwibWFpblNjcmlwdFwiOlwicDYucGlwZWxpbmUudmFyaWFibGVzKCkuZWFjaCgpIHsgbG9nLmRlYnVnIFxcXCJQSVBFTElORSBWQVIgJHtpdH1cXFwiIH1cXG5cXG5kZWYgd29ya2Zsb3dTdGVwID0gcDYucGlwZWxpbmUuZ2V0WG1sICd0ZW1wbGF0ZVN0ZXBYbWwnXFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaXRlbUlkcyA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuaWRzJ1xcblxcbmRlZiBpdGVtUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCBpdGVtSWRzKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZXhpc3RzKGl0ZW1QaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuLy9kZWYgdHJhbnNhY3Rpb25JbmZvID0gcGlwZWxpbmUuZ2V0WG1sICdfREVGQVVMVF8nXFxuXFxuXFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyogIEFERCBPTkUgUEFSQU1FVEVSIEJZIExJTkUgVE8gQUNUSU9OICAgKi9cXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG5cXG5kZWYgbXlBY3Rpb24gPSB3b3JrZmxvd1N0ZXAuQWN0aW9ucy5BY3Rpb24uZmluZHtpdC5AaWQgPSAnc2VuZCd9XFxuXFxuaW50IG5iTGluZXMgPSBJbnRlZ2VyLnBhcnNlSW50KHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5maW5ke2l0LktleSA9PSAnTGluZSBpdGVtcyd9LlZhbHVlLnRleHQoKSlcXG5cXG5kZWYgc3RlcFhtbCA9IGdyb292eS54bWwuWG1sVXRpbC5zZXJpYWxpemUoIHdvcmtmbG93U3RlcCApXFxuXFxucDYucGlwZWxpbmUucHV0ICdzdGVwWG1sJywgc3RlcFhtbFxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ4MjF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJJbml0aWFsaXplQXBwbGljYXRpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJJbml0aWFsaXplQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVwbG95IEJ1bmRsZWQgUmVzb3VyY2VzIGFuZCBpbml0aWFsaXplIFRhYmxlc1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQzOTkzNTY3OSxcInJldmlzaW9uSWRcIjpcIjc5MDY0ZDkwMmQyZjg3YTVkODE2NjQ4ZmZiNzM2Zjk5XCIsXCJtYWluU2NyaXB0XCI6XCIvLyBUaGlzIHNjcmlwdCBpcyBsYXVuY2hlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb24gdGhlIGluc3RhbmNlXFxuXFxuXFxuaW1wb3J0IGlvLnBsYXRmb3JtNi5kZW1vLnNjLlJlcXVlc3RGb3JRdW90YXRpb25zXFxuXFxuaW1wb3J0IG9yZy53ZWIzai50eC4qXFxuaW1wb3J0IG9yZy53ZWIzai50eC5yZXNwb25zZS5Qb2xsaW5nVHJhbnNhY3Rpb25SZWNlaXB0UHJvY2Vzc29yXFxuXFxuXFxuLy8gRGVwbG95IChjb3B5IHRvIGxvY2FsIGZpbGUgc3lzdGVtKSBidW5kbGVkIHJlc291cmNlc1xcbnA2LmJ1bmRsZWQuZGVwbG95KCdwNl9kZW1vLkRlbW9TbWFydENvbnRyYWN0JylcXG5wNi5idW5kbGVkLmRlcGxveSgncDZfZGVtby5QT1JldmlldycpXFxucDYuYnVuZGxlZC5kZXBsb3koJ3A2X2RlbW8uVGFibGVJdGVtc0RhdGEnKVxcbmxvZy5kZWJ1ZyAnTG9hZGVkIGJ1bmRsZWQgcmVzb3VyY2VzJ1xcblxcbi8vIFBvcHVsYXRlIHRoZSBJdGVtcyB0YWJsZSBmcm9tIHRoZSBwcm92aWRlZCBDU1YgZmlsZVxcblN0cmluZyBQNl9UTVAgPSBTeXN0ZW0uZ2V0ZW52KCdCMkJPWF9UTVAnKVxcbmRlZiBjc3ZGaWxlID0gWyBza2lwTGluZXM6IDAsIHNlcGFyYXRvcjogJywnLCB1c2VGaXJzdExpbmVIZWFkZXJzOiB0cnVlLCB1cmk6IFxcXCJmaWxlOi8vLyRQNl9UTVAvcDZfZGVtb19pdGVtcy5jc3ZcXFwiIF1cXG5cXG5wNi5jc3YucGFyc2UoY3N2RmlsZSkgeyByb3cgLT5cXG4gICAgZGVmIHJlY29yZHMgPSBuZXcgQXJyYXlMaXN0KClcXG4gICAgcmVjb3Jkc1swXSA9IHJvd1xcbiAgICBwNi50YWJsZS51cHNlcnQoJ3A2X2RlbW8uSXRlbXMnLCByZWNvcmRzKVxcbiAgICB0cnVlXFxufVxcbmxvZy5kZWJ1ZyAnUG9wdWxhdGVkIHRoZSBJdGVtcyB0YWJsZSBmcm9tIHRoZSBDU1YgZmlsZSdcXG5cXG4vLyBTYXZlIHdhbGxldCB0byBpbnRlcmFjdCB3aXRoIHNtYXJ0IGNvbnRyYWN0XFxucDYuYXBwY29uZmlnLnNhdmUoXFxcInA2X2RlbW9cXFwiLCBbXFxuICAgICdkZW1vV2FsbGV0JzogJ3tcXFwiYWRkcmVzc1xcXCI6XFxcIjYyNzMwNjA5MGFiYWIzYTZlMTQwMGU5MzQ1YmM2MGM3OGE4YmVmNTdcXFwiLFxcXCJpZFxcXCI6XFxcImM5MTM4NjdmLWU1ZTQtNGJlNi1hN2RhLTY1NGNlODMzYmZiNFxcXCIsXFxcInZlcnNpb25cXFwiOjMsXFxcImNyeXB0b1xcXCI6e1xcXCJjaXBoZXJcXFwiOlxcXCJhZXMtMTI4LWN0clxcXCIsXFxcImNpcGhlcnRleHRcXFwiOlxcXCI0YzA2MDRjY2EzMzE0ODM4ZDYzODQ3YjRlZDAyZTdhMmQxN2U1MTFlZmQ0NGY2MDUwZTA5YzIzOGE1ZDUwMDk1XFxcIixcXFwiY2lwaGVycGFyYW1zXFxcIjp7XFxcIml2XFxcIjpcXFwiYjQ4ZDgxNzMyMGVkNWI0NTliYmRkZjE0MGU1ZjA0NTNcXFwifSxcXFwia2RmXFxcIjpcXFwic2NyeXB0XFxcIixcXFwia2RmcGFyYW1zXFxcIjp7XFxcImRrbGVuXFxcIjozMixcXFwiblxcXCI6MjYyMTQ0LFxcXCJwXFxcIjoxLFxcXCJyXFxcIjo4LFxcXCJzYWx0XFxcIjpcXFwiMzVkNTMzOWFjZjZhOGYxNTQ2MmZmYzBiYjk4MWNmMzE5Nzk0YWUyMzljNTEzNDFmYjg1NGMxOGVlNDU4ZDVjN1xcXCJ9LFxcXCJtYWNcXFwiOlxcXCI3NmMxYTQ3ZjcxMjRjZDYzNDYwYWQyNWZiYjBiOWM2ZTNlYWI4ZWQ1MGQzNmY2NmUyZGM0MGMwMzg4ODExMjNlXFxcIn19J1xcbl0pXFxuXFxuLy8gRGVwbG95IHRoZSBzbWFydCBjb250cmFjdFxcbmRlZiBldGhDbGllbnRVUkwgPSBcXFwiaHR0cDovLzE3Mi4xMy4wLjIwOjg1NDVcXFwiXFxuZGVmIHdlYjNqID0gcDYuZXRoZXJldW1ycGMuYnVpbGQoZXRoQ2xpZW50VVJMKVxcbmRlZiBjcmVkZW50aWFscyA9IHA2LmV0aGVyZXVtcnBjLmdldENyZWRlbnRpYWxzKFxcXCJwNl9kZW1vLkFwcENvbmZpZ1xcXCIsIFtrZXk6IFxcXCJkZW1vV2FsbGV0XFxcIl0sIFxcXCJ2YWx1ZVxcXCIsIFxcXCJBRHVtbXlQYXNzd29yZFxcXCIpXFxuXFxuLy8gRGVmaW5lIGEgY3VzdG9tIHRyYW5zYWN0aW9uIG1hbmFnZXIgd2l0aCBhIHBvbGxpbmcgZnJlcXVlbmN5IG9mIDIgc2Vjb25kc1xcbmRlZiBwcm9jZXNzb3IgPSBuZXcgUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3Nvcih3ZWIzaiwgMjAwMEwsIFRyYW5zYWN0aW9uTWFuYWdlci5ERUZBVUxUX1BPTExJTkdfQVRURU1QVFNfUEVSX1RYX0hBU0gpXFxuZGVmIHRtID0gbmV3IFJhd1RyYW5zYWN0aW9uTWFuYWdlcih3ZWIzaiwgY3JlZGVudGlhbHMsIENoYWluSWRMb25nLk5PTkUsIHByb2Nlc3NvcilcXG5kZWYgY29udHJhY3QgPSBSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5kZXBsb3kod2ViM2osIHRtLCBwNi5ldGhlcmV1bXJwYy5ERUZBVUxUX0dBU19QUk9WSURFUikuc2VuZCgpXFxuXFxuLy8gU2F2ZSB0aGUgY29udHJhY3QgYWRkcmVzcyBhbmQgRXRoZXJldW0gY2xpZW50IFVSTCBpbiBjb25maWcgdGFibGVcXG5wNi5hcHBjb25maWcuc2F2ZShcXFwicDZfZGVtb1xcXCIsIFtcXG4gICAgXFxcImV0aENsaWVudFVSTFxcXCI6IGV0aENsaWVudFVSTCxcXG4gICAgXFxcImNvbnRyYWN0QWRkcmVzc1xcXCI6IGNvbnRyYWN0LmdldENvbnRyYWN0QWRkcmVzcygpLFxcbl0pXFxuXFxuLy8gTm90aWZ5IFA2IHRoYXQgaW5zdGFsbGF0aW9uIHdhcyBzdWNjZXNzZnVsXFxubG9nLmRlYnVnICdEZW1vIGFwcCBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkhJ1xcbnA2LnBpcGVsaW5lLnB1dChcXFwiaW5zdGFsbFNjcmlwdFJlc3VsdFxcXCIsIFxcXCJ0cnVlXFxcIilcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDM5OTM1Njc5fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiUkZRU21hcnRDb250cmFjdEhlbHBlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUkZRIFNtYXJ0IENvbnRyYWN0IEhlbHBlclwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAwODkxMjg0NCxcInJldmlzaW9uSWRcIjpcIjRmMzA5MjhhYjA2YTRhYzhhNWZjNWU0MjA4MjczYzhkXCIsXCJtYWluU2NyaXB0XCI6XCJkZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG4vLyBUZXN0IHByb3RlY3RpbmcgcHJpdmF0ZSBrZXkgd2l0aCBhIHBhc3N3b3JkIGluIGEgd2FsbGV0XFxuZGVmIHBhc3N3b3JkID0gXFxcIkFEdW1teVBhc3N3b3JkXFxcIlxcbmRlZiBwcml2YXRlS2V5ID0gXFxcIjB4Yzg3NTA5YTFjMDY3YmJkZTc4YmViNzkzZTZmYTc2NTMwYjYzODJhNGMwMjQxZTVlNGE5ZWMwYTBmNDRkYzBkM1xcXCJcXG5sb2cuZGVidWcgXFxcIldhbGxldCBmaWxlIFxcXCIgKyBoZWxwZXIuZ2VuZXJhdGVXYWxsZXRKU09ORnJvbVByaXZhdGVLZXkocHJpdmF0ZUtleSwgcGFzc3dvcmQpXFxuXFxuLy8gVGVzdCByZWFkaW5nIGNyZWRlbnRpYWxzXFxuZGVmIGNyZWRlbnRpYWxzID0gaGVscGVyLnJlYWRDcmVkZW50aWFscygpXFxubG9nLmRlYnVnIFxcXCJBY2NvdW50IGFkZHJlc3MgaXM6IFxcXCIgKyBjcmVkZW50aWFscy5nZXRBZGRyZXNzKClcXG5sb2cuZGVidWcgXFxcIkFjY291bnQgcHJpdmF0ZSBrZXkgaXM6IDB4XFxcIiArIGNyZWRlbnRpYWxzLmdldEVjS2V5UGFpcigpLmdldFByaXZhdGVLZXkoKS50b1N0cmluZygxNilcXG5cXG4vLyBUZXN0IEV0aCBjbGllbnQgY29ubmVjdGlvblxcbmRlZiBjb250cmFjdCA9IGhlbHBlci5nZXRTbWFydENvbnRyYWN0KClcXG5sb2cuZGVidWcgXFxcIkdldCBudW1iZXIgb2YgUkZRc1xcXCJcXG5kZWYgbmJyT2ZSRlFzID0gY29udHJhY3QubmJyT2ZSRlFzKCkuc2VuZCgpXFxubG9nLmRlYnVnIFxcXCJDdXJyZW50IG51bWJlciBvZiBSRlFzIGlzOiBcXFwiICsgbmJyT2ZSRlFzXFxuXFxubG9nLmRlYnVnIFxcXCJHZXQgbnVtYmVyIG9mIHF1b3Rlc1xcXCJcXG5kZWYgbmJyT2ZRdW90ZXMgPSBjb250cmFjdC5uYnJPZlF1b3RlcygpLnNlbmQoKVxcbmxvZy5kZWJ1ZyBcXFwiQ3VycmVudCBudW1iZXIgb2YgcXVvdGVzIGlzOiBcXFwiICsgbmJyT2ZRdW90ZXNcXG5cXG4vLyBUZXN0IFJGUSBzdWJtaXNzaW9uXFxuZGVmIHJmcUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5sb2cuZGVidWcgXFxcIlJGUSBpZCBpcyBcXFwiICsgcmZxSWRcXG5cXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIHVibCA9IFxcXCI8Li4uPlxcXCJcXG5cXG5kZWYgcmVjZWlwdCA9IGhlbHBlci5zdWJtaXRSRlEocmZxSWQsIG5vdywgdWJsKVxcbmxvZy5kZWJ1ZyByZWNlaXB0LnRvU3RyaW5nKClcXG5cXG5kZWYgKHJlYWRJc3N1ZWRBdCwgcmVhZFVCTCwgcmVhZFN0YXR1cykgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVxcbmxvZy5kZWJ1ZyBcXFwiUkZRIGlzIGlzc3VlZCBhdDogXFxcIiArIHJlYWRJc3N1ZWRBdFxcbmxvZy5kZWJ1ZyBcXFwiUkZRIFVCTCBpczogXFxcIiArIHJlYWRVQkxcXG5sb2cuZGVidWcgXFxcIlJGUSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkU3RhdHVzXFxuXFxuLy8gUmVhZCBSRlFSZWNlaXZlZCBldmVudHNcXG4vL2RlZiB0b3BpY09mUkZRUmVjZWl2ZWQgPSBIYXNoLnNoYTNTdHJpbmcoXFxcIlJGUVJlY2VpdmVkKGJ5dGVzMTYsdWludDI1NixzdHJpbmcpXFxcIilcXG5sb2cuZGVidWcgXFxcIlRvcGljIG9mIFJGUVJlY2VpdmVkOiBcXFwiICsgaGVscGVyLlJGUVJlY2VpdmVkRXZlbnRIYXNoXFxuXFxuLy8gVGVzdCBkZWNsaW5pbmcgYSBSRlFcXG5kZWYgZGVjbGluZUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5yZWNlaXB0ID0gaGVscGVyLmRlY2xpbmVSRlEoZGVjbGluZUlkLCByZnFJZCwgbm93KVxcbmxvZy5kZWJ1ZyByZWNlaXB0LnRvU3RyaW5nKClcXG5cXG5kZWYgKHJlYWREZWNsaW5lSXNzdWVkQXQsIHJlYWREZWNsaW5lVUJMLCByZWFkRGVjbGluZVN0YXR1cywgcmVhZERlY2xpbmVSRlFJZCwgcmVhZERlY2xpbmVTdXBwbGllckFkZHJlc3MpID0gaGVscGVyLmdldFF1b3RlKGRlY2xpbmVJZClcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmUgaXMgaXNzdWVkIGF0OiBcXFwiICsgcmVhZERlY2xpbmVJc3N1ZWRBdFxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZSBVQkwgaXM6IFxcXCIgKyByZWFkRGVjbGluZVVCTCAvLyBzaG91bGQgYmUgZW1wdHlcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmUgc3RhdHVzIGlzOiBcXFwiICsgcmVhZERlY2xpbmVTdGF0dXMgLy8gc2hvdWxkIGJlIERlY2xpbmVcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmVkIFJGUSBpczogXFxcIiArIHJlYWREZWNsaW5lUkZRSWQgLy8gc2hvdWxkIGJlIHJmcUlkXFxubG9nLmRlYnVnIFxcXCJEZWNsaW5lIHN1cHBsaWVyIGFkZHJlc3MgaXM6IFxcXCIgKyByZWFkRGVjbGluZVN1cHBsaWVyQWRkcmVzc1xcblxcbmRlZiByZWFkRGVjbGluZWRSRlFTdGF0dXMgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVsyXVxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZWQgUkZRIHN0YXR1cyBpczogXFxcIiArIHJlYWREZWNsaW5lZFJGUVN0YXR1cyAvLyBzaG91bGQgYmUgRGVjbGluZWRcXG5cXG4vLyBUZXN0IHN1Ym1pdHRpbmcgYSBxdW90ZVxcbmRlZiBxdW90ZUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5kZWYgcXVvdGVVYmwgPSBcXFwiPHF1b3RlIC8+XFxcIlxcbnJlY2VpcHQgPSBoZWxwZXIuc3VibWl0UXVvdGUocXVvdGVJZCwgcmZxSWQsIG5vdywgcXVvdGVVYmwpXFxubG9nLmRlYnVnIHJlY2VpcHQudG9TdHJpbmcoKVxcblxcbmRlZiAocmVhZFF1b3RlSXNzdWVkQXQsIHJlYWRRdW90ZVVCTCwgcmVhZFF1b3RlU3RhdHVzLCByZWFkUXVvdGVSRlFJZCwgcmVhZFF1b3RlU3VwcGxpZXJBZGRyZXNzKSA9IGhlbHBlci5nZXRRdW90ZShxdW90ZUlkKVxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgaXMgaXNzdWVkIGF0OiBcXFwiICsgcmVhZFF1b3RlSXNzdWVkQXRcXG5sb2cuZGVidWcgXFxcIlF1b3RlIFVCTCBpczogXFxcIiArIHJlYWRRdW90ZVVCTFxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgc3RhdHVzIGlzOiBcXFwiICsgcmVhZFF1b3RlU3RhdHVzIC8vIHNob3VsZCBiZSBPZmZlclxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgUkZRIGlzOiBcXFwiICsgcmVhZFF1b3RlUkZRSWQgLy8gc2hvdWxkIGJlIHJmcUlkXFxubG9nLmRlYnVnIFxcXCJRdW90ZSBzdXBwbGllciBhZGRyZXNzIGlzOiBcXFwiICsgcmVhZFF1b3RlU3VwcGxpZXJBZGRyZXNzXFxuXFxuZGVmIHJlYWRSRlFTdGF0dXMgPSBoZWxwZXIuZ2V0UkZRKHJmcUlkKVsyXVxcbmxvZy5kZWJ1ZyBcXFwiTmV3IFJGUSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkUkZRU3RhdHVzIC8vIHNob3VsZCBiZSBRdW90ZVByb3ZpZGVkXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7XCJSRlFTbWFydENvbnRyYWN0SGVscGVyXCI6XCJpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlclxcblxcbmltcG9ydCBpby5wbGF0Zm9ybTYuZGVtby5zYy5SZXF1ZXN0Rm9yUXVvdGF0aW9uc1xcblxcbmltcG9ydCBqYXZhLnRpbWUuKlxcblxcbmltcG9ydCBvcmcud2ViM2ouYWJpLkV2ZW50RW5jb2RlclxcbmltcG9ydCBvcmcud2ViM2ouYWJpLkV2ZW50VmFsdWVzXFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuRnVuY3Rpb25SZXR1cm5EZWNvZGVyXFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuVHlwZVJlZmVyZW5jZVxcbmltcG9ydCBvcmcud2ViM2ouYWJpLmRhdGF0eXBlcy5FdmVudFxcbmltcG9ydCBvcmcud2ViM2ouYWJpLmRhdGF0eXBlcy5UeXBlXFxuaW1wb3J0IG9yZy53ZWIzai5jcnlwdG8uKlxcbmltcG9ydCBvcmcud2ViM2oucHJvdG9jb2wuY29yZS5tZXRob2RzLnJlc3BvbnNlLlRyYW5zYWN0aW9uUmVjZWlwdFxcbmltcG9ydCBvcmcud2ViM2oudHguKlxcbmltcG9ydCBvcmcud2ViM2oudHgucmVzcG9uc2UuUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3NvclxcbmltcG9ydCBvcmcud2ViM2oudXRpbHMuTnVtZXJpY1xcblxcblxcbmVudW0gUkZRU3RhdHVzIHtcXG4gICAgUmVjZWl2ZWQsIERlY2xpbmVkLCBRdW90ZVByb3ZpZGVkXFxufVxcblxcbmVudW0gUXVvdGVTdGF0dXMge1xcbiAgICBPZmZlciwgRGVjbGluZVxcbn1cXG5cXG5jbGFzcyBSRlFTbWFydENvbnRyYWN0SGVscGVyIHtcXG5cXG4gICAgLy8gQ29uc3RhbnRzXFxuICAgIHN0YXRpYyBkZWYgY29uZmlnVGFibGVOYW1lID0gXFxcInA2X2RlbW8uQXBwQ29uZmlnXFxcIlxcbiAgICBzdGF0aWMgZGVmIGNyZWRlbnRpYWxLZXkgPSBba2V5OiBcXFwiZGVtb1dhbGxldFxcXCJdXFxuICAgIHN0YXRpYyBkZWYgY3JlZGVudGlhbEZpZWxkTmFtZSA9IFxcXCJ2YWx1ZVxcXCJcXG5cXG4gICAgLy8gISEhIEZvciBkZW1vIHB1cnBvc2VzLCBkb24ndCBkbyB0aGlzIGluIHByb2R1Y3Rpb24hIEFsd2F5cyBhc2sgdGhlIHVzZXIgZm9yIGhpcy9oZXIgcGFzc3dvcmQgb3Igc3RvcmUgeW91ciBwcml2YXRlIGtleSBpbiBhIHZhdWx0L0hEIHdhbGxldCFcXG4gICAgc3RhdGljIGRlZiBwYXNzd29yZCA9IFxcXCJBRHVtbXlQYXNzd29yZFxcXCJcXG5cXG4gICAgLy8gSGVscGVyIHN0YXRlXFxuICAgIGRlZiBjb250ZXh0XFxuICAgIGRlZiB3ZWIzalxcbiAgICBkZWYgc21hcnRDb250cmFjdFxcblxcbiAgICBSRlFTbWFydENvbnRyYWN0SGVscGVyKGRlZiBjb250ZXh0KSB7XFxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XFxuXFxuICAgICAgICBkZWYgZXRoQ2xpZW50VVJMICA9IGNvbnRleHQucDYudGFibGUubG9va3VwKCdwNl9kZW1vLkFwcENvbmZpZycsIFtrZXk6ICdldGhDbGllbnRVUkwnXSkudmFsdWVbMF1cXG4gICAgICAgIHRoaXMud2ViM2ogPSBjb250ZXh0LnA2LmV0aGVyZXVtcnBjLmJ1aWxkKGV0aENsaWVudFVSTClcXG5cXG4gICAgICAgIC8vIERlZmluZSBhIGN1c3RvbSB0cmFuc2FjdGlvbiBtYW5hZ2VyIHdpdGggYSBwb2xsaW5nIGZyZXF1ZW5jeSBvZiAyIHNlY29uZHNcXG4gICAgICAgIGRlZiBwcm9jZXNzb3IgPSBuZXcgUG9sbGluZ1RyYW5zYWN0aW9uUmVjZWlwdFByb2Nlc3Nvcih3ZWIzaiwgMjAwMEwsIFRyYW5zYWN0aW9uTWFuYWdlci5ERUZBVUxUX1BPTExJTkdfQVRURU1QVFNfUEVSX1RYX0hBU0gpXFxuICAgICAgICBkZWYgdHJhbnNhY3Rpb25NYW5hZ2VyID0gbmV3IFJhd1RyYW5zYWN0aW9uTWFuYWdlcih3ZWIzaiwgcmVhZENyZWRlbnRpYWxzKCksIENoYWluSWRMb25nLk5PTkUsIHByb2Nlc3NvcilcXG5cXG4gICAgICAgIGRlZiBjb250cmFjdEFkZHJlc3MgPSBjb250ZXh0LnA2LnRhYmxlLmxvb2t1cCgncDZfZGVtby5BcHBDb25maWcnLCBba2V5OiAnY29udHJhY3RBZGRyZXNzJ10pLnZhbHVlWzBdXFxuICAgICAgICB0aGlzLnNtYXJ0Q29udHJhY3QgPSBSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5sb2FkKGNvbnRyYWN0QWRkcmVzcywgd2ViM2osIHRyYW5zYWN0aW9uTWFuYWdlciwgY29udGV4dC5wNi5ldGhlcmV1bXJwYy5ERUZBVUxUX0dBU19QUk9WSURFUilcXG4gICAgfVxcblxcbiAgICBDcmVkZW50aWFscyByZWFkQ3JlZGVudGlhbHMoKSB7XFxuICAgICAgICByZXR1cm4gY29udGV4dC5wNi5ldGhlcmV1bXJwYy5nZXRDcmVkZW50aWFscyhjb25maWdUYWJsZU5hbWUsIGNyZWRlbnRpYWxLZXksIGNyZWRlbnRpYWxGaWVsZE5hbWUsIHBhc3N3b3JkKVxcbiAgICB9XFxuXFxuICAgIFRyYW5zYWN0aW9uUmVjZWlwdCBzdWJtaXRSRlEoVVVJRCBpZCwgWm9uZWREYXRlVGltZSBub3csIFN0cmluZyB1YmwpIHtcXG4gICAgICAgIHJldHVybiBzbWFydENvbnRyYWN0LnN1Ym1pdFJGUShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLnpkdFRvQmlnSW50ZWdlcihub3cpLFxcbiAgICAgICAgICAgIHVibCkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UkZRKFVVSUQgaWQpIHtcXG4gICAgICAgIGRlZiByZXN1bHQgPSBzbWFydENvbnRyYWN0LmdldFJGUShjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCkpLnNlbmQoKVxcblxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVChyZXN1bHQuZ2V0VmFsdWUxKCkpXFxuICAgICAgICBkZWYgdWJsID0gcmVzdWx0LmdldFZhbHVlMigpXFxuICAgICAgICBkZWYgc3RhdHVzID0gUkZRU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IGRlY2xpbmVSRlEoVVVJRCBkZWNsaW5lSWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93KSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5kZWNsaW5lUkZRKFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRCeXRlc0Zyb21VVUlEKGRlY2xpbmVJZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UXVvdGUoVVVJRCBpZCkge1xcbiAgICAgICAgZGVmIHJlc3VsdCA9IHNtYXJ0Q29udHJhY3QuZ2V0UXVvdGUoY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQoaWQpKS5zZW5kKClcXG5cXG4gICAgICAgIGRlZiBpc3N1ZWRBdCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5iaWdJbnRlZ2VyVG9aRFQocmVzdWx0LmdldFZhbHVlMSgpKVxcbiAgICAgICAgZGVmIHVibCA9IHJlc3VsdC5nZXRWYWx1ZTIoKVxcbiAgICAgICAgZGVmIHN0YXR1cyA9IFF1b3RlU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMocmVzdWx0LmdldFZhbHVlNCgpKVxcbiAgICAgICAgZGVmIHN1cHBsaWVyQWRkcmVzcyA9IHJlc3VsdC5nZXRWYWx1ZTUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMsIHJmcUlkLCBzdXBwbGllckFkZHJlc3MpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IHN1Ym1pdFF1b3RlKFVVSUQgaWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93LCBTdHJpbmcgdWJsKSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5zdWJtaXRRdW90ZShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSwgdWJsKS5zZW5kKClcXG4gICAgfVxcblxcbiAgICAvLyBSZWFkIGV2ZW50c1xcblxcbiAgICBmaW5hbCBzdGF0aWMgU3RyaW5nIFJGUVJlY2VpdmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5SRlFSRUNFSVZFRF9FVkVOVClcXG5cXG4gICAgVHVwbGUgcmVhZFJGUVJlY2VpdmVkRXZlbnQoU3RyaW5nW10gbG9nVG9waWNzLCBTdHJpbmcgbG9nRGF0YSkge1xcbiAgICAgICAgZGVmIGV2ZW50ID0gZXh0cmFjdEV2ZW50KFJlcXVlc3RGb3JRdW90YXRpb25zLlJGUVJFQ0VJVkVEX0VWRU5ULCBsb2dUb3BpY3MsIGxvZ0RhdGEpXFxuXFxuICAgICAgICBkZWYgcmZxSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgaXNzdWVkQXQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uYmlnSW50ZWdlclRvWkRUKChCaWdJbnRlZ2VyKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDEpLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgdWJsID0gKFN0cmluZykgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgyKS5nZXRWYWx1ZSgpXFxuXFxuICAgICAgICByZXR1cm4gbmV3IFR1cGxlKHJmcUlkLCBpc3N1ZWRBdCwgdWJsKVxcbiAgICB9XFxuXFxuICAgIGZpbmFsIHN0YXRpYyBTdHJpbmcgUkZRRGVjbGluZWRFdmVudEhhc2ggPSBFdmVudEVuY29kZXIuZW5jb2RlKFJlcXVlc3RGb3JRdW90YXRpb25zLlJGUURFQ0xJTkVEX0VWRU5UKVxcblxcbiAgICBUdXBsZSByZWFkUkZRRGVjbGluZWRFdmVudChTdHJpbmdbXSBsb2dUb3BpY3MsIFN0cmluZyBsb2dEYXRhKSB7XFxuICAgICAgICBkZWYgZXZlbnQgPSBleHRyYWN0RXZlbnQoUmVxdWVzdEZvclF1b3RhdGlvbnMuUkZRREVDTElORURfRVZFTlQsIGxvZ1RvcGljcywgbG9nRGF0YSlcXG5cXG4gICAgICAgIGRlZiBzdXBwbGllciA9IChTdHJpbmcpIGV2ZW50LmdldEluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKVxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgwKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHF1b3RlSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDEpLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgaXNzdWVkQXQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uYmlnSW50ZWdlclRvWkRUKChCaWdJbnRlZ2VyKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDIpLmdldFZhbHVlKCkpXFxuXFxuICAgICAgICByZXR1cm4gbmV3IFR1cGxlKHN1cHBsaWVyLCByZnFJZCwgcXVvdGVJZCwgaXNzdWVkQXQpXFxuICAgIH1cXG5cXG4gICAgZmluYWwgc3RhdGljIFN0cmluZyBRdW90ZVJlY2VpdmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5RVU9URVJFQ0VJVkVEX0VWRU5UKVxcblxcbiAgICBUdXBsZSByZWFkUXVvdGVSZWNlaXZlZEV2ZW50KFN0cmluZ1tdIGxvZ1RvcGljcywgU3RyaW5nIGxvZ0RhdGEpIHtcXG4gICAgICAgIGRlZiBldmVudCA9IGV4dHJhY3RFdmVudChSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5RVU9URVJFQ0VJVkVEX0VWRU5ULCBsb2dUb3BpY3MsIGxvZ0RhdGEpXFxuXFxuICAgICAgICBkZWYgc3VwcGxpZXIgPSAoU3RyaW5nKSBldmVudC5nZXRJbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKClcXG4gICAgICAgIGRlZiByZnFJZCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRVVUlERnJvbUJ5dGVzKChieXRlW10pIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKSlcXG4gICAgICAgIGRlZiBxdW90ZUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgxKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVCgoQmlnSW50ZWdlcikgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgyKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHVibCA9IChTdHJpbmcpIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMykuZ2V0VmFsdWUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0LCB1YmwpXFxuICAgIH1cXG5cXG4gICAgLy8gRXZlbnQgaGVscGVyIG1ldGhvZHNcXG5cXG4gICAgc3RhdGljIEV2ZW50VmFsdWVzIGV4dHJhY3RFdmVudChFdmVudCBldmVudCwgU3RyaW5nW10gbG9nVG9waWNzLCBTdHJpbmcgbG9nRGF0YSkge1xcbiAgICAgICAgU3RyaW5nIGVuY29kZWRFdmVudFNpZ25hdHVyZSA9IEV2ZW50RW5jb2Rlci5lbmNvZGUoZXZlbnQpXFxuXFxuICAgICAgICBpZiAobG9nVG9waWNzWzBdICE9IGVuY29kZWRFdmVudFNpZ25hdHVyZSkge1xcbiAgICAgICAgICAgIHJldHVybiBudWxsXFxuICAgICAgICB9XFxuXFxuICAgICAgICBMaXN0PFR5cGU+IGluZGV4ZWRWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PD4oKVxcbiAgICAgICAgTGlzdDxUeXBlPiBub25JbmRleGVkVmFsdWVzID0gRnVuY3Rpb25SZXR1cm5EZWNvZGVyLmRlY29kZShsb2dEYXRhLCBldmVudC5nZXROb25JbmRleGVkUGFyYW1ldGVycygpKVxcblxcbiAgICAgICAgTGlzdDxUeXBlUmVmZXJlbmNlPFR5cGU+PiBpbmRleGVkUGFyYW1ldGVycyA9IGV2ZW50LmdldEluZGV4ZWRQYXJhbWV0ZXJzKClcXG4gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXhlZFBhcmFtZXRlcnMuc2l6ZSgpOyBpKyspIHtcXG4gICAgICAgICAgICBUeXBlIHZhbHVlID0gRnVuY3Rpb25SZXR1cm5EZWNvZGVyLmRlY29kZUluZGV4ZWRWYWx1ZShsb2dUb3BpY3NbaSArIDFdLCBpbmRleGVkUGFyYW1ldGVycy5nZXQoaSkpXFxuICAgICAgICAgICAgaW5kZXhlZFZhbHVlcy5hZGQodmFsdWUpXFxuICAgICAgICB9XFxuXFxuICAgICAgICByZXR1cm4gbmV3IEV2ZW50VmFsdWVzKGluZGV4ZWRWYWx1ZXMsIG5vbkluZGV4ZWRWYWx1ZXMpXFxuICAgIH1cXG5cXG4gICAgc3RhdGljIGdlbmVyYXRlV2FsbGV0SlNPTkZyb21Qcml2YXRlS2V5KFN0cmluZyBwcml2YXRlS2V5SW5IZXgsIFN0cmluZyBwYXNzd29yZCkge1xcbiAgICAgICAgZGVmIHByaXZhdGVLZXkgPSBuZXcgQmlnSW50ZWdlcihOdW1lcmljLmNsZWFuSGV4UHJlZml4KHByaXZhdGVLZXlJbkhleCksIDE2KVxcbiAgICAgICAgZGVmIGtleVBhaXIgPSBFQ0tleVBhaXIuY3JlYXRlKHByaXZhdGVLZXkpXFxuICAgICAgICBkZWYgd2FsbGV0RmlsZSA9IFdhbGxldC5jcmVhdGVTdGFuZGFyZChwYXNzd29yZCwga2V5UGFpcilcXG4gICAgICAgIGRlZiBvYmplY3RNYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKClcXG4gICAgICAgIHJldHVybiBvYmplY3RNYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKHdhbGxldEZpbGUpXFxuICAgIH1cXG5cXG4gICAgLy8gRGF0ZSAvIFRpbWUgaGVscGVyIGZ1bmN0aW9uc1xcblxcbiAgICBzdGF0aWMgWm9uZWREYXRlVGltZSBub3coKSB7XFxuICAgICAgICByZXR1cm4gWm9uZWREYXRlVGltZS5ub3coWm9uZUlkLnN5c3RlbURlZmF1bHQoKSlcXG4gICAgfVxcbn1cXG5cIn0sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMDg5MTI4NDR9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJSZWNlaXZlUkZRVHJhbnNhY3Rpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSZWNlaXZlUkZRVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIHRoZSByZWNlcHRpb24gb2YgYW4gUkZRIChjcmVhdGlvbiBvZiB0aGUgUkZRIFRyYW5zYWN0aW9uSW5mbywgc3RvcmFnZSB0byBmaWxlIHN5c3RlbeKApikgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBCbG9ja2NoYWluRXZlbnRIYW5kbGVyIHNjcmlwdFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTM5MzExODIzMixcInJldmlzaW9uSWRcIjpcImQ1YmJhYjk4ZGMxMDljYmIxY2M2Y2FmNjZmNzIwYzM0XCIsXCJtYWluU2NyaXB0XCI6XCJpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcbmltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdFxcblxcbi8vIFRoaXMgc2NyaXB0IHJlYWRzIHRoZSBpbmNvbWluZyBSRlEsIHBhcnNlcyBpdHMgY29udGVudCBhbmQgd3JpdGVzIHRoZSB0cmFuc2FjdGlvbiBpbiBQNiBkYXRhYmFzZSB1c2luZyBpdHMgaW50ZXJuYWwgVHJhbnNhY3Rpb25JbmZvIG1vZGVsIChjaGVjayB0aGUgRGF0YSBNb2RlbHMgbWVudSBmb3IgbW9yZSBpbmZvKVxcbmRlZiByZnFDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICd1YmwnXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoZmFsc2UsIHRydWUpXFxuZGVmIHJmcSA9IHNsdXJwZXIucGFyc2VUZXh0KHJmcUNvbnRlbnQpXFxuXFxuZGVmIGFwcGxpY2F0aW9uSWQgPSAnRGVtb0FwcCdcXG5cXG5kZWYgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXFxuU2ltcGxlRGF0ZUZvcm1hdCB0cmFuc2FjdGlvblNERiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KFxcXCJ5eXl5TU1kZCdUJ0hIOm1tOnNzXFxcIilcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IHRyYW5zYWN0aW9uU0RGLmZvcm1hdChjdXJyZW50RGF0ZSlcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHJmcS5JRC50ZXh0KClcXG5kZWYgY29tbWVudHMgPSByZnEuTm90ZS50ZXh0KClcXG5kZWYgaXNzdWVEYXRlID0gcmZxLklzc3VlRGF0ZS50ZXh0KClcXG5cXG5pbnQgbmJMaW5lcyA9IHJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5zaXplKClcXG5cXG5kZWYgc2VsbGVyTmFtZSA9IHJmcS5TZWxsZXJTdXBwbGllclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiBidXllck5hbWUgPSByZnEuT3JpZ2luYXRvckN1c3RvbWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdSZXF1ZXN0Rm9yUXVvdGF0aW9uJ1xcbmRlZiBzdGF0dXMgPSAnUmVjZWl2ZWQnXFxuZGVmIHN0YXR1c01lc3NhZ2UgPSAnUmVjZWl2ZWQgYnkgRGVtbyBBcHAnXFxuXFxuLy8gV3JpdGUgdGhlIHRyYW5zYWN0aW9uIG9uIHRoZSBmaWxlIHN5c3RlbVxcbmRlZiBzb3VyY2VVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUmVxdWVzdEZvclF1b3RhdGlvbi9pbi9cXFwiICsgdHJhbnNhY3Rpb25JZCArIFxcXCIueG1sXFxcIlxcbmRlZiBzb3VyY2VGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHNvdXJjZVVSSSlcXG5GaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUoc291cmNlRmlsZSwgcmZxQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0YXJnZXRVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUmVxdWVzdEZvclF1b3RhdGlvbi9cXFwiICsgdHJhbnNhY3Rpb25JZCArIFxcXCIueG1sXFxcIlxcbmRlZiB0YXJnZXRGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHRhcmdldFVSSSlcXG5GaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUodGFyZ2V0RmlsZSwgcmZxQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHt0cmFuc2FjdGlvbklkfTwvSWQ+XFxuICAgIDxDcmVhdGlvbkRhdGU+JHtmb3JtYXR0ZWREYXRlfTwvQ3JlYXRpb25EYXRlPlxcbiAgICA8VHJhbnNhY3Rpb25UeXBlPlJlcXVlc3QgRm9yIFF1b3RhdGlvbjwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHt0cmFuc2FjdGlvbklkfTwvVHJhbnNhY3Rpb25OdW1iZXI+XFxuICAgIDxTb3VyY2VTeXN0ZW0+RGVtbyBBcHA8L1NvdXJjZVN5c3RlbT5cXG4gICAgPFRhcmdldFN5c3RlbS8+XFxuICAgIDxTZW5kZXIvPlxcbiAgICA8RmluYWxSZWNpcGllbnQ+U3VwcGxpZXI8L0ZpbmFsUmVjaXBpZW50PlxcbiAgICA8VHJhbnNmZXJQcm90b2NvbD5CbG9ja2NoYWluPC9UcmFuc2ZlclByb3RvY29sPlxcbiAgICA8RGVsaXZlcmVkVmlhPkV0aGVyZXVtIEJsb2NrY2hhaW48L0RlbGl2ZXJlZFZpYT5cXG4gICAgPFNvdXJjZURvY3VtZW50Rm9ybWF0PlVCTDwvU291cmNlRG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxTb3VyY2VEb2N1bWVudFVSST4ke3NvdXJjZVVSSX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1Bpdm90RG9jdW1lbnRVUkk+XFxuICAgIDxQaXZvdERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1Bpdm90RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRhcmdldERvY3VtZW50Rm9ybWF0PlVCTDwvVGFyZ2V0RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxUYXJnZXREb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1RhcmdldERvY3VtZW50VVJJPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRlY2huaWNhbFN0YXR1c0NvZGU+JHtzdGF0dXN9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3N0YXR1c01lc3NhZ2V9PC9UZWNobmljYWxTdGF0dXNNZXNzYWdlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9UZWNobmljYWxTdGF0dXNEYXRlPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0NvZGUvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0RhdGUvPlxcbiAgICA8RmxhZ3M+e1xcXCJhYXZpc2libGVcXFwiOiB0cnVlfTwvRmxhZ3M+XFxuICAgIDxPcmdQYXRoPi8ke2FwcGxpY2F0aW9uSWR9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkJ1eWVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoYnV5ZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT48L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QXBwbGljYXRpb248L0tleT5cXG4gICAgICA8VmFsdWU+cDZfZGVtbzwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG48L1RyYW5zYWN0aW9uSW5mbz5cXFwiXFxcIlxcXCJcXG5cXG5kZWYgaXBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSygnVHJhbnNhY3Rpb25JbmZvJywgdHJhbnNhY3Rpb25JZClcXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUodHJhbnNhY3Rpb25JbmZvLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE4MjMyfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiVmlld19UcmFuc2FjdGlvbnMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJWaWV3X1RyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIGh0bWwgZGlzcGxheSBvZiBUcmFuc2FjdGlvbnNcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg0NTQsXCJyZXZpc2lvbklkXCI6XCI5MWY3MzM2ZTk2ZjkyOTI5NDg0OWI0YWVjZGJhNjQxYlwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0O1xcblxcbmxvZy5kZWJ1ZyAnUDZfREVNTydcXG5cXG5EZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoXFxcIiMjIywjIyMuMDBcXFwiKTtcXG5cXG4vLyBEaXNwbGF5IHBpcGVsaW5lIHZhcmlhYmxlc1xcbi8vIHBpcGVsaW5lLnZhcmlhYmxlcygpLmVhY2goKSB7IFxcbi8vICAgICBsb2cuZGVidWcgXFxcIlBJUEVMSU5FIFZBUiAke2l0fVxcXCIgXFxuLy8gfVxcblxcbi8vIEdldCBhbmQgZGlzcGxheSByYXcgWG1sIGZvciB0ZXN0XFxuZGVmIHByZXR0eVhtbCA9IHA2LnBpcGVsaW5lLmdldCAneG1sJ1xcblxcbi8vIEdldCBzbHVycGVkIHhtbFxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBwNi5waXBlbGluZS5nZXRYbWwgJ3htbCdcXG5cXG4vLyBSZXR1cm4gZmlsZSBleHRlbnNpb25cXG5kZWYgZ2V0X2ZpbGVfZXh0ZW5zaW9uID0geyBTdHJpbmcgcGF0aCAtPiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKSB9XFxuXFxuLy8gUmV0dXJuIGZpbGUgbmFtZVxcbmRlZiBnZXRfZmlsZV9uYW1lID0geyBTdHJpbmcgcGF0aCAtPiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCcvJykgKyAxKSB9IFxcblxcbi8vIEtleVxcbmRlZiBJZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5kZWYgQnVzaW5lc3NEb2NOYW1lID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uVHlwZS50ZXh0KClcXG5kZWYgQnVzaW5lc3NEb2NOdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uVHJhbnNhY3Rpb25OdW1iZXIudGV4dCgpXFxuZGVmIEVuZHBvaW50ID0gdHJhbnNhY3Rpb25JbmZvLkRlbGl2ZXJlZFZpYS50ZXh0KClcXG4vL2RlZiBNZXNzYWdlID0gbWVzc2FnZUluZm8uTWVzc2FnZS50ZXh0KClcXG5cXG4vLyBUcmFuc2FjdGlvblN0YXR1c0luZm9ybWF0aW9uIGJsb2NrIHN0YXJ0XFxuZGVmIFRlY2huaWNhbFN0YXR1c0NvZGUgPSB0cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZS50ZXh0KClcXG5kZWYgVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IHRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNEYXRlLnRleHQoKVxcbmRlZiBUZWNobmljYWxTdGF0dXNNZXNzYWdlID0gdHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c01lc3NhZ2UudGV4dCgpXFxuXFxuXFxuZGVmIEZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gdHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlLnRleHQoKVxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IHRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZS50ZXh0KClcXG5kZWYgRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSB0cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UudGV4dCgpXFxuLy8gVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiBibG9jayBlbmRcXG5cXG5kZWYgU291cmNlRG9jdW1lbnRVUkkgPSB0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpXFxuZGVmIHNyY0RvY0V4dGVuc2lvbiA9IGdldF9maWxlX2V4dGVuc2lvbihTb3VyY2VEb2N1bWVudFVSSSlcXG5kZWYgc3JjRG9jRmlsZU5hbWUgPSBnZXRfZmlsZV9uYW1lKFNvdXJjZURvY3VtZW50VVJJKVxcblxcbmRlZiBTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlID0gdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50Q29udGVudFR5cGUudGV4dCgpXFxuXFxuZGVmIEN1cnJlbnREb2N1bWVudFVSSSA9IHRyYW5zYWN0aW9uSW5mby5UYXJnZXREb2N1bWVudFVSSS50ZXh0KClcXG5kZWYgY3VyRG9jRXh0ZW5zaW9uID0gZ2V0X2ZpbGVfZXh0ZW5zaW9uKEN1cnJlbnREb2N1bWVudFVSSSlcXG5kZWYgY3VyRG9jRmlsZU5hbWUgPSBnZXRfZmlsZV9uYW1lKEN1cnJlbnREb2N1bWVudFVSSSlcXG5cXG5kZWYgQ3VycmVudERvY3VtZW50Q29udGVudFR5cGUgPSB0cmFuc2FjdGlvbkluZm8uVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZS50ZXh0KClcXG5cXG5kZWYgQXR0YWNobWVudHMgPSB0cmFuc2FjdGlvbkluZm8uQXR0YWNobWVudHNcXG5kZWYgRGlzcGxheWFibGVBdHRhY2htZW50cyA9IFxcXCJcXFwiXFxuXFxuQXR0YWNobWVudHMuZWFjaCB7XFxuICAgIGRlZiBVUkkgPSBpdC5BdHRhY2htZW50LlVSSS50ZXh0KClcXG4gICAgZGVmIENvbnRlbnRUeXBlID0gaXQuQXR0YWNobWVudC5Db250ZW50VHlwZS50ZXh0KClcXG4gICAgZGVmIGF0dGFjaG1lbnRFeHRlbnNpb24gPSBnZXRfZmlsZV9leHRlbnNpb24oVVJJKVxcbiAgICBkZWYgYXR0YWNobWVudEZpbGVOYW1lID0gZ2V0X2ZpbGVfbmFtZShVUkkpXFxuICAgIGRlZiBjdXJyZW50QXR0YWNobWVudCA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJpbmxpbmUtYmxvY2tcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj48Y2VudGVyPkF0dGFjaG1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke2F0dGFjaG1lbnRFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1leHRlbnNpb249XFxcIiR7YXR0YWNobWVudEV4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICBkYXRhLWlkcz0ke0lkfVxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiRVUkl9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50LXR5cGU9XFxcIiR7Q29udGVudFR5cGV9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS12aWV3PVxcXCJ7e1ZJRVdOQU1FfX1cXFwiPlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPVxcXCJhdHRhY2htZW50RmlsZU5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9XFxcImdldC1maWxlLW5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPVxcXCJwYXRoXFxcIiBzZWxlY3Q9XFxcIlVSSVxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+XFxuICAgICAgICAgICAgICAgICAgICA8L3hzbDp2YXJpYWJsZT5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGUtbmFtZVxcXCIgdGl0bGU9XFxcIiR7YXR0YWNobWVudEZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAke2F0dGFjaG1lbnRGaWxlTmFtZX1cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgRGlzcGxheWFibGVBdHRhY2htZW50cyA9IFxcXCIke0Rpc3BsYXlhYmxlQXR0YWNobWVudHN9JHtjdXJyZW50QXR0YWNobWVudH1cXFwiXFxufVxcblxcbi8vIFdpbGwgZGlzcGxheSBpbmZvIG9uIEVycm9ycyBjYXB0dXJlZCB0aGUgXFxcIm9sZFxcXCIgd2F5XFxuZGVmIElzc3VlID0gdHJhbnNhY3Rpb25JbmZvLklzc3VlXFxuZGVmIElzc3VlTGV2ZWxFUlJPUiA9IElzc3VlLmZpbmRBbGwgeyBpdC5sZXZlbCA9PSAnRVJST1InIH1cXG5kZWYgZXJyb3JzID0gW11cXG5cXG5Jc3N1ZUxldmVsRVJST1IuZWFjaCB7XFxuICAgIGlmIChpdC5sZXZlbCA9PSAnRVJST1InKSB7XFxuICAgICAgICBlcnJvcnMgPSB0b2tlbml6ZSggaXQuVGV4dCwgJyYjeEE7JyApXFxuICAgIH1cXG59XFxuXFxuZGVmIElzc3VlRXJyb3JMaW5lID0gXFxcIlxcXCJcXG5cXG5lcnJvcnMuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcIm1pLWxpbmVcXFwiPlxcbiAgICAgICAgPHN0cm9uZz48c3BhbiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke3Rva2VuaXplKGl0LCdcXFxcXFxcXHwnKVsxXX08L3NwYW4+PC9zdHJvbmc+IDxzcGFuPiAtIDwvc3Bhbj5cXG4gICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7dG9rZW5pemUoaXQsJ1xcXFxcXFxcfCcpWzJdfTwvc3Bhbj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgSXNzdWVFcnJvckxpbmUgPSBcXFwiJHtJc3N1ZUVycm9yTGluZX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgSXNzdWVMZXZlbEVycm9yT2xkV2F5ID0gKElzc3VlTGV2ZWxFUlJPUi5zaXplKCkgIT0gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkludmFsaWQgZG9jdW1lbnQgZHVlIHRvIDxzdHJvbmc+JHtlcnJvcnMuc2l6ZSgpfSBlcnJvcihzKTwvc3Ryb25nPjwvZGl2PlxcbiAgICAgICAgXFxuICAgICAgICAke0lzc3VlRXJyb3JMaW5lfVxcblxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbi8vIFdpbGwgZGlzcGxheSBpbmZvIG9uIEVycm9ycyBjYXB0dXJlZCB0aGUgXFxcIm5ld1xcXCIgd2F5XFxuZGVmIElzc3VlcyA9IHRyYW5zYWN0aW9uSW5mby5Jc3N1ZXNcXG5kZWYgSXNzdWVzTGV2ZWxFUlJPUiA9IElzc3Vlcy5Jc3N1ZS5maW5kQWxsIHsgaXQubGV2ZWwgPT0gJ0VSUk9SJyB9XFxuXFxuZGVmIElzc3Vlc0Vycm9yTGluZSA9IFxcXCJcXFwiXFxuXFxuSXNzdWVzTGV2ZWxFUlJPUi5lYWNoIHtcXG4gICAgZGVmIGxpbmUgPSBcXFwiXFxcIlxcXCJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1pLWxpbmVcXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPuKAoiAke2l0Lk1lc3NhZ2V9PC9zcGFuPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgaXNzdWVzTGV2ZWxFcnJvck5ld1dheSA9IFxcXCIke2lzc3Vlc0xldmVsRXJyb3JOZXdXYXl9JHtsaW5lfVxcXCJcXG59XFxuXFxuZGVmIGlzc3Vlc0xldmVsRXJyb3JOZXdXYXkgPSAoSXNzdWVzTGV2ZWxFUlJPUi5zaXplKCkgIT0gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkNvbnRlbnQgY2hlY2sgaGFzIGlkZW50aWZpZWQgPHN0cm9uZz4ke0lzc3Vlc0xldmVsRVJST1Iuc2l6ZSgpfSBlcnJvcihzKTwvc3Ryb25nPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAke2lzc3Vlc0xldmVsRXJyb3JOZXdXYXl9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbmRlZiBBdWRpdFRyYWlsID0gdHJhbnNhY3Rpb25JbmZvLkF1ZGl0VHJhaWxcXG5kZWYgQXVkaW9UcmFpbFJlY29yZCA9IEF1ZGl0VHJhaWwuUmVjb3JkID86IFtdXFxuZGVmIEF1ZGlvVHJhaWxSZWNvcmREaXNwbGF5ID0gXFxcIlxcXCJcXG5cXG5BdWRpb1RyYWlsUmVjb3JkLmVhY2gge1xcbiAgICBkZWYgYXVkaXRUeXBlID0gKGl0LlR5cGUgPT0gXFxcIkZ1bmN0aW9uYWxTdGF0dXNcXFwiKSA/IFxcXCJGdW5jdGlvbmFsIHN0YXR1c1xcXCIgOiAoaXQuVHlwZSA9PSBcXFwiVGVjaG5pY2FsU3RhdHVzXFxcIikgPyBcXFwiVGVjaG5pY2FsIHN0YXR1c1xcXCIgOiAnJ1xcbiAgICBkZWYgbGluZSA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgcm93LWl0ZW0tc2VwYXJhdGVkXFxcIj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0xXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlR5cGU8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPlxcbiAgICAgICAgICAgICAgICAke2F1ZGl0VHlwZX1cXG4gICAgICAgICAgICAvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuQ29kZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTNcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5EYXRlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctNlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5NZXNzYWdlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0Lk1lc3NhZ2V9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgQXVkaW9UcmFpbFJlY29yZERpc3BsYXkgPSBcXFwiJHtBdWRpb1RyYWlsUmVjb3JkRGlzcGxheX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgQXVkaW9UcmFpbERpc3BsYXkgPSAoQXVkaW9UcmFpbFJlY29yZC5zaXplKCkgPiAwKSA/IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgdG9wLW1hcmdpblxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiIHN0eWxlPVxcXCJtYXJnaW4tYm90dG9tOiA1cHg7XFxcIj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cXFwiYnRuIGJ0bi14cyBidG4tc3VjY2Vzc1xcXCIgZGF0YS10b2dnbGU9XFxcImNvbGxhcHNlXFxcIiBkYXRhLXRhcmdldD1cXFwiI2F1ZGl0VHJhaWxcXFwiPlN0YXR1cyBoaXN0b3J5PC9idXR0b24+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBpZD1cXFwiYXVkaXRUcmFpbFxcXCIgY2xhc3M9XFxcImNvbGxhcHNlIHNpZGUtcGFkZGVkXFxcIj48ZGl2PjwvZGl2PlxcbiAgICAgICAgICAgICAgICAke0F1ZGlvVHJhaWxSZWNvcmREaXNwbGF5fVxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgIDwvZGl2PlxcblxcXCJcXFwiXFxcIiA6IFxcXCJcXFwiXFxuXFxuZGVmIFdvcmtmbG93ID0gdHJhbnNhY3Rpb25JbmZvLldvcmtmbG93XFxuZGVmIFdvcmtmbG93SW5zdGFuY2UgPSB0cmFuc2FjdGlvbkluZm8uV29ya2Zsb3cuSW5zdGFuY2VcXG5kZWYgV29ya2Zsb3dJbnN0YW5jZURpc3BsYXkgPSBcXFwiXFxcIlxcblxcblxcbldvcmtmbG93SW5zdGFuY2UuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvdyByb3ctaXRlbS1zZXBhcmF0ZWRcXFwiPlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+V29ya2Zsb3cgVHlwZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGVwLnN0ZXBJZH08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhcnQgRGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGFydERhdGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkVuZCBEYXRlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LmVuZERhdGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc2lnbmVkIHRvPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LnN0ZXAuYXNzaWduZWRUb05hbWV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkhhbmRsZWQgYnk8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuc3RlcC5hY3Rpb25lZEJ5RW1haWx9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlN0YXR1czwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGF0dXN9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgV29ya2Zsb3dJbnN0YW5jZURpc3BsYXkgPSBcXFwiJHtXb3JrZmxvd0luc3RhbmNlRGlzcGxheX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgV29ya2Zsb3dEaXNwbGF5ID0gKFdvcmtmbG93SW5zdGFuY2Uuc2l6ZSgpID4gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwicm93IHRvcC1tYXJnaW5cXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XFxcImJ0biBidG4teHMgYnRuLXN1Y2Nlc3NcXFwiIGRhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCIgZGF0YS10YXJnZXQ9XFxcIiNoaXN0b3J5VHJhaWxcXFwiPldvcmtmbG93IGhpc3Rvcnk8L2J1dHRvbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGlkPVxcXCJoaXN0b3J5VHJhaWxcXFwiIGNsYXNzPVxcXCJjb2xsYXBzZSBzaWRlLXBhZGRlZFxcXCI+PGRpdj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgJHtXb3JrZmxvd0luc3RhbmNlRGlzcGxheX1cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbi8vIEtleVZhbHVlXFxuZGVmIFNlbGxlck5hbWUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIlNlbGxlciBOYW1lXFxcIn0uVmFsdWUudGV4dCgpXFxuZGVmIEJ1eWVyTmFtZSA9IHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5maW5ke2l0LktleSA9PSBcXFwiQnV5ZXIgTmFtZVxcXCJ9LlZhbHVlLnRleHQoKVxcbmRlZiBJc3N1ZURhdGUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIklzc3VlIERhdGVcXFwifS5WYWx1ZS50ZXh0KClcXG5kZWYgQ3VycmVuY3kgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkN1cnJlbmN5XFxcIn0uVmFsdWUudGV4dCgpXFxuXFxuZGVmIFRvdGFsQW1vdW50ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09IFxcXCJUb3RhbCBBbW91bnRcXFwifS5WYWx1ZS50ZXh0KClcXG5cXG5wcmludCBcXFwiVE9UQUwgQU1PVU5UXFxcIiArIFRvdGFsQW1vdW50XFxuZGVmIEZvcm1hdHRlZFRvdGFsQW1vdXQgPSBUb3RhbEFtb3VudCA/IGRmLmZvcm1hdChEb3VibGUudmFsdWVPZihUb3RhbEFtb3VudCkpIDogXFxcIlxcXCJcXG5cXG5sb2cuZGVidWcgJ1A2X0RFTU8gRm9ybWF0dGVkVG90YWxBbW91dCA9ICcrRm9ybWF0dGVkVG90YWxBbW91dFxcblxcblxcbmRlZiBMaW5lSXRlbXMgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkxpbmUgaXRlbXNcXFwifS5WYWx1ZS50ZXh0KClcXG5cXG5kZWYgVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiA9IChUZWNobmljYWxTdGF0dXNDb2RlICE9ICcnKVxcbiAgICA/IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlRlY2huaWNhbCBzdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7VGVjaG5pY2FsU3RhdHVzQ29kZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZSAtIGFzIG9mICR7VGVjaG5pY2FsU3RhdHVzRGF0ZX08L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7VGVjaG5pY2FsU3RhdHVzTWVzc2FnZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgXFxcIlxcXCJcXFwiXFxuICAgIDogXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhdHVzPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj48L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG5sb2cuZGVidWcgJ1A2REVNTyBWaWV3X0RlbW8gVHJhbnNhY3Rpb24gc2NyaXB0IExJTkUgMzA2JyAgXFxuICAgIFxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzSW5mb3JtYXRpb24gPSAoRnVuY3Rpb25hbFN0YXR1c0NvZGUgIT0gJycpXFxuICAgID8gXFxcIlxcXCJcXFwiXFxuICAgIDxoci8+XFx0XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RnVuY3Rpb25hbCBzdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7RnVuY3Rpb25hbFN0YXR1c0NvZGV9PC9kaXY+XFxuXFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtOFxcXCI+XFxuICAgICAgICBcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZSAtIGFzIG9mICR7RnVuY3Rpb25hbFN0YXR1c0RhdGV9PC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0Z1bmN0aW9uYWxTdGF0dXNNZXNzYWdlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgIDwvZGl2PiBcXG4gICAgXFxcIlxcXCJcXFwiXFxuICAgIDogJydcXG5cXG4vLyBkZWYgbXlfaHRtbCA9IFxcXCJcXFwiXFxcIjxkaXY+VEVTVDwvZGl2PlxcXCJcXFwiXFxcIlxcblxcbmxvZy5kZWJ1ZyAnUDZERU1PIFZpZXdfRGVtbyBUcmFuc2FjdGlvbiBzY3JpcHQgTElORSAzMzEnXFxuXFxuZGVmIG15X2h0bWwgPSBcXFwiXFxcIlxcXCJcXG48ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmlldy13cmFwcGVyXFxcIj5cXG5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtc20tNiBtZXNzYWdlLWluZm8tc2VjdGlvblxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWhlYWRlclxcXCI+VHJhbnNhY3Rpb246IDxzdHJvbmc+PHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+JHtCdXNpbmVzc0RvY05hbWV9PC9zcGFuPiAke0J1c2luZXNzRG9jTnVtYmVyfTwvc3Ryb25nPjwvZGl2PlxcblxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlNlbGxlciBuYW1lPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7U2VsbGVyTmFtZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+QnV5ZXIgbmFtZTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0J1eWVyTmFtZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGVsaXZlcmVkIHZpYTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0VuZHBvaW50fTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgeHMtc3RhY2tlZC1zcGFjZXIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkFkZGl0aW9uYWwgaW5mb3JtYXRpb248L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcblxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5EYXRlPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0lzc3VlRGF0ZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5Ub3RhbCBBbW91bnQ8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+JHtDdXJyZW5jeX08L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Rm9ybWF0dGVkVG90YWxBbW91dH1cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkxpbmUgaXRlbXM8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7TGluZUl0ZW1zfTwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcblxcbiAgICAgICAgXFxuICAgIDwvZGl2PlxcblxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgdG9wLW1hcmdpblxcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgeHMtc3RhY2tlZC1zcGFjZXIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPlRyYW5zYWN0aW9uIHN0YXR1cyBpbmZvcm1hdGlvbjwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgICR7VHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbn0gXFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgJHtGdW5jdGlvbmFsU3RhdHVzSW5mb3JtYXRpb259XFxuICAgICAgICAgICAgXFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIFxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1zbS02IG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIj5Eb2N1bWVudHMgYW5kIEF0dGFjaG1lbnQocyk8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2PlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbmxpbmUtYmxvY2tcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj48Y2VudGVyPlNvdXJjZSBkb2N1bWVudDwvY2VudGVyPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tZmlsZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgb25jbGljaz1cXFwicGxhdGZvcm02LnRyYW5zYWN0aW9uRG93bmxvYWQodGhpcylcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cXFwiZnQtaWNvbiBmdC1pY29uLSR7c3JjRG9jRXh0ZW5zaW9ufVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZXh0ZW5zaW9uPVxcXCIke3NyY0RvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWlkcz1cXFwiJHtJZH1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXVyaT1cXFwiJHtTb3VyY2VEb2N1bWVudFVSSX1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQtdHlwZT1cXFwiJHtTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke3NyY0RvY0ZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3NyY0RvY0ZpbGVOYW1lfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5saW5lLWJsb2NrXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+PGNlbnRlcj5UYXJnZXQgZG9jdW1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke2N1ckRvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWV4dGVuc2lvbj1cXFwiJHtjdXJEb2NFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1pZHM9XFxcIiR7SWR9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiR7Q3VycmVudERvY3VtZW50VVJJfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtY29udGVudC10eXBlPVxcXCIke0N1cnJlbnREb2N1bWVudENvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT1cXFwiY3VyRG9jRmlsZU5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9XFxcImdldC1maWxlLW5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPVxcXCJwYXRoXFxcIiBzZWxlY3Q9XFxcIkN1cnJlbnREb2N1bWVudFVSSVxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6dmFyaWFibGU+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke2N1ckRvY0ZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2N1ckRvY0ZpbGVOYW1lfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgXFxuXFxuICAgICAgICAgICAgICAgICR7RGlzcGxheWFibGVBdHRhY2htZW50c31cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcblxcbiAgICAgICAgPCEtLSBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJvbGRcXFwiIHdheSAtLT5cXG4gICAgICAgIFxcbiAgICAgICAgJHtJc3N1ZUxldmVsRXJyb3JPbGRXYXl9IFxcblxcbiAgICAgICAgPCEtLSBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJuZXdcXFwiIHdheSAtLT5cXG4gICAgICAgIFxcbiAgICAgICAgJHtpc3N1ZXNMZXZlbEVycm9yTmV3V2F5fVxcblxcbiAgICBcXG4gICAgPC9kaXY+XFxuXFxuICAgICR7QXVkaW9UcmFpbERpc3BsYXl9ICAgICAgICAgICAgXFxuICAgIFxcbiAgICAke1dvcmtmbG93RGlzcGxheX0gICAgICAgICAgICAgXFxuICAgIFxcbiAgICBcXG48L2Rpdj5cXG5cXFwiXFxcIlxcXCJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ3BvcnRhbEh0bWwnLCBteV9odG1sLCAndGV4dC9odG1sJ1xcblxcbmxvZy5kZWJ1ZyAnUDZERU1PIFZpZXdfRGVtbyBUcmFuc2FjdGlvbiBzY3JpcHQgZXhlY3V0aW9uIGlzIE9WRVInXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODQ1NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlVuaW5zdGFsbEFwcGxpY2F0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVW5pbnN0YWxsQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVsZXRlIGFsbCBTZXJ2aWNlIEl0ZW1zLCBUcmFuc2FjdGlvbnMgYW5kIFdvcmtmbG93IFRhc2tzIHJlbGF0ZWQgdG8gcDZfZGVtb1wifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQzOTkzNTYxMixcInJldmlzaW9uSWRcIjpcImRhOTliZGFjMjM3YWRkOTMyYWM2ZTc1MmI1YjBiYmE4XCIsXCJtYWluU2NyaXB0XCI6XCIvLyBUaGlzIHNjcmlwdCBpcyBleGVjdXRlZCB0byBjbGVhbiB1cCBhbGwgdGhlIGFwcGxpY2F0aW9ucyByZXNvdXJjZXNcXG5cXG4vLyBEZWxldGUgYWxsIHRyYW5zYWN0aW9ucyBhbmQgd29ya2Zsb3cgdGFza3NcXG5wNi5zcHJvYy5leGVjdXRlKCdwNl9kZW1vLkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9ucycpXFxubG9nLmRlYnVnICdEZW1vIGFwcCB0cmFuc2FjdGlvbnMgYW5kIHdvcmtmbG93IHRhc2tzIGRlbGV0ZWQnXFxuXFxuLy8gRGVzdHJveSByb3V0ZXNcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gV2ViM2ogLSBCbG9ja2NoYWluRXZlbnRIYW5kbGVyJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBSdWxlcyBEaXNwYXRjaGVyJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUXVvdGVzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnMnKVxcbnA2LmNhbWVsLmRlc3Ryb3lSb3V0ZSgncDZfZGVtbyBTY2hlZHVsZWQgY3JlYXRpb24gb2YgUkZRcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSRlFzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFF1b3RlcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRBY2NlcHRlZFBPcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSZWplY3RlZFBPcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzJylcXG5cXG4vLyBVbmRlcGxveSBidW5kbGVkIHJlc291cmNlc1xcbnA2LmJ1bmRsZWQudW5kZXBsb3koJ3A2X2RlbW8uUE9SZXZpZXcnKVxcbnA2LmJ1bmRsZWQudW5kZXBsb3koJ3A2X2RlbW8uVGFibGVJdGVtc0RhdGEnKVxcbmxvZy5kZWJ1ZyAnQnVuZGxlZCByZXNvdXJjZXMgZGVsZXRlZCBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbSdcXG5cXG4vLyBOb3RpZnkgUDYgdGhhdCB1bi1pbnN0YWxsYXRpb24gd2FzIHN1Y2Nlc3NmdWxcXG5wNi5waXBlbGluZS5wdXQoXFxcImluc3RhbGxTY3JpcHRSZXN1bHRcXFwiLCBcXFwidHJ1ZVxcXCIpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzQzOTkzNTYxMn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlNlbmRRdW90ZVRvQmxvY2tjaGFpbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNlbmRRdW90ZVRvQmxvY2tjaGFpblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJXcml0ZSBRdW90ZSBpbiBhbiBFdGhlcmV1bSBzbWFydCBjb250cmFjdFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2MTY0NzI0Nzg4OSxcInJldmlzaW9uSWRcIjpcImI2ZjZmMzYzOTJhNTNiZjUzNDg0OWY0NDYwY2Q5NWQwXCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5pbXBvcnQgamF2YS51dGlsLlVVSURcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIHF1b3RlSWRTdHJpbmcgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG4vLyBGZXRjaCB0aGUgcXVvdGUgdHJhbnNhY3Rpb24gaW5mb1xcbmRlZiBxdW90ZVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgcXVvdGVJZFN0cmluZylcXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmdldChxdW90ZVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCh0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpKVxcblN0cmluZyBxdW90ZUNvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZyhzcmNGaWxlKVxcblxcbi8vIFVwZGF0ZSB0cmFuc2FjdGlvbiBpbmZvIHN0YXR1c1xcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnU2VudCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlUGspXFxuXFxuLy8gV3JpdGUgcXVvdGUgaW4gdGhlIGJsb2NrY2hhaW5cXG5kZWYgcXVvdGVJZCA9IFVVSUQuZnJvbVN0cmluZyhxdW90ZUlkU3RyaW5nKVxcblxcbmRlZiBxdW90ZVhNTCA9IHNsdXJwZXIucGFyc2VUZXh0KHF1b3RlQ29udGVudClcXG5kZWYgcmZxSWQgPSBVVUlELmZyb21TdHJpbmcocXVvdGVYTUwuUmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlLlVVSUQudGV4dCgpKVxcblxcbmhlbHBlci5zdWJtaXRRdW90ZShxdW90ZUlkLCByZnFJZCwgbm93LCBxdW90ZUNvbnRlbnQpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NzI0Nzg4OX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IkNyZWF0ZVJGUVRyYW5zYWN0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ3JlYXRlUkZRVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQ3JlYXRlIGEgUmVxdWVzdEZvclF1b3RhdGlvbiBVQkwgRG9jdW1lbnQgYW5kIHdyaXRlIGl0IGluIGFuIEV0aGVyZXVtIHNtYXJ0IGNvbnRyYWN0XCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE4MzEwLFwicmV2aXNpb25JZFwiOlwiNjM2M2MyY2U0N2NkZGY2NDI1MzdkMTc0MzQ2MWFjOTBcIixcIm1haW5TY3JpcHRcIjpcIi8qKlxcbiAqIFlvdSBjYW4gY2FsbCBhbm90aGVyIHNjcmlwdCBieSB1c2luZyAnSW5jbHVkZScgdGFnc1xcbiAqIFxcbiAqIEBpbmNsdWRlIFJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcXG4gKi9cXG5cXG5pbXBvcnQgamF2YS50aW1lLmZvcm1hdC5EYXRlVGltZUZvcm1hdHRlclxcbmltcG9ydCBqYXZhLnV0aWwuVVVJRFxcbmltcG9ydCBqYXZhLnV0aWwuUmFuZG9tXFxuXFxuXFxuLy8gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGJ1eWVyIGluIHRoZSBzeXN0ZW0gdG8ga2VlcCB0aGUgRGVtbyBBcHAgc2ltcGxlXFxuZGVmIGJ1eWVySWQgPSAnMSdcXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG4vLyBDYWxjdWxhdGUgaXNzdWUgZGF0ZSBhbmQgdGltZSBmb3IgZ2VuZXJhdGVkIFJGUSB0cmFuc2FjdGlvblxcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgaXNzdWVEYXRlID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJ5eXl5LU1NLWRkXFxcIikuZm9ybWF0KG5vdylcXG5kZWYgaXNzdWVUaW1lID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxuUmFuZG9tIHJhbmQgPSBuZXcgUmFuZG9tKClcXG5cXG4vLyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBjYXRlZ29yaWVzIGZyb20gSXRlbXMgdGFibGVcXG5kZWYgaXRlbVJlY29yZHMgPSBwNi50YWJsZS5sb29rdXAoJ3A2X2RlbW8uSXRlbXMnLCBbOl0pXFxuXFxuU2V0PFN0cmluZz4gY2F0ZWdvcmllcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKVxcbk1hcDxTdHJpbmcsU3RyaW5nPiBjYXRfdG9fdW9tID0gbmV3IEhhc2hNYXA8U3RyaW5nLFN0cmluZz4oKVxcblxcbmZvciAobXlSZWNvcmQgaW4gaXRlbVJlY29yZHMpIHtcXG4gICAgZGVmIGNhdGVnb3J5ID0gbXlSZWNvcmQuQ2F0ZWdvcnlcXG4gICAgZGVmIHVvbSA9IG15UmVjb3JkLlVPTVxcblxcbiAgICBpZiAoIWNhdGVnb3JpZXMuY29udGFpbnMoY2F0ZWdvcnkpKSB7XFxuICAgICAgICBjYXRlZ29yaWVzLmFkZChjYXRlZ29yeSlcXG4gICAgICAgIGNhdF90b191b20ucHV0KGNhdGVnb3J5LCB1b20pXFxuICAgIH1cXG59XFxuXFxuLy8gR2VuZXJhdGUgcmFuZG9tIFJGUSBsaW5lcyBmcm9tIGF2YWlsYWJsZSBpdGVtc1xcbmludCBuYkxpbmVNYXggPSBjYXRlZ29yaWVzLnNpemUoKVxcbmludCBxdWFudGl0eU1heCA9IDEwXFxuaW50IG5iTGluZXMgPSByYW5kLm5leHRJbnQobmJMaW5lTWF4KSArIDFcXG5cXG5kZWYgcmZxTGluZXM9ICcnXFxuZm9yIChpbnQgaSA9MDsgaTwgbmJMaW5lczsgaSsrKSB7XFxuICAgIFxcbiAgICBpbnQgY2F0ZWdvcnlJbmRleCA9IHJhbmQubmV4dEludChjYXRlZ29yaWVzLnNpemUoKSlcXG4gICAgZGVmIGNhdGVnb3J5QXJyYXkgPSBjYXRlZ29yaWVzLnRvQXJyYXkoKVxcbiAgICBcXG4gICAgZGVmIGNhdGVnb3J5ID0gY2F0ZWdvcnlBcnJheVtjYXRlZ29yeUluZGV4XVxcbiAgICBjYXRlZ29yaWVzLnJlbW92ZShjYXRlZ29yeSlcXG5cXG4gICAgZGVmIHF1YW50aXR5ID0gcmFuZC5uZXh0SW50KHF1YW50aXR5TWF4ICsgMSkgKyAxXFxuICAgIGRlZiB1b20gPSBjYXRfdG9fdW9tLmdldChjYXRlZ29yeSlcXG4gICAgICAgIFxcbiAgICByZnFMaW5lcyArPSBcXFwiXFxcIlxcXCI8Y2FjOlJlcXVlc3RGb3JRdW90YXRpb25MaW5lPlxcbiAgICAgIDxjYmM6SUQ+JHtpKzF9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpOb3RlPnNhbXBsZTwvY2JjOk5vdGU+XFxuICAgICAgPGNhYzpMaW5lSXRlbT5cXG4gICAgICAgICA8Y2JjOklEPiR7aSsxfTwvY2JjOklEPlxcbiAgICAgICAgIDxjYmM6UXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7dW9tfVxcXCI+JHtxdWFudGl0eX08L2NiYzpRdWFudGl0eT5cXG4gICAgICAgICA8Y2FjOkl0ZW0+XFxuICAgICAgICAgICAgPGNiYzpEZXNjcmlwdGlvbj48L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8Y2JjOk5hbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoY2F0ZWdvcnkpfTwvY2JjOk5hbWU+XFxuICAgICAgICAgICAgPGNhYzpCdXllcnNJdGVtSWRlbnRpZmljYXRpb24+XFxuICAgICAgICAgICAgICAgPGNiYzpJRD4ke2J1eWVySWR9PC9jYmM6SUQ+XFxuICAgICAgICAgICAgPC9jYWM6QnV5ZXJzSXRlbUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgIDwvY2FjOkl0ZW0+XFxuICAgICAgPC9jYWM6TGluZUl0ZW0+XFxuICAgPC9jYWM6UmVxdWVzdEZvclF1b3RhdGlvbkxpbmU+XFxuICAgIFxcXCJcXFwiXFxcIlxcbn1cXG5cXG4vLyBHZW5lcmF0ZSB0aGUgdHJhbnNhY3Rpb24gSUQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIFVCTFxcbmRlZiB0cmFuc2FjdGlvbklkID0gVVVJRC5yYW5kb21VVUlEKClcXG5cXG5kZWYgcmVxdWVzdEZvclF1b3RhdGlvblVCTCA9IFxcXCJcXFwiXFxcIjxSZXF1ZXN0Rm9yUXVvdGF0aW9uIHhtbG5zPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpSZXF1ZXN0Rm9yUXVvdGF0aW9uLTJcXFwiIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIiB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gICA8Y2JjOlVCTFZlcnNpb25JRD4yLjA8L2NiYzpVQkxWZXJzaW9uSUQ+XFxuICAgPGNiYzpJRD4ke3RyYW5zYWN0aW9uSWR9PC9jYmM6SUQ+XFxuICAgPGNiYzpJc3N1ZURhdGU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVEYXRlKX08L2NiYzpJc3N1ZURhdGU+XFxuICAgPGNiYzpJc3N1ZVRpbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICAgPGNiYzpOb3RlPkF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFJGUTwvY2JjOk5vdGU+XFxuICAgPGNhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICAgICA8Y2FjOlBhcnR5PlxcbiAgICAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6TmFtZT5CdXllciBDb3JwLjwvY2JjOk5hbWU+XFxuICAgICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QXZvbiBXYXk8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOYW1lPlRoZXJlYWJvdXRzPC9jYmM6QnVpbGRpbmdOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+NTZBPC9jYmM6QnVpbGRpbmdOdW1iZXI+XFxuICAgICAgICAgICAgPGNiYzpDaXR5TmFtZT5CcmlkZ3RvdzwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6UG9zdGFsWm9uZT5aWjk5IDFaWjwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PkF2b248L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICAgIDxjYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgICAgPGNiYzpMaW5lPjNyZCBGbG9vciwgUm9vbSA1PC9jYmM6TGluZT5cXG4gICAgICAgICAgICA8L2NhYzpBZGRyZXNzTGluZT5cXG4gICAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+R0I8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5PlxcbiAgIDwvY2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcbiAgIDxjYWM6U2VsbGVyU3VwcGxpZXJQYXJ0eT5cXG4gICAgICA8Y2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+Q08wMDE8L2NiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPlxcbiAgICAgIDxjYWM6UGFydHk+XFxuICAgICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICAgICAgPGNiYzpOYW1lPlNlbGxlciBJbmMuPC9jYmM6TmFtZT5cXG4gICAgICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgICAgIDxjYmM6U3RyZWV0TmFtZT5CdXN5IFN0cmVldDwvY2JjOlN0cmVldE5hbWU+XFxuICAgICAgICAgICAgPGNiYzpCdWlsZGluZ05hbWU+VGhlcmVhYm91dHM8L2NiYzpCdWlsZGluZ05hbWU+XFxuICAgICAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj41NkE8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgICAgICA8Y2JjOkNpdHlOYW1lPkZhcnRoaW5nPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICAgICAgPGNiYzpQb3N0YWxab25lPkFBOTkgMUJCPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+SGVyZW1vdXRoc2hpcmU8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICAgIDxjYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgICAgPGNiYzpMaW5lPlRoZSBSb3VuZGFib3V0PC9jYmM6TGluZT5cXG4gICAgICAgICAgICA8L2NhYzpBZGRyZXNzTGluZT5cXG4gICAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+R0I8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5PlxcbiAgIDwvY2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgJHtyZnFMaW5lc31cXG48L1JlcXVlc3RGb3JRdW90YXRpb24+XFxuXFxcIlxcXCJcXFwiXFxuXFxuLy8gV3JpdGUgdGhlIHRyYW5zYWN0aW9uIGluIHRoZSBibG9ja2NoYWluXFxuaGVscGVyLnN1Ym1pdFJGUSh0cmFuc2FjdGlvbklkLCBub3csIHJlcXVlc3RGb3JRdW90YXRpb25VQkwpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTM5MzExODMxMH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIHRoZSBmb3JtIHN1cHBvcnRpbmcgdGhlIGNyZWF0aW9uIG9mIGEgcXVvdGVcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ2NjIsXCJyZXZpc2lvbklkXCI6XCJmNTI4NjA2ODQ1MjEyZDJjM2U5OGJjNDc1YjZiMTY4MlwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcbmRlZiB4bWwgXFx0XFx0PSBwNi5waXBlbGluZS5nZXRYbWwgJ3htbCdcXG5sb2cuZGVidWcgJ1hNTCA9PT09PT0+ICcrIHhtbFxcblxcbnA2LnBpcGVsaW5lLnZhcmlhYmxlcygpLmVhY2goKSB7IGxvZy5kZWJ1ZyBcXFwiUElQRUxJTkUgVkFSICR7aXR9XFxcIiB9XFxuXFxuZGVmIG1wayBcXHRcXHQ9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoeG1sLml0ZW1EYXRhVHlwZS50ZXh0KCksIHhtbC5pdGVtSWRzLnRleHQoKS5zcGxpdCgnXFxcXFxcXFwuJykpXFxuZGVmIG1lc3NhZ2UgXFx0PSBwNi50cmFuc2FjdGlvbi5nZXQobXBrKVxcblxcbmxvZy5kZWJ1ZyAnTUVTU0FHRSA9PT09PT0+ICcrIG1lc3NhZ2VcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcihmYWxzZSwgdHJ1ZSlcXG5kZWYgdHJhbnNhY3Rpb24gPSBzbHVycGVyLnBhcnNlVGV4dChtZXNzYWdlKVxcblxcbmRlZiBteVVSSSA9IHRyYW5zYWN0aW9uLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKVxcbiAgICAgICAgXFxuZGVmICBzcmNGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKG15VVJJKVxcbiAgICAgICAgXFxuU3RyaW5nIHJmcUNvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZyhzcmNGaWxlKVxcblxcbmRlZiByZnEgPSBzbHVycGVyLnBhcnNlVGV4dChyZnFDb250ZW50KVxcblxcbmRlZiByZnFMaW5lcyA9IFxcXCJcXFwiXFxucmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLmVhY2h7IHJmcUxpbmUgLT4gXFxuXFxuICAgIGRlZiBpdGVtQ2F0ZWdvcnkgPSByZnFMaW5lLkxpbmVJdGVtLkl0ZW0uTmFtZS50ZXh0KClcXG4gICAgXFxuICAgIGRlZiBpdGVtUmVjb3JkcyA9IHA2LnRhYmxlLmxvb2t1cCgncDZfZGVtby5JdGVtcycsIFsnQ2F0ZWdvcnknOml0ZW1DYXRlZ29yeV0pXFxuXFxuICAgIGRlZiBpdGVtcz0gJydcXG4gICAgZm9yKG15UmVjb3JkIGluIGl0ZW1SZWNvcmRzKSB7XFxuICAgICAgICBkZWYgZGVzY3JpcHRpb24gPSBteVJlY29yZC5EZXNjcmlwdGlvblxcbiAgICAgICAgZGVmIGlkID0gbXlSZWNvcmQuSWRcXG4gICAgICAgIGRlZiB1b20gPSBteVJlY29yZC5VT01cXG4gICAgICAgIGRlZiB1bml0UHJpY2UgPSBteVJlY29yZC5Vbml0UHJpY2VcXG4gICAgICAgIGRlZiBjdXJyZW5jeSA9IG15UmVjb3JkLkN1cnJlbmN5XFxuICAgIFxcbiAgICAgICAgaWYgKCEnJy5lcXVhbHMoaXRlbXMpKSB7XFxuICAgICAgICAgICAgaXRlbXMgKz0gJyxcXFxcclxcXFxuJ1xcbiAgICAgICAgfSAgICAgICAgXFxuICAgICAgICBpdGVtcyArPSAneyBcXFwiaWRcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGRlc2NyaXB0aW9uKSsnLCBcXFwicHJpY2VcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKHVuaXRQcmljZSkrJywgXFxcInVuaXRcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGN1cnJlbmN5KSsnLCBcXFwiY3VycmVuY3lcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGN1cnJlbmN5KSsnLCBcXFwidW9tXFxcIjogJytKc29uT3V0cHV0LnRvSnNvbih1b20pKycgfSdcXG4gICAgfSAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgXFxuICAgIGxvZy5kZWJ1ZyAnSVRFTVMgPT4gJytpdGVtcyAgXFxuXFxuXFxuICAgIGRlZiBvbmVMaW5lID0gXFxcIlxcXCJcXFwiIHtcXG4gICAgICAgICAgICAgXFxcImlkXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnFMaW5lLklELnRleHQoKSl9LFxcbiAgICAgICAgICAgICBcXFwibm90ZVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX0sXFxuICAgICAgICAgICAgIFxcXCJxdWFudGl0eVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5MaW5lSXRlbS5RdWFudGl0eS50ZXh0KCkpfSxcXG4gICAgICAgICAgICAgXFxcIml0ZW1zXFxcIjogW1xcbiAgICAgICAgICAgICAgICAgJHtpdGVtc31cXG4gICAgICAgICAgICBdXFxuICAgICAgICB9XFxcIlxcXCJcXFwiXFxuICAgICAgICBcXG5cXG4gICAgaWYgKCFcXFwiXFxcIi5lcXVhbHMocmZxTGluZXMpKSB7XFxuICAgICAgICByZnFMaW5lcyArPSBcXFwiLFxcXFxyXFxcXG5cXFwiXFxuICAgIH1cXG4gICAgIHJmcUxpbmVzICs9IG9uZUxpbmVcXG59XFxuXFxubG9nLmRlYnVnICdSRlEgTElORVMgPT4gJytyZnFMaW5lc1xcblxcbmRlZiBtb2RlbCA9IFxcXCJcXFwiXFxcIntcXG4gICAgXFxcInJmcVxcXCI6IHsgXFxuICAgICAgICBcXFwiaWRcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5JRC50ZXh0KCkpfSxcXG4gICAgICAgIFxcXCJpc3N1ZURhdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5Jc3N1ZURhdGUudGV4dCgpKX0sXFxuICAgICAgICBcXFwiaXNzdWVUaW1lXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnEuSXNzdWVUaW1lLnRleHQoKSl9LFxcbiAgICAgICAgXFxcIm5vdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5Ob3RlLnRleHQoKSl9XFxuICAgIH0sXFxuICAgIFxcXCJsaW5lc1xcXCI6IFtcXG4gICAgICAgICR7cmZxTGluZXN9XFxuICAgIF1cXG59XFxcIlxcXCJcXFwiXFxuXFxubG9nLmRlYnVnICdNT0RFTCA9PiAnK21vZGVsXFxuXFxuZGVmIGZvcm0gPSBwNi5yZXNvdXJjZS5nZXQoICdXRl9SRlFfRm9ybScgKVxcbmFzc2VydCBmb3JtICE9IG51bGwgOiBcXFwiVW5hYmxlIHRvIGZpbmQgdGhlIGNvbXBpbGVkIHJlc291cmNlIFdGX1JGUV9Gb3JtXFxcIlxcblxcbnA2LnBpcGVsaW5lLnB1dCAnbW9kZWwnLCBtb2RlbFxcbnA2LnBpcGVsaW5lLnB1dCAnZm9ybScsIGZvcm1cXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W3tcIm5hbWVcIjpcIldGX1JGUV9Gb3JtXCIsXCJ0eXBlXCI6XCJUWVBFU0NSSVBUXCIsXCJjb250ZW50XCI6XCIvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXFxuLyoqKioqKi8gXFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxcbi8qKioqKiovIFxcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxcbi8qKioqKiovIFxcdFxcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XFxuLyoqKioqKi8gXFx0XFx0XFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdFxcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXFxuLyoqKioqKi8gXFx0XFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xcbi8qKioqKiovIFxcdFxcdFxcdGk6IG1vZHVsZUlkLFxcbi8qKioqKiovIFxcdFxcdFxcdGw6IGZhbHNlLFxcbi8qKioqKiovIFxcdFxcdFxcdGV4cG9ydHM6IHt9XFxuLyoqKioqKi8gXFx0XFx0fTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdFxcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0XFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxcbi8qKioqKiovIFxcdFxcdG1vZHVsZS5sID0gdHJ1ZTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xcbi8qKioqKiovIFxcdH1cXG4vKioqKioqL1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XFxuLyoqKioqKi8gXFx0XFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xcbi8qKioqKiovIFxcdFxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XFxuLyoqKioqKi8gXFx0XFx0XFx0XFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcXG4vKioqKioqLyBcXHRcXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcbi8qKioqKiovIFxcdFxcdFxcdFxcdGdldDogZ2V0dGVyXFxuLyoqKioqKi8gXFx0XFx0XFx0fSk7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdH07XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xcbi8qKioqKiovIFxcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xcbi8qKioqKiovIFxcdFxcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xcbi8qKioqKiovIFxcdFxcdFxcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XFxuLyoqKioqKi8gXFx0XFx0XFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcXG4vKioqKioqLyBcXHRcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIGdldHRlcjtcXG4vKioqKioqLyBcXHR9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcXFwiXFxcIjtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xcbi8qKioqKiovIFxcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDkwKTtcXG4vKioqKioqLyB9KVxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKioqKi8gKFtcXG4vKiAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbm1vZHVsZS5leHBvcnRzID0gUmVhY3Q7XFxuXFxuLyoqKi8gfSksXFxuLyogMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XFxuXFxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXFxuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXFxuXFxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XFxudmFyIGNhY2hlZENsZWFyVGltZW91dDtcXG5cXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcXG59XFxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XFxufVxcbihmdW5jdGlvbiAoKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcXG4gICAgfVxcbn0gKCkpXFxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcXG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcXG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfVxcbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcXG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfSBjYXRjaChlKXtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xcbiAgICAgICAgfSBjYXRjaChlKXtcXG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcblxcbn1cXG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XFxuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXFxuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XFxuICAgIH1cXG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcXG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xcbiAgICB9IGNhdGNoIChlKXtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xcbiAgICAgICAgfSBjYXRjaCAoZSl7XFxuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXFxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuXFxuXFxufVxcbnZhciBxdWV1ZSA9IFtdO1xcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xcbnZhciBjdXJyZW50UXVldWU7XFxudmFyIHF1ZXVlSW5kZXggPSAtMTtcXG5cXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XFxuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIGRyYWluaW5nID0gZmFsc2U7XFxuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XFxuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xcbiAgICB9XFxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcXG4gICAgICAgIGRyYWluUXVldWUoKTtcXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xcbiAgICBpZiAoZHJhaW5pbmcpIHtcXG4gICAgICAgIHJldHVybjtcXG4gICAgfVxcbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcXG4gICAgZHJhaW5pbmcgPSB0cnVlO1xcblxcbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xcbiAgICB3aGlsZShsZW4pIHtcXG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xcbiAgICAgICAgcXVldWUgPSBbXTtcXG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcXG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XFxuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XFxuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XFxuICAgIH1cXG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcXG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcXG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xcbn1cXG5cXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XFxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcXG4gICAgfVxcbn07XFxuXFxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xcbiAgICB0aGlzLmZ1biA9IGZ1bjtcXG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xcbn1cXG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XFxuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xcbn07XFxucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcXG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xcbnByb2Nlc3MuZW52ID0ge307XFxucHJvY2Vzcy5hcmd2ID0gW107XFxucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXFxucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xcblxcbmZ1bmN0aW9uIG5vb3AoKSB7fVxcblxcbnByb2Nlc3Mub24gPSBub29wO1xcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xcbnByb2Nlc3Mub25jZSA9IG5vb3A7XFxucHJvY2Vzcy5vZmYgPSBub29wO1xcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcXG5wcm9jZXNzLmVtaXQgPSBub29wO1xcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcXG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xcblxcbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cXG5cXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XFxufTtcXG5cXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XFxufTtcXG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5KCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5KF8ubm9vcCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcXG5cXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cXG52YXIgcm9vdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHJvb3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzT2JqZWN0KHt9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdChfLm5vb3ApO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3QobnVsbCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc09iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcXFwib2JqZWN0XFxcIi5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc09iamVjdExpa2Uoe30pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc09iamVjdExpa2UobnVsbCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNPYmplY3RMaWtlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNOYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTAxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDQpO1xcblxcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXFxuICovXFxuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XFxuICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXkpO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc05hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldE5hdGl2ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRSYXdUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX29iamVjdFRvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1KTtcXG5cXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBzeW1Ub1N0cmluZ1RhZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10udG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XFxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XFxuICB9XFxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXFxuICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UmF3VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSlcXG4gICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19vYmplY3RUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlR2V0VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zcGxpY2VfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRJbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldEluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZGVlcEVxdWFsX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fZGVsZXRlSW5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19rZXlzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHN0cnVjdHVyZSA9IHtcXG4gIGVtcHR5OiB7fSxcXG4gIGVtcHR5TGlzdDogW10sXFxuICBnZXRJbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRJbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHNldEluOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldEluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgZGVlcEVxdWFsOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2RlZXBFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIGRlbGV0ZUluOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2RlbGV0ZUluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgZnJvbUpTOiBmdW5jdGlvbiBmcm9tSlModmFsdWUpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfSxcXG4gIGtleXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fa2V5c19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHNpemU6IGZ1bmN0aW9uIHNpemUoYXJyYXkpIHtcXG4gICAgcmV0dXJuIGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDtcXG4gIH0sXFxuICBzcGxpY2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3BsaWNlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgdG9KUzogZnVuY3Rpb24gdG9KUyh2YWx1ZSkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHJ1Y3R1cmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFBlcmZvcm1zIGFcXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XFxuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcXG4gKlxcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uZXEoJ2EnLCAnYScpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uZXEoTmFOLCBOYU4pO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcXG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG5cXG5cXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXFxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cXG4gKi9cXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XFxuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvS2V5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9uZW50c19Qcm92aWRlcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jb25uZWN0X2Nvbm5lY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAwKTtcXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBQcm92aWRlciAqL1xcbi8qIHVudXNlZCBoYXJtb255IHJlZXhwb3J0IGNyZWF0ZVByb3ZpZGVyICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29ubmVjdEFkdmFuY2VkICovXFxuLyogaGFybW9ueSByZWV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Nvbm5lY3RfY29ubmVjdF9fW1xcXCJhXFxcIl07IH0pO1xcblxcblxcblxcblxcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbi8qKlxcbiAqIFVzZSBpbnZhcmlhbnQoKSB0byBhc3NlcnQgc3RhdGUgd2hpY2ggeW91ciBwcm9ncmFtIGFzc3VtZXMgdG8gYmUgdHJ1ZS5cXG4gKlxcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXFxuICogdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGJyb2tlIGFuZCB3aGF0IHlvdSB3ZXJlXFxuICogZXhwZWN0aW5nLlxcbiAqXFxuICogVGhlIGludmFyaWFudCBtZXNzYWdlIHdpbGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBpbnZhcmlhbnRcXG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXFxuICovXFxuXFxudmFyIGludmFyaWFudCA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGlmICghY29uZGl0aW9uKSB7XFxuICAgIHZhciBlcnJvcjtcXG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXFxuICAgICAgICAnTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArXFxuICAgICAgICAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nXFxuICAgICAgKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcXG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxcbiAgICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsgfSlcXG4gICAgICApO1xcbiAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XFxuICAgIH1cXG5cXG4gICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGludmFyaWFudCdzIG93biBmcmFtZVxcbiAgICB0aHJvdyBlcnJvcjtcXG4gIH1cXG59O1xcblxcbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG52YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyohXFxuICBDb3B5cmlnaHQgKGMpIDIwMTYgSmVkIFdhdHNvbi5cXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXFxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXFxuKi9cXG4vKiBnbG9iYWwgZGVmaW5lICovXFxuXFxuKGZ1bmN0aW9uICgpIHtcXG5cXHQndXNlIHN0cmljdCc7XFxuXFxuXFx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xcblxcblxcdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xcblxcdFxcdHZhciBjbGFzc2VzID0gW107XFxuXFxuXFx0XFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcXG5cXHRcXHRcXHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xcblxcdFxcdFxcdGlmICghYXJnKSBjb250aW51ZTtcXG5cXG5cXHRcXHRcXHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XFxuXFxuXFx0XFx0XFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XFxuXFx0XFx0XFx0XFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XFxuXFx0XFx0XFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcXG5cXHRcXHRcXHRcXHRjbGFzc2VzLnB1c2goY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpKTtcXG5cXHRcXHRcXHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XFxuXFx0XFx0XFx0XFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xcblxcdFxcdFxcdFxcdFxcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcXG5cXHRcXHRcXHRcXHRcXHRcXHRjbGFzc2VzLnB1c2goa2V5KTtcXG5cXHRcXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xcblxcdH1cXG5cXG5cXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcXG5cXHRcXHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XFxuXFx0fSBlbHNlIGlmICh0cnVlKSB7XFxuXFx0XFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxcblxcdFxcdCEoX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyA9IFtdLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyA9IChmdW5jdGlvbiAoKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGNsYXNzTmFtZXM7XFxuXFx0XFx0fSkuYXBwbHkoZXhwb3J0cywgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyksXFxuXFx0XFx0XFx0XFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpO1xcblxcdH0gZWxzZSB7XFxuXFx0XFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xcblxcdH1cXG59KCkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheU1hcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29weUFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdHJpbmdUb1BhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgVXRpbFxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgcHJvcGVydHkgcGF0aCBhcnJheS5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy50b1BhdGgoJ2EuYi5jJyk7XFxuICogLy8gPT4gWydhJywgJ2InLCAnYyddXFxuICpcXG4gKiBfLnRvUGF0aCgnYVswXS5iLmMnKTtcXG4gKiAvLyA9PiBbJ2EnLCAnMCcsICdiJywgJ2MnXVxcbiAqL1xcbmZ1bmN0aW9uIHRvUGF0aCh2YWx1ZSkge1xcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gIH1cXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gW3ZhbHVlXSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvcHlBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RyaW5nVG9QYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XFxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XFxuICAgIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNTeW1ib2wpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBTeW1ib2wgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uU3ltYm9sO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFN5bWJvbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0LCAnY3JlYXRlJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobmF0aXZlQ3JlYXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGlzdENhY2hlQ2xlYXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19saXN0Q2FjaGVEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saXN0Q2FjaGVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19saXN0Q2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19saXN0Q2FjaGVTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEzKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAY29uc3RydWN0b3JcXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxcbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpc3RDYWNoZUNsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19saXN0Q2FjaGVEZWxldGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2xpc3RDYWNoZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbGlzdENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19saXN0Q2FjaGVTZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoTGlzdENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXFxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cXG4gKi9cXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcXG4gIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcXG4gICAgICByZXR1cm4gbGVuZ3RoO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gLTE7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFzc29jSW5kZXhPZik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzS2V5YWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTUpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXFxuICovXFxuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNLZXlhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShrZXkpXFxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXFxuICAgIDogZGF0YS5tYXA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldE1hcERhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nik7XFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcXG4gKiB2YWx1ZSBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIHtcXG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxcbiAgICB9KTtcXG4gIH0gZWxzZSB7XFxuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XFxuICB9XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VBc3NpZ25WYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcmlnaW5hbE1vZHVsZSkge1xcblxcdGlmKCFvcmlnaW5hbE1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcXG5cXHRcXHR2YXIgbW9kdWxlID0gT2JqZWN0LmNyZWF0ZShvcmlnaW5hbE1vZHVsZSk7XFxuXFx0XFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XFxuXFx0XFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImxvYWRlZFxcXCIsIHtcXG5cXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcblxcdFxcdFxcdGdldDogZnVuY3Rpb24oKSB7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIG1vZHVsZS5sO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9KTtcXG5cXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcXFwiaWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUuaTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImV4cG9ydHNcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHR9KTtcXG5cXHRcXHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcXG5cXHR9XFxuXFx0cmV0dXJuIG1vZHVsZTtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0xlbmd0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0xlbmd0aF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUubGVuZ3RoKSAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0FycmF5TGlrZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc09iamVjdExpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjguMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogZnVuY3Rpb24gRm9vKCkge1xcbiAqICAgdGhpcy5hID0gMTtcXG4gKiB9XFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICE9IG9iamVjdFRhZykge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgcHJvdG8gPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XFxuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1BsYWluT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gZm9ybWF0TmFtZTtcXG5mdW5jdGlvbiBmb3JtYXROYW1lKGNvbnRleHQsIG5hbWUpIHtcXG4gIHZhciBzZWN0aW9uUHJlZml4ID0gY29udGV4dC5fcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXg7XFxuXFxuICByZXR1cm4gIXNlY3Rpb25QcmVmaXggPyBuYW1lIDogc2VjdGlvblByZWZpeCArIFxcXCIuXFxcIiArIG5hbWU7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDI2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFjdGlvblR5cGVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhY3Rpb25UeXBlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlJbnNlcnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5SW5zZXJ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheU1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5TW92ZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlQb3BcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UG9wOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVB1c2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UHVzaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlSZW1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UmVtb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZUFsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmVBbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U2hpZnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U3BsaWNlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVNwbGljZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTd2FwXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVN3YXA7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5VW5zaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlVbnNoaWZ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhdXRvZmlsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXV0b2ZpbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJsdXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJsdXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNoYW5nZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hhbmdlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJkZXN0cm95XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZXN0cm95OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkZpZWxkc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGRzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZEFycmF5XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWVsZEFycmF5OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGb3JtXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGb3JtOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGb3JtU2VjdGlvblxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRm9ybVNlY3Rpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImZvY3VzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmb2N1czsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZm9ybVZhbHVlU2VsZWN0b3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvcm1WYWx1ZVNlbGVjdG9yOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtTmFtZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1OYW1lczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybVZhbHVlc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVZhbHVlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybUluaXRpYWxWYWx1ZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1Jbml0aWFsVmFsdWVzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVN5bmNFcnJvcnM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImdldEZvcm1Bc3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybUFzeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3luY1dhcm5pbmdzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtU3luY1dhcm5pbmdzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3VibWl0RXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtU3VibWl0RXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpbml0aWFsaXplXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbml0aWFsaXplOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpc0RpcnR5XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc0RpcnR5OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpc0ludmFsaWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzSW52YWxpZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNQcmlzdGluZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNQcmlzdGluZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNWYWxpZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNWYWxpZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNTdWJtaXR0aW5nXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc1N1Ym1pdHRpbmc7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImhhc1N1Ym1pdFN1Y2NlZWRlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaGFzU3VibWl0U3VjY2VlZGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJoYXNTdWJtaXRGYWlsZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGhhc1N1Ym1pdEZhaWxlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwicHJvcFR5cGVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwcm9wVHlwZXM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInJlZHVjZXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlZHVjZXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInJlZHV4Rm9ybVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVkdXhGb3JtOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZXNldFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzZXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdEZhaWxlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0RmFpbGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzZXRTdWJtaXRTdWNjZWVkZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNldFN1Ym1pdFN1Y2NlZWRlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRBc3luY1ZhbGlkYXRpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0QXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdGFydFN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhcnRTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0b3BBc3luY1ZhbGlkYXRpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0b3BBc3luY1ZhbGlkYXRpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0b3BTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0b3BTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTdWJtaXNzaW9uRXJyb3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1Ym1pc3Npb25FcnJvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidG91Y2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnJlZ2lzdGVyRmllbGRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVucmVnaXN0ZXJGaWVsZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidW50b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW50b3VjaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidmFsdWVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB2YWx1ZXM7IH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUFsbF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcblxcbnZhciBfY3JlYXRlQWxsID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlQWxsX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxudmFyIGFjdGlvblR5cGVzID0gX2NyZWF0ZUFsbC5hY3Rpb25UeXBlcyxcXG4gICAgYXJyYXlJbnNlcnQgPSBfY3JlYXRlQWxsLmFycmF5SW5zZXJ0LFxcbiAgICBhcnJheU1vdmUgPSBfY3JlYXRlQWxsLmFycmF5TW92ZSxcXG4gICAgYXJyYXlQb3AgPSBfY3JlYXRlQWxsLmFycmF5UG9wLFxcbiAgICBhcnJheVB1c2ggPSBfY3JlYXRlQWxsLmFycmF5UHVzaCxcXG4gICAgYXJyYXlSZW1vdmUgPSBfY3JlYXRlQWxsLmFycmF5UmVtb3ZlLFxcbiAgICBhcnJheVJlbW92ZUFsbCA9IF9jcmVhdGVBbGwuYXJyYXlSZW1vdmVBbGwsXFxuICAgIGFycmF5U2hpZnQgPSBfY3JlYXRlQWxsLmFycmF5U2hpZnQsXFxuICAgIGFycmF5U3BsaWNlID0gX2NyZWF0ZUFsbC5hcnJheVNwbGljZSxcXG4gICAgYXJyYXlTd2FwID0gX2NyZWF0ZUFsbC5hcnJheVN3YXAsXFxuICAgIGFycmF5VW5zaGlmdCA9IF9jcmVhdGVBbGwuYXJyYXlVbnNoaWZ0LFxcbiAgICBhdXRvZmlsbCA9IF9jcmVhdGVBbGwuYXV0b2ZpbGwsXFxuICAgIGJsdXIgPSBfY3JlYXRlQWxsLmJsdXIsXFxuICAgIGNoYW5nZSA9IF9jcmVhdGVBbGwuY2hhbmdlLFxcbiAgICBkZXN0cm95ID0gX2NyZWF0ZUFsbC5kZXN0cm95LFxcbiAgICBGaWVsZCA9IF9jcmVhdGVBbGwuRmllbGQsXFxuICAgIEZpZWxkcyA9IF9jcmVhdGVBbGwuRmllbGRzLFxcbiAgICBGaWVsZEFycmF5ID0gX2NyZWF0ZUFsbC5GaWVsZEFycmF5LFxcbiAgICBGb3JtID0gX2NyZWF0ZUFsbC5Gb3JtLFxcbiAgICBGb3JtU2VjdGlvbiA9IF9jcmVhdGVBbGwuRm9ybVNlY3Rpb24sXFxuICAgIGZvY3VzID0gX2NyZWF0ZUFsbC5mb2N1cyxcXG4gICAgZm9ybVZhbHVlU2VsZWN0b3IgPSBfY3JlYXRlQWxsLmZvcm1WYWx1ZVNlbGVjdG9yLFxcbiAgICBnZXRGb3JtTmFtZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1OYW1lcyxcXG4gICAgZ2V0Rm9ybVZhbHVlcyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVZhbHVlcyxcXG4gICAgZ2V0Rm9ybUluaXRpYWxWYWx1ZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1Jbml0aWFsVmFsdWVzLFxcbiAgICBnZXRGb3JtU3luY0Vycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVN5bmNFcnJvcnMsXFxuICAgIGdldEZvcm1Bc3luY0Vycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybUFzeW5jRXJyb3JzLFxcbiAgICBnZXRGb3JtU3luY1dhcm5pbmdzID0gX2NyZWF0ZUFsbC5nZXRGb3JtU3luY1dhcm5pbmdzLFxcbiAgICBnZXRGb3JtU3VibWl0RXJyb3JzID0gX2NyZWF0ZUFsbC5nZXRGb3JtU3VibWl0RXJyb3JzLFxcbiAgICBpbml0aWFsaXplID0gX2NyZWF0ZUFsbC5pbml0aWFsaXplLFxcbiAgICBpc0RpcnR5ID0gX2NyZWF0ZUFsbC5pc0RpcnR5LFxcbiAgICBpc0ludmFsaWQgPSBfY3JlYXRlQWxsLmlzSW52YWxpZCxcXG4gICAgaXNQcmlzdGluZSA9IF9jcmVhdGVBbGwuaXNQcmlzdGluZSxcXG4gICAgaXNWYWxpZCA9IF9jcmVhdGVBbGwuaXNWYWxpZCxcXG4gICAgaXNTdWJtaXR0aW5nID0gX2NyZWF0ZUFsbC5pc1N1Ym1pdHRpbmcsXFxuICAgIGhhc1N1Ym1pdFN1Y2NlZWRlZCA9IF9jcmVhdGVBbGwuaGFzU3VibWl0U3VjY2VlZGVkLFxcbiAgICBoYXNTdWJtaXRGYWlsZWQgPSBfY3JlYXRlQWxsLmhhc1N1Ym1pdEZhaWxlZCxcXG4gICAgcHJvcFR5cGVzID0gX2NyZWF0ZUFsbC5wcm9wVHlwZXMsXFxuICAgIHJlZHVjZXIgPSBfY3JlYXRlQWxsLnJlZHVjZXIsXFxuICAgIHJlZHV4Rm9ybSA9IF9jcmVhdGVBbGwucmVkdXhGb3JtLFxcbiAgICByZWdpc3RlckZpZWxkID0gX2NyZWF0ZUFsbC5yZWdpc3RlckZpZWxkLFxcbiAgICByZXNldCA9IF9jcmVhdGVBbGwucmVzZXQsXFxuICAgIHNldFN1Ym1pdEZhaWxlZCA9IF9jcmVhdGVBbGwuc2V0U3VibWl0RmFpbGVkLFxcbiAgICBzZXRTdWJtaXRTdWNjZWVkZWQgPSBfY3JlYXRlQWxsLnNldFN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBfY3JlYXRlQWxsLnN0YXJ0QXN5bmNWYWxpZGF0aW9uLFxcbiAgICBzdGFydFN1Ym1pdCA9IF9jcmVhdGVBbGwuc3RhcnRTdWJtaXQsXFxuICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfY3JlYXRlQWxsLnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgIHN0b3BTdWJtaXQgPSBfY3JlYXRlQWxsLnN0b3BTdWJtaXQsXFxuICAgIHN1Ym1pdCA9IF9jcmVhdGVBbGwuc3VibWl0LFxcbiAgICBTdWJtaXNzaW9uRXJyb3IgPSBfY3JlYXRlQWxsLlN1Ym1pc3Npb25FcnJvcixcXG4gICAgdG91Y2ggPSBfY3JlYXRlQWxsLnRvdWNoLFxcbiAgICB1bnJlZ2lzdGVyRmllbGQgPSBfY3JlYXRlQWxsLnVucmVnaXN0ZXJGaWVsZCxcXG4gICAgdW50b3VjaCA9IF9jcmVhdGVBbGwudW50b3VjaCxcXG4gICAgdmFsdWVzID0gX2NyZWF0ZUFsbC52YWx1ZXM7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfSU5TRVJUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9JTlNFUlQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX01PVkVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX01PVkU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX1BPUFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUE9QOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9QVVNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9QVVNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9SRU1PVkVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1JFTU9WRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfUkVNT1ZFX0FMTFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUkVNT1ZFX0FMTDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU0hJRlRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NISUZUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9TUExJQ0VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NQTElDRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfVU5TSElGVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfVU5TSElGVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU1dBUFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfU1dBUDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVVUT0ZJTExcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFVVE9GSUxMOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJCTFVSXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCTFVSOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJDSEFOR0VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENIQU5HRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQ0xFQVJfU1VCTUlUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9TVUJNSVQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENMRUFSX1NVQk1JVF9FUlJPUlM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX0FTWU5DX0VSUk9SXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9BU1lOQ19FUlJPUjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiREVTVFJPWVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gREVTVFJPWTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiRk9DVVNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZPQ1VTOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJJTklUSUFMSVpFXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJTklUSUFMSVpFOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJSRUdJU1RFUl9GSUVMRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUkVHSVNURVJfRklFTEQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlJFU0VUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSRVNFVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU0VUX1NVQk1JVF9GQUlMRURcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNFVF9TVUJNSVRfRkFJTEVEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTRVRfU1VCTUlUX1NVQ0NFRURFRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU0VUX1NVQk1JVF9TVUNDRUVERUQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUQVJUX0FTWU5DX1ZBTElEQVRJT05cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUQVJUX0FTWU5DX1ZBTElEQVRJT047IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUQVJUX1NVQk1JVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU1RBUlRfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVE9QX0FTWU5DX1ZBTElEQVRJT05cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUT1BfQVNZTkNfVkFMSURBVElPTjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU1RPUF9TVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUT1BfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNVQk1JVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVE9VQ0hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRPVUNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVTlJFR0lTVEVSX0ZJRUxEXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVTlJFR0lTVEVSX0ZJRUxEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVTlRPVUNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVTlRPVUNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVUERBVEVfU1lOQ19FUlJPUlNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVQREFURV9TWU5DX0VSUk9SUzsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVVBEQVRFX1NZTkNfV0FSTklOR1NcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVQREFURV9TWU5DX1dBUk5JTkdTOyB9KTtcXG52YXIgQVJSQVlfSU5TRVJUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9JTlNFUlQnO1xcbnZhciBBUlJBWV9NT1ZFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9NT1ZFJztcXG52YXIgQVJSQVlfUE9QID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9QT1AnO1xcbnZhciBBUlJBWV9QVVNIID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9QVVNIJztcXG52YXIgQVJSQVlfUkVNT1ZFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9SRU1PVkUnO1xcbnZhciBBUlJBWV9SRU1PVkVfQUxMID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9SRU1PVkVfQUxMJztcXG52YXIgQVJSQVlfU0hJRlQgPSAnQEByZWR1eC1mb3JtL0FSUkFZX1NISUZUJztcXG52YXIgQVJSQVlfU1BMSUNFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9TUExJQ0UnO1xcbnZhciBBUlJBWV9VTlNISUZUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9VTlNISUZUJztcXG52YXIgQVJSQVlfU1dBUCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfU1dBUCc7XFxudmFyIEFVVE9GSUxMID0gJ0BAcmVkdXgtZm9ybS9BVVRPRklMTCc7XFxudmFyIEJMVVIgPSAnQEByZWR1eC1mb3JtL0JMVVInO1xcbnZhciBDSEFOR0UgPSAnQEByZWR1eC1mb3JtL0NIQU5HRSc7XFxudmFyIENMRUFSX1NVQk1JVCA9ICdAQHJlZHV4LWZvcm0vQ0xFQVJfU1VCTUlUJztcXG52YXIgQ0xFQVJfU1VCTUlUX0VSUk9SUyA9ICdAQHJlZHV4LWZvcm0vQ0xFQVJfU1VCTUlUX0VSUk9SUyc7XFxudmFyIENMRUFSX0FTWU5DX0VSUk9SID0gJ0ByZWR1eC1mb3JtL0NMRUFSX0FTWU5DX0VSUk9SJztcXG52YXIgREVTVFJPWSA9ICdAQHJlZHV4LWZvcm0vREVTVFJPWSc7XFxudmFyIEZPQ1VTID0gJ0BAcmVkdXgtZm9ybS9GT0NVUyc7XFxudmFyIElOSVRJQUxJWkUgPSAnQEByZWR1eC1mb3JtL0lOSVRJQUxJWkUnO1xcbnZhciBSRUdJU1RFUl9GSUVMRCA9ICdAQHJlZHV4LWZvcm0vUkVHSVNURVJfRklFTEQnO1xcbnZhciBSRVNFVCA9ICdAQHJlZHV4LWZvcm0vUkVTRVQnO1xcbnZhciBTRVRfU1VCTUlUX0ZBSUxFRCA9ICdAQHJlZHV4LWZvcm0vU0VUX1NVQk1JVF9GQUlMRUQnO1xcbnZhciBTRVRfU1VCTUlUX1NVQ0NFRURFRCA9ICdAQHJlZHV4LWZvcm0vU0VUX1NVQk1JVF9TVUNDRUVERUQnO1xcbnZhciBTVEFSVF9BU1lOQ19WQUxJREFUSU9OID0gJ0BAcmVkdXgtZm9ybS9TVEFSVF9BU1lOQ19WQUxJREFUSU9OJztcXG52YXIgU1RBUlRfU1VCTUlUID0gJ0BAcmVkdXgtZm9ybS9TVEFSVF9TVUJNSVQnO1xcbnZhciBTVE9QX0FTWU5DX1ZBTElEQVRJT04gPSAnQEByZWR1eC1mb3JtL1NUT1BfQVNZTkNfVkFMSURBVElPTic7XFxudmFyIFNUT1BfU1VCTUlUID0gJ0BAcmVkdXgtZm9ybS9TVE9QX1NVQk1JVCc7XFxudmFyIFNVQk1JVCA9ICdAQHJlZHV4LWZvcm0vU1VCTUlUJztcXG52YXIgVE9VQ0ggPSAnQEByZWR1eC1mb3JtL1RPVUNIJztcXG52YXIgVU5SRUdJU1RFUl9GSUVMRCA9ICdAQHJlZHV4LWZvcm0vVU5SRUdJU1RFUl9GSUVMRCc7XFxudmFyIFVOVE9VQ0ggPSAnQEByZWR1eC1mb3JtL1VOVE9VQ0gnO1xcbnZhciBVUERBVEVfU1lOQ19FUlJPUlMgPSAnQEByZWR1eC1mb3JtL1VQREFURV9TWU5DX0VSUk9SUyc7XFxudmFyIFVQREFURV9TWU5DX1dBUk5JTkdTID0gJ0BAcmVkdXgtZm9ybS9VUERBVEVfU1lOQ19XQVJOSU5HUyc7XFxuXFxuLyoqKi8gfSksXFxuLyogMjggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxudmFyIGc7XFxuXFxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcXG5nID0gKGZ1bmN0aW9uKCkge1xcblxcdHJldHVybiB0aGlzO1xcbn0pKCk7XFxuXFxudHJ5IHtcXG5cXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcXG5cXHRnID0gZyB8fCBGdW5jdGlvbihcXFwicmV0dXJuIHRoaXNcXFwiKSgpIHx8ICgxLGV2YWwpKFxcXCJ0aGlzXFxcIik7XFxufSBjYXRjaChlKSB7XFxuXFx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcXG5cXHRpZih0eXBlb2Ygd2luZG93ID09PSBcXFwib2JqZWN0XFxcIilcXG5cXHRcXHRnID0gd2luZG93O1xcbn1cXG5cXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXFxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBnO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tYXBDYWNoZUNsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tYXBDYWNoZURlbGV0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcENhY2hlR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbWFwQ2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTE3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBDYWNoZVNldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTgpO1xcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXFxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tYXBDYWNoZUNsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX21hcENhY2hlRGVsZXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcENhY2hlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21hcENhY2hlU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKE1hcENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzRnVuY3Rpb24oXyk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxcbiAgdmFyIHRhZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzRnVuY3Rpb24pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDMxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIE1hcCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnTWFwJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoTWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdGFja0NsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc3RhY2tEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdGFja0dldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0YWNrSGFzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc3RhY2tTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI3KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKGVudHJpZXMpO1xcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbn1cXG5cXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxcblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RhY2tDbGVhcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdGFja0RlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdGFja0dldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdGFja0hhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zdGFja1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChTdGFjayk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcXG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XFxuXFxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1Byb3RvdHlwZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNBcmd1bWVudHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBmdW5jdGlvbih2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcmd1bWVudHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cXG4gKlxcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXFxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0xlbmd0aCgzKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0xlbmd0aCgnMycpO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcXG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0xlbmd0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihtb2R1bGUpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJGYWxzZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzcpO1xcblxcblxcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXFxudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xcblxcbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXFxudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uQnVmZmVyIDogdW5kZWZpbmVkO1xcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4zLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJGYWxzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0J1ZmZlcik7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjIpKG1vZHVsZSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNUeXBlZEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVVuYXJ5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbm9kZVV0aWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwKTtcXG5cXG5cXG5cXG5cXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xcbnZhciBub2RlSXNUeXBlZEFycmF5ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19ub2RlVXRpbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25vZGVVdGlsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmlzVHlwZWRBcnJheTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMy4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVVuYXJ5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShub2RlSXNUeXBlZEFycmF5KSA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1R5cGVkQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xcbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcXFxkKikkLztcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcXG5cXG4gIHJldHVybiAhIWxlbmd0aCAmJlxcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNJbmRleCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBtZW1iZXJPZiBfXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcXG4gKlxcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcXG4gKiAvLyA9PiB0cnVlXFxuICovXFxuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaWRlbnRpdHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheUxpa2VLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXFxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxcbiAqIGZvciBtb3JlIGRldGFpbHMuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQHNpbmNlIDAuMS4wXFxuICogQG1lbWJlck9mIF9cXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYSA9IDE7XFxuICogICB0aGlzLmIgPSAyO1xcbiAqIH1cXG4gKlxcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XFxuICpcXG4gKiBfLmtleXMobmV3IEZvbyk7XFxuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqXFxuICogXy5rZXlzKCdoaScpO1xcbiAqIC8vID0+IFsnMCcsICcxJ11cXG4gKi9cXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChrZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA0MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxEZWVwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxcbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cXG4gKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgaWYgKHZhbHVlID09PSBvdGhlcikge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlcikpKSB7XFxuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsRGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNFcXVhbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNTeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xcblxcblxcblxcbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcXFwufFxcXFxbKD86W15bXFxcXF1dKnwoW1xcXCInXSkoPzooPyFcXFxcMSlbXlxcXFxcXFxcXXxcXFxcXFxcXC4pKj9cXFxcMSlcXFxcXS8sXFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcXFx3KiQvO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcXG4gICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNLZXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xcblxcbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHdhcm5pbmc7XFxuLyoqXFxuICogUHJpbnRzIGEgd2FybmluZyBpbiB0aGUgY29uc29sZSBpZiBpdCBleGlzdHMuXFxuICpcXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBUaGUgd2FybmluZyBtZXNzYWdlLlxcbiAqIEByZXR1cm5zIHt2b2lkfVxcbiAqL1xcbmZ1bmN0aW9uIHdhcm5pbmcobWVzc2FnZSkge1xcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgfVxcbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXFxuICB0cnkge1xcbiAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IGlmIHlvdSBlbmFibGVcXG4gICAgLy8gXFxcImJyZWFrIG9uIGFsbCBleGNlcHRpb25zXFxcIiBpbiB5b3VyIGNvbnNvbGUsXFxuICAgIC8vIGl0IHdvdWxkIHBhdXNlIHRoZSBleGVjdXRpb24gYXQgdGhpcyBsaW5lLlxcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5ICovXFxuICB9IGNhdGNoIChlKSB7fVxcbiAgLyogZXNsaW50LWVuYWJsZSBuby1lbXB0eSAqL1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA0NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29tYmluZVJlZHVjZXJzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmluZEFjdGlvbkNyZWF0b3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYXBwbHlNaWRkbGV3YXJlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY29tcG9zZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbHNfd2FybmluZ19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NCk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3RvcmUgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBjb21iaW5lUmVkdWNlcnMgKi9cXG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmluZEFjdGlvbkNyZWF0b3JzX19bXFxcImFcXFwiXTsgfSk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgYXBwbHlNaWRkbGV3YXJlICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29tcG9zZSAqL1xcblxcblxcblxcblxcblxcblxcblxcbi8qXFxuKiBUaGlzIGlzIGEgZHVtbXkgZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGZ1bmN0aW9uIG5hbWUgaGFzIGJlZW4gYWx0ZXJlZCBieSBtaW5pZmljYXRpb24uXFxuKiBJZiB0aGUgZnVuY3Rpb24gaGFzIGJlZW4gbWluaWZpZWQgYW5kIE5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsIHdhcm4gdGhlIHVzZXIuXFxuKi9cXG5mdW5jdGlvbiBpc0NydXNoZWQoKSB7fVxcblxcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBpc0NydXNoZWQubmFtZSA9PT0gJ3N0cmluZycgJiYgaXNDcnVzaGVkLm5hbWUgIT09ICdpc0NydXNoZWQnKSB7XFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnWW91IGFyZSBjdXJyZW50bHkgdXNpbmcgbWluaWZpZWQgY29kZSBvdXRzaWRlIG9mIE5PREVfRU5WID09PSBcXFxcJ3Byb2R1Y3Rpb25cXFxcJy4gJyArICdUaGlzIG1lYW5zIHRoYXQgeW91IGFyZSBydW5uaW5nIGEgc2xvd2VyIGRldmVsb3BtZW50IGJ1aWxkIG9mIFJlZHV4LiAnICsgJ1lvdSBjYW4gdXNlIGxvb3NlLWVudmlmeSAoaHR0cHM6Ly9naXRodWIuY29tL3plcnRvc2gvbG9vc2UtZW52aWZ5KSBmb3IgYnJvd3NlcmlmeSAnICsgJ29yIERlZmluZVBsdWdpbiBmb3Igd2VicGFjayAoaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zMDAzMDAzMSkgJyArICd0byBlbnN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgY29kZSBmb3IgeW91ciBwcm9kdWN0aW9uIGJ1aWxkLicpO1xcbn1cXG5cXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNDYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb21pc2U7XFxuXFxuZnVuY3Rpb24gaXNQcm9taXNlKG9iaikge1xcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNFcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjYpO1xcblxcblxcbnZhciBjcmVhdGVJc1ZhbGlkID0gZnVuY3Rpb24gY3JlYXRlSXNWYWxpZChzdHJ1Y3R1cmUpIHtcXG4gIHZhciBnZXRJbiA9IHN0cnVjdHVyZS5nZXRJbixcXG4gICAgICBrZXlzID0gc3RydWN0dXJlLmtleXM7XFxuXFxuICB2YXIgaGFzRXJyb3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNFcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHZhciBpZ25vcmVTdWJtaXRFcnJvcnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgdmFyIHN5bmNFcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3luY0Vycm9yJyk7XFxuICAgICAgaWYgKHN5bmNFcnJvcikge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICBpZiAoIWlnbm9yZVN1Ym1pdEVycm9ycykge1xcbiAgICAgICAgdmFyIGVycm9yID0gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5lcnJvcicpO1xcbiAgICAgICAgaWYgKGVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnN5bmNFcnJvcnMnKTtcXG4gICAgICB2YXIgYXN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLmFzeW5jRXJyb3JzJyk7XFxuICAgICAgdmFyIHN1Ym1pdEVycm9ycyA9IGlnbm9yZVN1Ym1pdEVycm9ycyA/IHVuZGVmaW5lZCA6IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0RXJyb3JzJyk7XFxuICAgICAgaWYgKCFzeW5jRXJyb3JzICYmICFhc3luY0Vycm9ycyAmJiAhc3VibWl0RXJyb3JzKSB7XFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICB9XFxuXFxuICAgICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnJlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICBpZiAoIXJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gIWtleXMocmVnaXN0ZXJlZEZpZWxkcykuZmlsdGVyKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICByZXR1cm4gZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXS5jb3VudCcpID4gMDtcXG4gICAgICB9KS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICByZXR1cm4gaGFzRXJyb3IoZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXScpLCBzeW5jRXJyb3JzLCBhc3luY0Vycm9ycywgc3VibWl0RXJyb3JzKTtcXG4gICAgICB9KTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVJc1ZhbGlkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA0OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODIpO1xcblxcblxcblxcbnZhciBjdXN0b21pemVyID0gZnVuY3Rpb24gY3VzdG9taXplcihvYmplY3RWYWx1ZSwgb3RoZXJWYWx1ZSwgaW5kZXhPcmtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spIHtcXG4gIC8vIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNCNpc0VxdWFsV2l0aFxcbiAgaWYgKHN0YWNrKSB7XFxuICAgIC8vIFNoYWxsb3cgY29tcGFyZXNcXG4gICAgLy8gRm9yIDFzdCBsZXZlbCwgc3RhY2sgPT09IHVuZGVmaW5lZC5cXG4gICAgLy8gICAtPiBEbyBub3RoaW5nIChhbmQgaW1wbGljaXRseSByZXR1cm4gdW5kZWZpbmVkIHNvIHRoYXQgaXQgZ29lcyB0byBjb21wYXJlIDJuZCBsZXZlbClcXG4gICAgLy8gRm9yIDJuZCBsZXZlbCBhbmQgdXAsIHN0YWNrICE9PSB1bmRlZmluZWQuXFxuICAgIC8vICAgLT4gQ29tcGFyZSBieSA9PT0gb3BlcmF0b3JcXG4gICAgcmV0dXJuIG9iamVjdFZhbHVlID09PSBvdGhlclZhbHVlO1xcbiAgfVxcbn07XFxuXFxudmFyIHNoYWxsb3dDb21wYXJlID0gZnVuY3Rpb24gc2hhbGxvd0NvbXBhcmUoaW5zdGFuY2UsIG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICByZXR1cm4gIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzRXF1YWxXaXRoX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpbnN0YW5jZS5wcm9wcywgbmV4dFByb3BzLCBjdXN0b21pemVyKSB8fCAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGluc3RhbmNlLnN0YXRlLCBuZXh0U3RhdGUsIGN1c3RvbWl6ZXIpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2hhbGxvd0NvbXBhcmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDQ5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcXG4gKiBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5TWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxcbiAqL1xcbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xcblxcbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xcbiAgfVxcbiAgcmV0dXJuIGFycmF5O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb3B5QXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDUxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsKSB7LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZnJlZUdsb2JhbCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiA1MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZUNhcHBlZF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nik7XFxuXFxuXFxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xcbnZhciByZVByb3BOYW1lID0gL1teLltcXFxcXV0rfFxcXFxbKD86KC0/XFxcXGQrKD86XFxcXC5cXFxcZCspPyl8KFtcXFwiJ10pKCg/Oig/IVxcXFwyKVteXFxcXFxcXFxdfFxcXFxcXFxcLikqPylcXFxcMilcXFxcXXwoPz0oPzpcXFxcLnxcXFxcW1xcXFxdKSg/OlxcXFwufFxcXFxbXFxcXF18JCkpL2c7XFxuXFxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXFxudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcXFxcXChcXFxcXFxcXCk/L2c7XFxuXFxuLyoqXFxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICovXFxudmFyIHN0cmluZ1RvUGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX21lbW9pemVDYXBwZWRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKHN0cmluZykge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XFxuICAgIHJlc3VsdC5wdXNoKCcnKTtcXG4gIH1cXG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcXG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xcbiAgfSk7XFxuICByZXR1cm4gcmVzdWx0O1xcbn0pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0cmluZ1RvUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKlxcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXFxuICovXFxuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xcbiAgICB0cnkge1xcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcXG4gICAgfSBjYXRjaCAoZSkge31cXG4gICAgdHJ5IHtcXG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICB9XFxuICByZXR1cm4gJyc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvU291cmNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVRvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExOSk7XFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xcbiAqIC8vID0+ICcnXFxuICpcXG4gKiBfLnRvU3RyaW5nKC0wKTtcXG4gKiAvLyA9PiAnLTAnXFxuICpcXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gJzEsMiwzJ1xcbiAqL1xcbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVRvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19lcV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxcbiAqIGB1bmRlZmluZWRgIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXFxuICovXFxuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdFtrZXldLCB2YWx1ZSkpIHx8XFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgdmFsdWUpO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NpZ25NZXJnZVZhbHVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcblxcblxcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcXG4gIHRyeSB7XFxuICAgIHZhciBmdW5jID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xcbiAgICBmdW5jKHt9LCAnJywge30pO1xcbiAgICByZXR1cm4gZnVuYztcXG4gIH0gY2F0Y2ggKGUpIHt9XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChkZWZpbmVQcm9wZXJ0eSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUJhc2VGb3JfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI4KTtcXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxcbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cXG4gKi9cXG52YXIgYmFzZUZvciA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUJhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUZvcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIFVpbnQ4QXJyYXkgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uVWludDhBcnJheTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChVaW50OEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fb3ZlckFyZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MCk7XFxuXFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIGdldFByb3RvdHlwZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX292ZXJBcmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRQcm90b3R5cGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDYwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChvdmVyQXJnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAsIHVubGVzcyBga2V5YCBpcyBcXFwiX19wcm90b19fXFxcIi5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XFxuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG5cXG4gIHJldHVybiBvYmplY3Rba2V5XTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2FmZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5TGlrZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IE9iamVjdFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBGb28oKSB7XFxuICogICB0aGlzLmEgPSAxO1xcbiAqICAgdGhpcy5iID0gMjtcXG4gKiB9XFxuICpcXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xcbiAqXFxuICogXy5rZXlzSW4obmV3IEZvbyk7XFxuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXFxuICovXFxuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCB0cnVlKSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUaW1lc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XFxuICB2YXIgaXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSxcXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUaW1lc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcXG5cXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXFxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcXG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxcbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXFxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcXG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cXG4gICAgICAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzSW5kZXhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGtleSwgbGVuZ3RoKVxcbiAgICAgICAgKSkpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheUxpa2VLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlRm9yT3duX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUl0ZXJhdGVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1OSk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFzIGBvYmplY3RgIGFuZCB2YWx1ZXMgZ2VuZXJhdGVkXFxuICogYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1XFxuICogYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XFxuICogKHZhbHVlLCBrZXksIG9iamVjdCkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMi40LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIG9iamVjdC5cXG4gKiBAc2VlIF8ubWFwS2V5c1xcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgdXNlcnMgPSB7XFxuICogICAnZnJlZCc6ICAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxcbiAqICAgJ3BlYmJsZXMnOiB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSB9XFxuICogfTtcXG4gKlxcbiAqIF8ubWFwVmFsdWVzKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZTsgfSk7XFxuICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqXFxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXFxuICogXy5tYXBWYWx1ZXModXNlcnMsICdhZ2UnKTtcXG4gKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXFxuICovXFxuZnVuY3Rpb24gbWFwVmFsdWVzKG9iamVjdCwgaXRlcmF0ZWUpIHtcXG4gIHZhciByZXN1bHQgPSB7fTtcXG4gIGl0ZXJhdGVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUl0ZXJhdGVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpdGVyYXRlZSwgMyk7XFxuXFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlRm9yT3duX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQXNzaWduVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHJlc3VsdCwga2V5LCBpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmplY3QpKTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwVmFsdWVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU2V0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hcnJheVNvbWVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jYWNoZUhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjcpO1xcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XFxuXFxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cXG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcXG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcXG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICB9XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSB0cnVlLFxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU2V0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiB1bmRlZmluZWQ7XFxuXFxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcXG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xcblxcbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxcbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcXG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XFxuXFxuICAgIGlmIChjdXN0b21pemVyKSB7XFxuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcXG4gICAgfVxcbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIGlmIChjb21wYXJlZCkge1xcbiAgICAgICAgY29udGludWU7XFxuICAgICAgfVxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIGlmIChzZWVuKSB7XFxuICAgICAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hcnJheVNvbWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcXG4gICAgICAgICAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzZWVuLCBvdGhJbmRleCkgJiZcXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pKSB7XFxuICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIGlmICghKFxcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcXG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcXG4gICAgICAgICkpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgfVxcbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcXG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcXVhbEFycmF5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcXG4gKiAgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzU3RyaWN0Q29tcGFyYWJsZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxcbiAqIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdFtrZXldID09PSBzcmNWYWx1ZSAmJlxcbiAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY2FzdFBhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xcbiAgcGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwYXRoLCBvYmplY3QpO1xcblxcbiAgdmFyIGluZGV4ID0gMCxcXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcXG5cXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xcbiAgICBvYmplY3QgPSBvYmplY3RbT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdG9LZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGhbaW5kZXgrK10pXTtcXG4gIH1cXG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3N0cmluZ1RvUGF0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9TdHJpbmdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqL1xcbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdHJpbmdUb1BhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjYXN0UGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgdmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9ICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmXFxuICAgIFN5bWJvbC5mb3IgJiZcXG4gICAgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpKSB8fFxcbiAgICAweGVhYzc7XFxuXFxuICB2YXIgaXNWYWxpZEVsZW1lbnQgPSBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXFxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXFxuICAgICAgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XFxuICB9O1xcblxcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXFxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XFxuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk0KShpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XFxufSBlbHNlIHtcXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXFxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXFxuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk3KSgpO1xcbn1cXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1YnNjcmlwdGlvblNoYXBlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9yZVNoYXBlOyB9KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyk7XFxuXFxuXFxudmFyIHN1YnNjcmlwdGlvblNoYXBlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuc2hhcGUoe1xcbiAgdHJ5U3Vic2NyaWJlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWQsXFxuICB0cnlVbnN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgbm90aWZ5TmVzdGVkU3ViczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgaXNTdWJzY3JpYmVkOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWRcXG59KTtcXG5cXG52YXIgc3RvcmVTaGFwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLnNoYXBlKHtcXG4gIHN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgZGlzcGF0Y2g6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmZ1bmMuaXNSZXF1aXJlZCxcXG4gIGdldFN0YXRlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWRcXG59KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA3MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSBjb25uZWN0QWR2YW5jZWQ7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbHNfU3Vic2NyaXB0aW9uX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciBob3RSZWxvYWRpbmdWZXJzaW9uID0gMDtcXG52YXIgZHVtbXlTdGF0ZSA9IHt9O1xcbmZ1bmN0aW9uIG5vb3AoKSB7fVxcbmZ1bmN0aW9uIG1ha2VTZWxlY3RvclN0YXRlZnVsKHNvdXJjZVNlbGVjdG9yLCBzdG9yZSkge1xcbiAgLy8gd3JhcCB0aGUgc2VsZWN0b3IgaW4gYW4gb2JqZWN0IHRoYXQgdHJhY2tzIGl0cyByZXN1bHRzIGJldHdlZW4gcnVucy5cXG4gIHZhciBzZWxlY3RvciA9IHtcXG4gICAgcnVuOiBmdW5jdGlvbiBydW5Db21wb25lbnRTZWxlY3Rvcihwcm9wcykge1xcbiAgICAgIHRyeSB7XFxuICAgICAgICB2YXIgbmV4dFByb3BzID0gc291cmNlU2VsZWN0b3Ioc3RvcmUuZ2V0U3RhdGUoKSwgcHJvcHMpO1xcbiAgICAgICAgaWYgKG5leHRQcm9wcyAhPT0gc2VsZWN0b3IucHJvcHMgfHwgc2VsZWN0b3IuZXJyb3IpIHtcXG4gICAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcXG4gICAgICAgICAgc2VsZWN0b3IucHJvcHMgPSBuZXh0UHJvcHM7XFxuICAgICAgICAgIHNlbGVjdG9yLmVycm9yID0gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcXG4gICAgICAgIHNlbGVjdG9yLmVycm9yID0gZXJyb3I7XFxuICAgICAgfVxcbiAgICB9XFxuICB9O1xcblxcbiAgcmV0dXJuIHNlbGVjdG9yO1xcbn1cXG5cXG5mdW5jdGlvbiBjb25uZWN0QWR2YW5jZWQoXFxuLypcXG4gIHNlbGVjdG9yRmFjdG9yeSBpcyBhIGZ1bmMgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcmV0dXJuaW5nIHRoZSBzZWxlY3RvciBmdW5jdGlvbiB1c2VkIHRvXFxuICBjb21wdXRlIG5ldyBwcm9wcyBmcm9tIHN0YXRlLCBwcm9wcywgYW5kIGRpc3BhdGNoLiBGb3IgZXhhbXBsZTpcXG4gICAgIGV4cG9ydCBkZWZhdWx0IGNvbm5lY3RBZHZhbmNlZCgoZGlzcGF0Y2gsIG9wdGlvbnMpID0+IChzdGF0ZSwgcHJvcHMpID0+ICh7XFxuICAgICAgdGhpbmc6IHN0YXRlLnRoaW5nc1twcm9wcy50aGluZ0lkXSxcXG4gICAgICBzYXZlVGhpbmc6IGZpZWxkcyA9PiBkaXNwYXRjaChhY3Rpb25DcmVhdG9ycy5zYXZlVGhpbmcocHJvcHMudGhpbmdJZCwgZmllbGRzKSksXFxuICAgIH0pKShZb3VyQ29tcG9uZW50KVxcbiAgIEFjY2VzcyB0byBkaXNwYXRjaCBpcyBwcm92aWRlZCB0byB0aGUgZmFjdG9yeSBzbyBzZWxlY3RvckZhY3RvcmllcyBjYW4gYmluZCBhY3Rpb25DcmVhdG9yc1xcbiAgb3V0c2lkZSBvZiB0aGVpciBzZWxlY3RvciBhcyBhbiBvcHRpbWl6YXRpb24uIE9wdGlvbnMgcGFzc2VkIHRvIGNvbm5lY3RBZHZhbmNlZCBhcmUgcGFzc2VkIHRvXFxuICB0aGUgc2VsZWN0b3JGYWN0b3J5LCBhbG9uZyB3aXRoIGRpc3BsYXlOYW1lIGFuZCBXcmFwcGVkQ29tcG9uZW50LCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxcbiAgIE5vdGUgdGhhdCBzZWxlY3RvckZhY3RvcnkgaXMgcmVzcG9uc2libGUgZm9yIGFsbCBjYWNoaW5nL21lbW9pemF0aW9uIG9mIGluYm91bmQgYW5kIG91dGJvdW5kXFxuICBwcm9wcy4gRG8gbm90IHVzZSBjb25uZWN0QWR2YW5jZWQgZGlyZWN0bHkgd2l0aG91dCBtZW1vaXppbmcgcmVzdWx0cyBiZXR3ZWVuIGNhbGxzIHRvIHlvdXJcXG4gIHNlbGVjdG9yLCBvdGhlcndpc2UgdGhlIENvbm5lY3QgY29tcG9uZW50IHdpbGwgcmUtcmVuZGVyIG9uIGV2ZXJ5IHN0YXRlIG9yIHByb3BzIGNoYW5nZS5cXG4qL1xcbnNlbGVjdG9yRmFjdG9yeSkge1xcbiAgdmFyIF9jb250ZXh0VHlwZXMsIF9jaGlsZENvbnRleHRUeXBlcztcXG5cXG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcXG4gICAgICBfcmVmJGdldERpc3BsYXlOYW1lID0gX3JlZi5nZXREaXNwbGF5TmFtZSxcXG4gICAgICBnZXREaXNwbGF5TmFtZSA9IF9yZWYkZ2V0RGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgIHJldHVybiAnQ29ubmVjdEFkdmFuY2VkKCcgKyBuYW1lICsgJyknO1xcbiAgfSA6IF9yZWYkZ2V0RGlzcGxheU5hbWUsXFxuICAgICAgX3JlZiRtZXRob2ROYW1lID0gX3JlZi5tZXRob2ROYW1lLFxcbiAgICAgIG1ldGhvZE5hbWUgPSBfcmVmJG1ldGhvZE5hbWUgPT09IHVuZGVmaW5lZCA/ICdjb25uZWN0QWR2YW5jZWQnIDogX3JlZiRtZXRob2ROYW1lLFxcbiAgICAgIF9yZWYkcmVuZGVyQ291bnRQcm9wID0gX3JlZi5yZW5kZXJDb3VudFByb3AsXFxuICAgICAgcmVuZGVyQ291bnRQcm9wID0gX3JlZiRyZW5kZXJDb3VudFByb3AgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9yZWYkcmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9IF9yZWYuc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyA9IF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IF9yZWYkc2hvdWxkSGFuZGxlU3RhdCxcXG4gICAgICBfcmVmJHN0b3JlS2V5ID0gX3JlZi5zdG9yZUtleSxcXG4gICAgICBzdG9yZUtleSA9IF9yZWYkc3RvcmVLZXkgPT09IHVuZGVmaW5lZCA/ICdzdG9yZScgOiBfcmVmJHN0b3JlS2V5LFxcbiAgICAgIF9yZWYkd2l0aFJlZiA9IF9yZWYud2l0aFJlZixcXG4gICAgICB3aXRoUmVmID0gX3JlZiR3aXRoUmVmID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYkd2l0aFJlZixcXG4gICAgICBjb25uZWN0T3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2dldERpc3BsYXlOYW1lJywgJ21ldGhvZE5hbWUnLCAncmVuZGVyQ291bnRQcm9wJywgJ3Nob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcycsICdzdG9yZUtleScsICd3aXRoUmVmJ10pO1xcblxcbiAgdmFyIHN1YnNjcmlwdGlvbktleSA9IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XFxuICB2YXIgdmVyc2lvbiA9IGhvdFJlbG9hZGluZ1ZlcnNpb24rKztcXG5cXG4gIHZhciBjb250ZXh0VHlwZXMgPSAoX2NvbnRleHRUeXBlcyA9IHt9LCBfY29udGV4dFR5cGVzW3N0b3JlS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImFcXFwiIC8qIHN0b3JlU2hhcGUgKi9dLCBfY29udGV4dFR5cGVzW3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9jb250ZXh0VHlwZXMpO1xcbiAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gKF9jaGlsZENvbnRleHRUeXBlcyA9IHt9LCBfY2hpbGRDb250ZXh0VHlwZXNbc3Vic2NyaXB0aW9uS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImJcXFwiIC8qIHN1YnNjcmlwdGlvblNoYXBlICovXSwgX2NoaWxkQ29udGV4dFR5cGVzKTtcXG5cXG4gIHJldHVybiBmdW5jdGlvbiB3cmFwV2l0aENvbm5lY3QoV3JhcHBlZENvbXBvbmVudCkge1xcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHR5cGVvZiBXcmFwcGVkQ29tcG9uZW50ID09ICdmdW5jdGlvbicsICdZb3UgbXVzdCBwYXNzIGEgY29tcG9uZW50IHRvIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSAnICsgKCdjb25uZWN0LiBJbnN0ZWFkIHJlY2VpdmVkICcgKyBKU09OLnN0cmluZ2lmeShXcmFwcGVkQ29tcG9uZW50KSkpO1xcblxcbiAgICB2YXIgd3JhcHBlZENvbXBvbmVudE5hbWUgPSBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcXG5cXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gZ2V0RGlzcGxheU5hbWUod3JhcHBlZENvbXBvbmVudE5hbWUpO1xcblxcbiAgICB2YXIgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyA9IF9leHRlbmRzKHt9LCBjb25uZWN0T3B0aW9ucywge1xcbiAgICAgIGdldERpc3BsYXlOYW1lOiBnZXREaXNwbGF5TmFtZSxcXG4gICAgICBtZXRob2ROYW1lOiBtZXRob2ROYW1lLFxcbiAgICAgIHJlbmRlckNvdW50UHJvcDogcmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxcbiAgICAgIHN0b3JlS2V5OiBzdG9yZUtleSxcXG4gICAgICB3aXRoUmVmOiB3aXRoUmVmLFxcbiAgICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcXG4gICAgICB3cmFwcGVkQ29tcG9uZW50TmFtZTogd3JhcHBlZENvbXBvbmVudE5hbWUsXFxuICAgICAgV3JhcHBlZENvbXBvbmVudDogV3JhcHBlZENvbXBvbmVudFxcbiAgICB9KTtcXG5cXG4gICAgdmFyIENvbm5lY3QgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICAgIF9pbmhlcml0cyhDb25uZWN0LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgICBmdW5jdGlvbiBDb25uZWN0KHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdCk7XFxuXFxuICAgICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICAgIF90aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7fTtcXG4gICAgICAgIF90aGlzLnJlbmRlckNvdW50ID0gMDtcXG4gICAgICAgIF90aGlzLnN0b3JlID0gcHJvcHNbc3RvcmVLZXldIHx8IGNvbnRleHRbc3RvcmVLZXldO1xcbiAgICAgICAgX3RoaXMucHJvcHNNb2RlID0gQm9vbGVhbihwcm9wc1tzdG9yZUtleV0pO1xcbiAgICAgICAgX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlID0gX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlLmJpbmQoX3RoaXMpO1xcblxcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKShfdGhpcy5zdG9yZSwgJ0NvdWxkIG5vdCBmaW5kIFxcXCInICsgc3RvcmVLZXkgKyAnXFxcIiBpbiBlaXRoZXIgdGhlIGNvbnRleHQgb3IgcHJvcHMgb2YgJyArICgnXFxcIicgKyBkaXNwbGF5TmFtZSArICdcXFwiLiBFaXRoZXIgd3JhcCB0aGUgcm9vdCBjb21wb25lbnQgaW4gYSA8UHJvdmlkZXI+LCAnKSArICgnb3IgZXhwbGljaXRseSBwYXNzIFxcXCInICsgc3RvcmVLZXkgKyAnXFxcIiBhcyBhIHByb3AgdG8gXFxcIicgKyBkaXNwbGF5TmFtZSArICdcXFwiLicpKTtcXG5cXG4gICAgICAgIF90aGlzLmluaXRTZWxlY3RvcigpO1xcbiAgICAgICAgX3RoaXMuaW5pdFN1YnNjcmlwdGlvbigpO1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICAgIH1cXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5nZXRDaGlsZENvbnRleHQgPSBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgICB2YXIgX3JlZjI7XFxuXFxuICAgICAgICAvLyBJZiB0aGlzIGNvbXBvbmVudCByZWNlaXZlZCBzdG9yZSBmcm9tIHByb3BzLCBpdHMgc3Vic2NyaXB0aW9uIHNob3VsZCBiZSB0cmFuc3BhcmVudFxcbiAgICAgICAgLy8gdG8gYW55IGRlc2NlbmRhbnRzIHJlY2VpdmluZyBzdG9yZStzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0OyBpdCBwYXNzZXMgYWxvbmdcXG4gICAgICAgIC8vIHN1YnNjcmlwdGlvbiBwYXNzZWQgdG8gaXQuIE90aGVyd2lzZSwgaXQgc2hhZG93cyB0aGUgcGFyZW50IHN1YnNjcmlwdGlvbiwgd2hpY2ggYWxsb3dzXFxuICAgICAgICAvLyBDb25uZWN0IHRvIGNvbnRyb2wgb3JkZXJpbmcgb2Ygbm90aWZpY2F0aW9ucyB0byBmbG93IHRvcC1kb3duLlxcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMucHJvcHNNb2RlID8gbnVsbCA6IHRoaXMuc3Vic2NyaXB0aW9uO1xcbiAgICAgICAgcmV0dXJuIF9yZWYyID0ge30sIF9yZWYyW3N1YnNjcmlwdGlvbktleV0gPSBzdWJzY3JpcHRpb24gfHwgdGhpcy5jb250ZXh0W3N1YnNjcmlwdGlvbktleV0sIF9yZWYyO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcXG4gICAgICAgIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm47XFxuXFxuICAgICAgICAvLyBjb21wb25lbnRXaWxsTW91bnQgZmlyZXMgZHVyaW5nIHNlcnZlciBzaWRlIHJlbmRlcmluZywgYnV0IGNvbXBvbmVudERpZE1vdW50IGFuZFxcbiAgICAgICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQgZG8gbm90LiBCZWNhdXNlIG9mIHRoaXMsIHRyeVN1YnNjcmliZSBoYXBwZW5zIGR1cmluZyAuLi5kaWRNb3VudC5cXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdW5zdWJzY3JpcHRpb24gd291bGQgbmV2ZXIgdGFrZSBwbGFjZSBkdXJpbmcgU1NSLCBjYXVzaW5nIGEgbWVtb3J5IGxlYWsuXFxuICAgICAgICAvLyBUbyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBjaGlsZCBjb21wb25lbnQgbWF5IGhhdmUgdHJpZ2dlcmVkIGEgc3RhdGUgY2hhbmdlIGJ5XFxuICAgICAgICAvLyBkaXNwYXRjaGluZyBhbiBhY3Rpb24gaW4gaXRzIGNvbXBvbmVudFdpbGxNb3VudCwgd2UgaGF2ZSB0byByZS1ydW4gdGhlIHNlbGVjdCBhbmQgbWF5YmVcXG4gICAgICAgIC8vIHJlLXJlbmRlci5cXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyk7XFxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUpIHRoaXMuZm9yY2VVcGRhdGUoKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4obmV4dFByb3BzKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG51bGw7XFxuICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMgPSBub29wO1xcbiAgICAgICAgdGhpcy5zdG9yZSA9IG51bGw7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnJ1biA9IG5vb3A7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuZ2V0V3JhcHBlZEluc3RhbmNlID0gZnVuY3Rpb24gZ2V0V3JhcHBlZEluc3RhbmNlKCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh3aXRoUmVmLCAnVG8gYWNjZXNzIHRoZSB3cmFwcGVkIGluc3RhbmNlLCB5b3UgbmVlZCB0byBzcGVjaWZ5ICcgKyAoJ3sgd2l0aFJlZjogdHJ1ZSB9IGluIHRoZSBvcHRpb25zIGFyZ3VtZW50IG9mIHRoZSAnICsgbWV0aG9kTmFtZSArICcoKSBjYWxsLicpKTtcXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRJbnN0YW5jZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnNldFdyYXBwZWRJbnN0YW5jZSA9IGZ1bmN0aW9uIHNldFdyYXBwZWRJbnN0YW5jZShyZWYpIHtcXG4gICAgICAgIHRoaXMud3JhcHBlZEluc3RhbmNlID0gcmVmO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFNlbGVjdG9yID0gZnVuY3Rpb24gaW5pdFNlbGVjdG9yKCkge1xcbiAgICAgICAgdmFyIHNvdXJjZVNlbGVjdG9yID0gc2VsZWN0b3JGYWN0b3J5KHRoaXMuc3RvcmUuZGlzcGF0Y2gsIHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMpO1xcbiAgICAgICAgdGhpcy5zZWxlY3RvciA9IG1ha2VTZWxlY3RvclN0YXRlZnVsKHNvdXJjZVNlbGVjdG9yLCB0aGlzLnN0b3JlKTtcXG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIGluaXRTdWJzY3JpcHRpb24oKSB7XFxuICAgICAgICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuO1xcblxcbiAgICAgICAgLy8gcGFyZW50U3ViJ3Mgc291cmNlIHNob3VsZCBtYXRjaCB3aGVyZSBzdG9yZSBjYW1lIGZyb206IHByb3BzIHZzLiBjb250ZXh0LiBBIGNvbXBvbmVudFxcbiAgICAgICAgLy8gY29ubmVjdGVkIHRvIHRoZSBzdG9yZSB2aWEgcHJvcHMgc2hvdWxkbid0IHVzZSBzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0LCBvciB2aWNlIHZlcnNhLlxcbiAgICAgICAgdmFyIHBhcmVudFN1YiA9ICh0aGlzLnByb3BzTW9kZSA/IHRoaXMucHJvcHMgOiB0aGlzLmNvbnRleHQpW3N1YnNjcmlwdGlvbktleV07XFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX1N1YnNjcmlwdGlvbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSh0aGlzLnN0b3JlLCBwYXJlbnRTdWIsIHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpKTtcXG5cXG4gICAgICAgIC8vIGBub3RpZnlOZXN0ZWRTdWJzYCBpcyBkdXBsaWNhdGVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29tcG9uZW50IGlzICB1bm1vdW50ZWQgaW5cXG4gICAgICAgIC8vIHRoZSBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLCB3aGVyZSBgdGhpcy5zdWJzY3JpcHRpb25gIHdpbGwgdGhlbiBiZSBudWxsLiBBblxcbiAgICAgICAgLy8gZXh0cmEgbnVsbCBjaGVjayBldmVyeSBjaGFuZ2UgY2FuIGJlIGF2b2lkZWQgYnkgY29weWluZyB0aGUgbWV0aG9kIG9udG8gYHRoaXNgIGFuZCB0aGVuXFxuICAgICAgICAvLyByZXBsYWNpbmcgaXQgd2l0aCBhIG5vLW9wIG9uIHVubW91bnQuIFRoaXMgY2FuIHByb2JhYmx5IGJlIGF2b2lkZWQgaWYgU3Vic2NyaXB0aW9uJ3NcXG4gICAgICAgIC8vIGxpc3RlbmVycyBsb2dpYyBpcyBjaGFuZ2VkIHRvIG5vdCBjYWxsIGxpc3RlbmVycyB0aGF0IGhhdmUgYmVlbiB1bnN1YnNjcmliZWQgaW4gdGhlXFxuICAgICAgICAvLyBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLlxcbiAgICAgICAgdGhpcy5ub3RpZnlOZXN0ZWRTdWJzID0gdGhpcy5zdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3Vicy5iaW5kKHRoaXMuc3Vic2NyaXB0aW9uKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm9uU3RhdGVDaGFuZ2UgPSBmdW5jdGlvbiBvblN0YXRlQ2hhbmdlKCkge1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyk7XFxuXFxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlKSB7XFxuICAgICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicygpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgdGhpcy5jb21wb25lbnREaWRVcGRhdGUgPSB0aGlzLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZTtcXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShkdW1teVN0YXRlKTtcXG4gICAgICAgIH1cXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSgpIHtcXG4gICAgICAgIC8vIGBjb21wb25lbnREaWRVcGRhdGVgIGlzIGNvbmRpdGlvbmFsbHkgaW1wbGVtZW50ZWQgd2hlbiBgb25TdGF0ZUNoYW5nZWAgZGV0ZXJtaW5lcyBpdFxcbiAgICAgICAgLy8gbmVlZHMgdG8gbm90aWZ5IG5lc3RlZCBzdWJzLiBPbmNlIGNhbGxlZCwgaXQgdW5pbXBsZW1lbnRzIGl0c2VsZiB1bnRpbCBmdXJ0aGVyIHN0YXRlXFxuICAgICAgICAvLyBjaGFuZ2VzIG9jY3VyLiBEb2luZyBpdCB0aGlzIHdheSB2cyBoYXZpbmcgYSBwZXJtYW5lbnQgYGNvbXBvbmVudERpZFVwZGF0ZWAgdGhhdCBkb2VzXFxuICAgICAgICAvLyBhIGJvb2xlYW4gY2hlY2sgZXZlcnkgdGltZSBhdm9pZHMgYW4gZXh0cmEgbWV0aG9kIGNhbGwgbW9zdCBvZiB0aGUgdGltZSwgcmVzdWx0aW5nXFxuICAgICAgICAvLyBpbiBzb21lIHBlcmYgYm9vc3QuXFxuICAgICAgICB0aGlzLmNvbXBvbmVudERpZFVwZGF0ZSA9IHVuZGVmaW5lZDtcXG4gICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicygpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaXNTdWJzY3JpYmVkID0gZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5zdWJzY3JpcHRpb24pICYmIHRoaXMuc3Vic2NyaXB0aW9uLmlzU3Vic2NyaWJlZCgpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuYWRkRXh0cmFQcm9wcyA9IGZ1bmN0aW9uIGFkZEV4dHJhUHJvcHMocHJvcHMpIHtcXG4gICAgICAgIGlmICghd2l0aFJlZiAmJiAhcmVuZGVyQ291bnRQcm9wICYmICEodGhpcy5wcm9wc01vZGUgJiYgdGhpcy5zdWJzY3JpcHRpb24pKSByZXR1cm4gcHJvcHM7XFxuICAgICAgICAvLyBtYWtlIGEgc2hhbGxvdyBjb3B5IHNvIHRoYXQgZmllbGRzIGFkZGVkIGRvbid0IGxlYWsgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdG9yLlxcbiAgICAgICAgLy8gdGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgJ3JlZicgc2luY2UgdGhhdCdzIGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlIGNvbXBvbmVudFxcbiAgICAgICAgLy8gaW5zdGFuY2UuIGEgc2luZ2xldG9uIG1lbW9pemVkIHNlbGVjdG9yIHdvdWxkIHRoZW4gYmUgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGVcXG4gICAgICAgIC8vIGluc3RhbmNlLCBwcmV2ZW50aW5nIHRoZSBpbnN0YW5jZSBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWRcXG4gICAgICAgIHZhciB3aXRoRXh0cmFzID0gX2V4dGVuZHMoe30sIHByb3BzKTtcXG4gICAgICAgIGlmICh3aXRoUmVmKSB3aXRoRXh0cmFzLnJlZiA9IHRoaXMuc2V0V3JhcHBlZEluc3RhbmNlO1xcbiAgICAgICAgaWYgKHJlbmRlckNvdW50UHJvcCkgd2l0aEV4dHJhc1tyZW5kZXJDb3VudFByb3BdID0gdGhpcy5yZW5kZXJDb3VudCsrO1xcbiAgICAgICAgaWYgKHRoaXMucHJvcHNNb2RlICYmIHRoaXMuc3Vic2NyaXB0aW9uKSB3aXRoRXh0cmFzW3N1YnNjcmlwdGlvbktleV0gPSB0aGlzLnN1YnNjcmlwdGlvbjtcXG4gICAgICAgIHJldHVybiB3aXRoRXh0cmFzO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gdGhpcy5zZWxlY3RvcjtcXG4gICAgICAgIHNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xcblxcbiAgICAgICAgaWYgKHNlbGVjdG9yLmVycm9yKSB7XFxuICAgICAgICAgIHRocm93IHNlbGVjdG9yLmVycm9yO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShXcmFwcGVkQ29tcG9uZW50LCB0aGlzLmFkZEV4dHJhUHJvcHMoc2VsZWN0b3IucHJvcHMpKTtcXG4gICAgICAgIH1cXG4gICAgICB9O1xcblxcbiAgICAgIHJldHVybiBDb25uZWN0O1xcbiAgICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICAgIENvbm5lY3QuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XFxuICAgIENvbm5lY3QuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcXG4gICAgQ29ubmVjdC5jaGlsZENvbnRleHRUeXBlcyA9IGNoaWxkQ29udGV4dFR5cGVzO1xcbiAgICBDb25uZWN0LmNvbnRleHRUeXBlcyA9IGNvbnRleHRUeXBlcztcXG4gICAgQ29ubmVjdC5wcm9wVHlwZXMgPSBjb250ZXh0VHlwZXM7XFxuXFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVcGRhdGUoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIC8vIFdlIGFyZSBob3QgcmVsb2FkaW5nIVxcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiAhPT0gdmVyc2lvbikge1xcbiAgICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbiAgICAgICAgICB0aGlzLmluaXRTZWxlY3RvcigpO1xcblxcbiAgICAgICAgICAvLyBJZiBhbnkgY29ubmVjdGVkIGRlc2NlbmRhbnRzIGRvbid0IGhvdCByZWxvYWQgKGFuZCByZXN1YnNjcmliZSBpbiB0aGUgcHJvY2VzcyksIHRoZWlyXFxuICAgICAgICAgIC8vIGxpc3RlbmVycyB3aWxsIGJlIGxvc3Qgd2hlbiB3ZSB1bnN1YnNjcmliZS4gVW5mb3J0dW5hdGVseSwgYnkgY29weWluZyBvdmVyIGFsbFxcbiAgICAgICAgICAvLyBsaXN0ZW5lcnMsIHRoaXMgZG9lcyBtZWFuIHRoYXQgdGhlIG9sZCB2ZXJzaW9ucyBvZiBjb25uZWN0ZWQgZGVzY2VuZGFudHMgd2lsbCBzdGlsbCBiZVxcbiAgICAgICAgICAvLyBub3RpZmllZCBvZiBzdGF0ZSBjaGFuZ2VzOyBob3dldmVyLCB0aGVpciBvblN0YXRlQ2hhbmdlIGZ1bmN0aW9uIGlzIGEgbm8tb3Agc28gdGhpc1xcbiAgICAgICAgICAvLyBpc24ndCBhIGh1Z2UgZGVhbC5cXG4gICAgICAgICAgdmFyIG9sZExpc3RlbmVycyA9IFtdO1xcblxcbiAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcXG4gICAgICAgICAgICBvbGRMaXN0ZW5lcnMgPSB0aGlzLnN1YnNjcmlwdGlvbi5saXN0ZW5lcnMuZ2V0KCk7XFxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICB0aGlzLmluaXRTdWJzY3JpcHRpb24oKTtcXG4gICAgICAgICAgaWYgKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykge1xcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xcbiAgICAgICAgICAgIG9sZExpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5zdWJzY3JpcHRpb24ubGlzdGVuZXJzLnN1YnNjcmliZShsaXN0ZW5lcik7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9O1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0KCkoQ29ubmVjdCwgV3JhcHBlZENvbXBvbmVudCk7XFxuICB9O1xcbn1cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFjdGlvblR5cGVzOyB9KTtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAzKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGVzZSBhcmUgcHJpdmF0ZSBhY3Rpb24gdHlwZXMgcmVzZXJ2ZWQgYnkgUmVkdXguXFxuICogRm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHlvdSBtdXN0IHJldHVybiB0aGUgY3VycmVudCBzdGF0ZS5cXG4gKiBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyB1bmRlZmluZWQsIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS5cXG4gKiBEbyBub3QgcmVmZXJlbmNlIHRoZXNlIGFjdGlvbiB0eXBlcyBkaXJlY3RseSBpbiB5b3VyIGNvZGUuXFxuICovXFxudmFyIEFjdGlvblR5cGVzID0ge1xcbiAgSU5JVDogJ0BAcmVkdXgvSU5JVCdcXG5cXG4gIC8qKlxcbiAgICogQ3JlYXRlcyBhIFJlZHV4IHN0b3JlIHRoYXQgaG9sZHMgdGhlIHN0YXRlIHRyZWUuXFxuICAgKiBUaGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBkYXRhIGluIHRoZSBzdG9yZSBpcyB0byBjYWxsIGBkaXNwYXRjaCgpYCBvbiBpdC5cXG4gICAqXFxuICAgKiBUaGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBzdG9yZSBpbiB5b3VyIGFwcC4gVG8gc3BlY2lmeSBob3cgZGlmZmVyZW50XFxuICAgKiBwYXJ0cyBvZiB0aGUgc3RhdGUgdHJlZSByZXNwb25kIHRvIGFjdGlvbnMsIHlvdSBtYXkgY29tYmluZSBzZXZlcmFsIHJlZHVjZXJzXFxuICAgKiBpbnRvIGEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gYnkgdXNpbmcgYGNvbWJpbmVSZWR1Y2Vyc2AuXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSB0cmVlLCBnaXZlblxcbiAgICogdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGFjdGlvbiB0byBoYW5kbGUuXFxuICAgKlxcbiAgICogQHBhcmFtIHthbnl9IFtwcmVsb2FkZWRTdGF0ZV0gVGhlIGluaXRpYWwgc3RhdGUuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XFxuICAgKiB0byBoeWRyYXRlIHRoZSBzdGF0ZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYVxcbiAgICogcHJldmlvdXNseSBzZXJpYWxpemVkIHVzZXIgc2Vzc2lvbi5cXG4gICAqIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2Vyc2AgdG8gcHJvZHVjZSB0aGUgcm9vdCByZWR1Y2VyIGZ1bmN0aW9uLCB0aGlzIG11c3QgYmVcXG4gICAqIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIGBjb21iaW5lUmVkdWNlcnNgIGtleXMuXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2VuaGFuY2VyXSBUaGUgc3RvcmUgZW5oYW5jZXIuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XFxuICAgKiB0byBlbmhhbmNlIHRoZSBzdG9yZSB3aXRoIHRoaXJkLXBhcnR5IGNhcGFiaWxpdGllcyBzdWNoIGFzIG1pZGRsZXdhcmUsXFxuICAgKiB0aW1lIHRyYXZlbCwgcGVyc2lzdGVuY2UsIGV0Yy4gVGhlIG9ubHkgc3RvcmUgZW5oYW5jZXIgdGhhdCBzaGlwcyB3aXRoIFJlZHV4XFxuICAgKiBpcyBgYXBwbHlNaWRkbGV3YXJlKClgLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHtTdG9yZX0gQSBSZWR1eCBzdG9yZSB0aGF0IGxldHMgeW91IHJlYWQgdGhlIHN0YXRlLCBkaXNwYXRjaCBhY3Rpb25zXFxuICAgKiBhbmQgc3Vic2NyaWJlIHRvIGNoYW5nZXMuXFxuICAgKi9cXG59O2Z1bmN0aW9uIGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xcbiAgdmFyIF9yZWYyO1xcblxcbiAgaWYgKHR5cGVvZiBwcmVsb2FkZWRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZW5oYW5jZXIgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XFxuICAgIHByZWxvYWRlZFN0YXRlID0gdW5kZWZpbmVkO1xcbiAgfVxcblxcbiAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdGhlIGVuaGFuY2VyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XFxuICB9XFxuXFxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0aGUgcmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgfVxcblxcbiAgdmFyIGN1cnJlbnRSZWR1Y2VyID0gcmVkdWNlcjtcXG4gIHZhciBjdXJyZW50U3RhdGUgPSBwcmVsb2FkZWRTdGF0ZTtcXG4gIHZhciBjdXJyZW50TGlzdGVuZXJzID0gW107XFxuICB2YXIgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnM7XFxuICB2YXIgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xcblxcbiAgZnVuY3Rpb24gZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpIHtcXG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtcXG4gICAgICBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycy5zbGljZSgpO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKipcXG4gICAqIFJlYWRzIHRoZSBzdGF0ZSB0cmVlIG1hbmFnZWQgYnkgdGhlIHN0b3JlLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHthbnl9IFRoZSBjdXJyZW50IHN0YXRlIHRyZWUgb2YgeW91ciBhcHBsaWNhdGlvbi5cXG4gICAqL1xcbiAgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XFxuICAgIHJldHVybiBjdXJyZW50U3RhdGU7XFxuICB9XFxuXFxuICAvKipcXG4gICAqIEFkZHMgYSBjaGFuZ2UgbGlzdGVuZXIuIEl0IHdpbGwgYmUgY2FsbGVkIGFueSB0aW1lIGFuIGFjdGlvbiBpcyBkaXNwYXRjaGVkLFxcbiAgICogYW5kIHNvbWUgcGFydCBvZiB0aGUgc3RhdGUgdHJlZSBtYXkgcG90ZW50aWFsbHkgaGF2ZSBjaGFuZ2VkLiBZb3UgbWF5IHRoZW5cXG4gICAqIGNhbGwgYGdldFN0YXRlKClgIHRvIHJlYWQgdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBpbnNpZGUgdGhlIGNhbGxiYWNrLlxcbiAgICpcXG4gICAqIFlvdSBtYXkgY2FsbCBgZGlzcGF0Y2goKWAgZnJvbSBhIGNoYW5nZSBsaXN0ZW5lciwgd2l0aCB0aGUgZm9sbG93aW5nXFxuICAgKiBjYXZlYXRzOlxcbiAgICpcXG4gICAqIDEuIFRoZSBzdWJzY3JpcHRpb25zIGFyZSBzbmFwc2hvdHRlZCBqdXN0IGJlZm9yZSBldmVyeSBgZGlzcGF0Y2goKWAgY2FsbC5cXG4gICAqIElmIHlvdSBzdWJzY3JpYmUgb3IgdW5zdWJzY3JpYmUgd2hpbGUgdGhlIGxpc3RlbmVycyBhcmUgYmVpbmcgaW52b2tlZCwgdGhpc1xcbiAgICogd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBgZGlzcGF0Y2goKWAgdGhhdCBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXFxuICAgKiBIb3dldmVyLCB0aGUgbmV4dCBgZGlzcGF0Y2goKWAgY2FsbCwgd2hldGhlciBuZXN0ZWQgb3Igbm90LCB3aWxsIHVzZSBhIG1vcmVcXG4gICAqIHJlY2VudCBzbmFwc2hvdCBvZiB0aGUgc3Vic2NyaXB0aW9uIGxpc3QuXFxuICAgKlxcbiAgICogMi4gVGhlIGxpc3RlbmVyIHNob3VsZCBub3QgZXhwZWN0IHRvIHNlZSBhbGwgc3RhdGUgY2hhbmdlcywgYXMgdGhlIHN0YXRlXFxuICAgKiBtaWdodCBoYXZlIGJlZW4gdXBkYXRlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgYSBuZXN0ZWQgYGRpc3BhdGNoKClgIGJlZm9yZVxcbiAgICogdGhlIGxpc3RlbmVyIGlzIGNhbGxlZC4gSXQgaXMsIGhvd2V2ZXIsIGd1YXJhbnRlZWQgdGhhdCBhbGwgc3Vic2NyaWJlcnNcXG4gICAqIHJlZ2lzdGVyZWQgYmVmb3JlIHRoZSBgZGlzcGF0Y2goKWAgc3RhcnRlZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsYXRlc3RcXG4gICAqIHN0YXRlIGJ5IHRoZSB0aW1lIGl0IGV4aXRzLlxcbiAgICpcXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBldmVyeSBkaXNwYXRjaC5cXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0byByZW1vdmUgdGhpcyBjaGFuZ2UgbGlzdGVuZXIuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xcbiAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xcblxcbiAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XFxuICAgIG5leHRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XFxuXFxuICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcXG4gICAgICBpZiAoIWlzU3Vic2NyaWJlZCkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICAgIH1cXG5cXG4gICAgICBpc1N1YnNjcmliZWQgPSBmYWxzZTtcXG5cXG4gICAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XFxuICAgICAgdmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcXG4gICAgICBuZXh0TGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XFxuICAgIH07XFxuICB9XFxuXFxuICAvKipcXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uLiBJdCBpcyB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBhIHN0YXRlIGNoYW5nZS5cXG4gICAqXFxuICAgKiBUaGUgYHJlZHVjZXJgIGZ1bmN0aW9uLCB1c2VkIHRvIGNyZWF0ZSB0aGUgc3RvcmUsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlXFxuICAgKiBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBnaXZlbiBgYWN0aW9uYC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsXFxuICAgKiBiZSBjb25zaWRlcmVkIHRoZSAqKm5leHQqKiBzdGF0ZSBvZiB0aGUgdHJlZSwgYW5kIHRoZSBjaGFuZ2UgbGlzdGVuZXJzXFxuICAgKiB3aWxsIGJlIG5vdGlmaWVkLlxcbiAgICpcXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9ubHkgc3VwcG9ydHMgcGxhaW4gb2JqZWN0IGFjdGlvbnMuIElmIHlvdSB3YW50IHRvXFxuICAgKiBkaXNwYXRjaCBhIFByb21pc2UsIGFuIE9ic2VydmFibGUsIGEgdGh1bmssIG9yIHNvbWV0aGluZyBlbHNlLCB5b3UgbmVlZCB0b1xcbiAgICogd3JhcCB5b3VyIHN0b3JlIGNyZWF0aW5nIGZ1bmN0aW9uIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbWlkZGxld2FyZS4gRm9yXFxuICAgKiBleGFtcGxlLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgcmVkdXgtdGh1bmtgIHBhY2thZ2UuIEV2ZW4gdGhlXFxuICAgKiBtaWRkbGV3YXJlIHdpbGwgZXZlbnR1YWxseSBkaXNwYXRjaCBwbGFpbiBvYmplY3QgYWN0aW9ucyB1c2luZyB0aGlzIG1ldGhvZC5cXG4gICAqXFxuICAgKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIEEgcGxhaW4gb2JqZWN0IHJlcHJlc2VudGluZyDigJx3aGF0IGNoYW5nZWTigJ0uIEl0IGlzXFxuICAgKiBhIGdvb2QgaWRlYSB0byBrZWVwIGFjdGlvbnMgc2VyaWFsaXphYmxlIHNvIHlvdSBjYW4gcmVjb3JkIGFuZCByZXBsYXkgdXNlclxcbiAgICogc2Vzc2lvbnMsIG9yIHVzZSB0aGUgdGltZSB0cmF2ZWxsaW5nIGByZWR1eC1kZXZ0b29sc2AuIEFuIGFjdGlvbiBtdXN0IGhhdmVcXG4gICAqIGEgYHR5cGVgIHByb3BlcnR5IHdoaWNoIG1heSBub3QgYmUgYHVuZGVmaW5lZGAuIEl0IGlzIGEgZ29vZCBpZGVhIHRvIHVzZVxcbiAgICogc3RyaW5nIGNvbnN0YW50cyBmb3IgYWN0aW9uIHR5cGVzLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IEZvciBjb252ZW5pZW5jZSwgdGhlIHNhbWUgYWN0aW9uIG9iamVjdCB5b3UgZGlzcGF0Y2hlZC5cXG4gICAqXFxuICAgKiBOb3RlIHRoYXQsIGlmIHlvdSB1c2UgYSBjdXN0b20gbWlkZGxld2FyZSwgaXQgbWF5IHdyYXAgYGRpc3BhdGNoKClgIHRvXFxuICAgKiByZXR1cm4gc29tZXRoaW5nIGVsc2UgKGZvciBleGFtcGxlLCBhIFByb21pc2UgeW91IGNhbiBhd2FpdCkuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xcbiAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFjdGlvbikpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbnMgbXVzdCBiZSBwbGFpbiBvYmplY3RzLiAnICsgJ1VzZSBjdXN0b20gbWlkZGxld2FyZSBmb3IgYXN5bmMgYWN0aW9ucy4nKTtcXG4gICAgfVxcblxcbiAgICBpZiAodHlwZW9mIGFjdGlvbi50eXBlID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWN0aW9ucyBtYXkgbm90IGhhdmUgYW4gdW5kZWZpbmVkIFxcXCJ0eXBlXFxcIiBwcm9wZXJ0eS4gJyArICdIYXZlIHlvdSBtaXNzcGVsbGVkIGEgY29uc3RhbnQ/Jyk7XFxuICAgIH1cXG5cXG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXJzIG1heSBub3QgZGlzcGF0Y2ggYWN0aW9ucy4nKTtcXG4gICAgfVxcblxcbiAgICB0cnkge1xcbiAgICAgIGlzRGlzcGF0Y2hpbmcgPSB0cnVlO1xcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcXG4gICAgfSBmaW5hbGx5IHtcXG4gICAgICBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XFxuICAgIH1cXG5cXG4gICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnMgPSBuZXh0TGlzdGVuZXJzO1xcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTtcXG4gICAgICBsaXN0ZW5lcigpO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBhY3Rpb247XFxuICB9XFxuXFxuICAvKipcXG4gICAqIFJlcGxhY2VzIHRoZSByZWR1Y2VyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdG9yZSB0byBjYWxjdWxhdGUgdGhlIHN0YXRlLlxcbiAgICpcXG4gICAqIFlvdSBtaWdodCBuZWVkIHRoaXMgaWYgeW91ciBhcHAgaW1wbGVtZW50cyBjb2RlIHNwbGl0dGluZyBhbmQgeW91IHdhbnQgdG9cXG4gICAqIGxvYWQgc29tZSBvZiB0aGUgcmVkdWNlcnMgZHluYW1pY2FsbHkuIFlvdSBtaWdodCBhbHNvIG5lZWQgdGhpcyBpZiB5b3VcXG4gICAqIGltcGxlbWVudCBhIGhvdCByZWxvYWRpbmcgbWVjaGFuaXNtIGZvciBSZWR1eC5cXG4gICAqXFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0UmVkdWNlciBUaGUgcmVkdWNlciBmb3IgdGhlIHN0b3JlIHRvIHVzZSBpbnN0ZWFkLlxcbiAgICogQHJldHVybnMge3ZvaWR9XFxuICAgKi9cXG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWR1Y2VyKG5leHRSZWR1Y2VyKSB7XFxuICAgIGlmICh0eXBlb2YgbmV4dFJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRoZSBuZXh0UmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIGN1cnJlbnRSZWR1Y2VyID0gbmV4dFJlZHVjZXI7XFxuICAgIGRpc3BhdGNoKHsgdHlwZTogQWN0aW9uVHlwZXMuSU5JVCB9KTtcXG4gIH1cXG5cXG4gIC8qKlxcbiAgICogSW50ZXJvcGVyYWJpbGl0eSBwb2ludCBmb3Igb2JzZXJ2YWJsZS9yZWFjdGl2ZSBsaWJyYXJpZXMuXFxuICAgKiBAcmV0dXJucyB7b2JzZXJ2YWJsZX0gQSBtaW5pbWFsIG9ic2VydmFibGUgb2Ygc3RhdGUgY2hhbmdlcy5cXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIG9ic2VydmFibGUgcHJvcG9zYWw6XFxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXFxuICAgKi9cXG4gIGZ1bmN0aW9uIG9ic2VydmFibGUoKSB7XFxuICAgIHZhciBfcmVmO1xcblxcbiAgICB2YXIgb3V0ZXJTdWJzY3JpYmUgPSBzdWJzY3JpYmU7XFxuICAgIHJldHVybiBfcmVmID0ge1xcbiAgICAgIC8qKlxcbiAgICAgICAqIFRoZSBtaW5pbWFsIG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIG1ldGhvZC5cXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JzZXJ2ZXIgQW55IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIG9ic2VydmVyLlxcbiAgICAgICAqIFRoZSBvYnNlcnZlciBvYmplY3Qgc2hvdWxkIGhhdmUgYSBgbmV4dGAgbWV0aG9kLlxcbiAgICAgICAqIEByZXR1cm5zIHtzdWJzY3JpcHRpb259IEFuIG9iamVjdCB3aXRoIGFuIGB1bnN1YnNjcmliZWAgbWV0aG9kIHRoYXQgY2FuXFxuICAgICAgICogYmUgdXNlZCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSBmcm9tIHRoZSBzdG9yZSwgYW5kIHByZXZlbnQgZnVydGhlclxcbiAgICAgICAqIGVtaXNzaW9uIG9mIHZhbHVlcyBmcm9tIHRoZSBvYnNlcnZhYmxlLlxcbiAgICAgICAqL1xcbiAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XFxuICAgICAgICBpZiAodHlwZW9mIG9ic2VydmVyICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LicpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZnVuY3Rpb24gb2JzZXJ2ZVN0YXRlKCkge1xcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIubmV4dCkge1xcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZ2V0U3RhdGUoKSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIG9ic2VydmVTdGF0ZSgpO1xcbiAgICAgICAgdmFyIHVuc3Vic2NyaWJlID0gb3V0ZXJTdWJzY3JpYmUob2JzZXJ2ZVN0YXRlKTtcXG4gICAgICAgIHJldHVybiB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZSB9O1xcbiAgICAgIH1cXG4gICAgfSwgX3JlZltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11dID0gZnVuY3Rpb24gKCkge1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LCBfcmVmO1xcbiAgfVxcblxcbiAgLy8gV2hlbiBhIHN0b3JlIGlzIGNyZWF0ZWQsIGFuIFxcXCJJTklUXFxcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCBzbyB0aGF0IGV2ZXJ5XFxuICAvLyByZWR1Y2VyIHJldHVybnMgdGhlaXIgaW5pdGlhbCBzdGF0ZS4gVGhpcyBlZmZlY3RpdmVseSBwb3B1bGF0ZXNcXG4gIC8vIHRoZSBpbml0aWFsIHN0YXRlIHRyZWUuXFxuICBkaXNwYXRjaCh7IHR5cGU6IEFjdGlvblR5cGVzLklOSVQgfSk7XFxuXFxuICByZXR1cm4gX3JlZjIgPSB7XFxuICAgIGRpc3BhdGNoOiBkaXNwYXRjaCxcXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmUsXFxuICAgIGdldFN0YXRlOiBnZXRTdGF0ZSxcXG4gICAgcmVwbGFjZVJlZHVjZXI6IHJlcGxhY2VSZWR1Y2VyXFxuICB9LCBfcmVmMltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11dID0gb2JzZXJ2YWJsZSwgX3JlZjI7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDc0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3YXJuaW5nO1xcbi8qKlxcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxcbiAqXFxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZS5cXG4gKiBAcmV0dXJucyB7dm9pZH1cXG4gKi9cXG5mdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHtcXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cXG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcXG4gIH1cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xcbiAgdHJ5IHtcXG4gICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBpZiB5b3UgZW5hYmxlXFxuICAgIC8vIFxcXCJicmVhayBvbiBhbGwgZXhjZXB0aW9uc1xcXCIgaW4geW91ciBjb25zb2xlLFxcbiAgICAvLyBpdCB3b3VsZCBwYXVzZSB0aGUgZXhlY3V0aW9uIGF0IHRoaXMgbGluZS5cXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eSAqL1xcbiAgfSBjYXRjaCAoZSkge31cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tZW1wdHkgKi9cXG59XFxuXFxuLyoqKi8gfSksXFxuLyogNzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IGNvbXBvc2U7XFxuLyoqXFxuICogQ29tcG9zZXMgc2luZ2xlLWFyZ3VtZW50IGZ1bmN0aW9ucyBmcm9tIHJpZ2h0IHRvIGxlZnQuIFRoZSByaWdodG1vc3RcXG4gKiBmdW5jdGlvbiBjYW4gdGFrZSBtdWx0aXBsZSBhcmd1bWVudHMgYXMgaXQgcHJvdmlkZXMgdGhlIHNpZ25hdHVyZSBmb3JcXG4gKiB0aGUgcmVzdWx0aW5nIGNvbXBvc2l0ZSBmdW5jdGlvbi5cXG4gKlxcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IGZ1bmNzIFRoZSBmdW5jdGlvbnMgdG8gY29tcG9zZS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gb2J0YWluZWQgYnkgY29tcG9zaW5nIHRoZSBhcmd1bWVudCBmdW5jdGlvbnNcXG4gKiBmcm9tIHJpZ2h0IHRvIGxlZnQuIEZvciBleGFtcGxlLCBjb21wb3NlKGYsIGcsIGgpIGlzIGlkZW50aWNhbCB0byBkb2luZ1xcbiAqICguLi5hcmdzKSA9PiBmKGcoaCguLi5hcmdzKSkpLlxcbiAqL1xcblxcbmZ1bmN0aW9uIGNvbXBvc2UoKSB7XFxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgZnVuY3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XFxuICB9XFxuXFxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAwKSB7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XFxuICAgICAgcmV0dXJuIGFyZztcXG4gICAgfTtcXG4gIH1cXG5cXG4gIGlmIChmdW5jcy5sZW5ndGggPT09IDEpIHtcXG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICAgIHJldHVybiBhKGIuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpKTtcXG4gICAgfTtcXG4gIH0pO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50O1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBnZXREZXBlbmRzT25Pd25Qcm9wcyAqL1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImJcXFwiXSA9IHdyYXBNYXBUb1Byb3BzRnVuYztcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc192ZXJpZnlQbGFpbk9iamVjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nyk7XFxuXFxuXFxuZnVuY3Rpb24gd3JhcE1hcFRvUHJvcHNDb25zdGFudChnZXRDb25zdGFudCkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRDb25zdGFudFNlbGVjdG9yKGRpc3BhdGNoLCBvcHRpb25zKSB7XFxuICAgIHZhciBjb25zdGFudCA9IGdldENvbnN0YW50KGRpc3BhdGNoLCBvcHRpb25zKTtcXG5cXG4gICAgZnVuY3Rpb24gY29uc3RhbnRTZWxlY3RvcigpIHtcXG4gICAgICByZXR1cm4gY29uc3RhbnQ7XFxuICAgIH1cXG4gICAgY29uc3RhbnRTZWxlY3Rvci5kZXBlbmRzT25Pd25Qcm9wcyA9IGZhbHNlO1xcbiAgICByZXR1cm4gY29uc3RhbnRTZWxlY3RvcjtcXG4gIH07XFxufVxcblxcbi8vIGRlcGVuZHNPbk93blByb3BzIGlzIHVzZWQgYnkgY3JlYXRlTWFwVG9Qcm9wc1Byb3h5IHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHBhc3MgcHJvcHMgYXMgYXJnc1xcbi8vIHRvIHRoZSBtYXBUb1Byb3BzIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZWQuIEl0IGlzIGFsc28gdXNlZCBieSBtYWtlUHVyZVByb3BzU2VsZWN0b3IgdG8gZGV0ZXJtaW5lXFxuLy8gd2hldGhlciBtYXBUb1Byb3BzIG5lZWRzIHRvIGJlIGludm9rZWQgd2hlbiBwcm9wcyBoYXZlIGNoYW5nZWQuXFxuLy8gXFxuLy8gQSBsZW5ndGggb2Ygb25lIHNpZ25hbHMgdGhhdCBtYXBUb1Byb3BzIGRvZXMgbm90IGRlcGVuZCBvbiBwcm9wcyBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50Llxcbi8vIEEgbGVuZ3RoIG9mIHplcm8gaXMgYXNzdW1lZCB0byBtZWFuIG1hcFRvUHJvcHMgaXMgZ2V0dGluZyBhcmdzIHZpYSBhcmd1bWVudHMgb3IgLi4uYXJncyBhbmRcXG4vLyB0aGVyZWZvcmUgbm90IHJlcG9ydGluZyBpdHMgbGVuZ3RoIGFjY3VyYXRlbHkuLlxcbmZ1bmN0aW9uIGdldERlcGVuZHNPbk93blByb3BzKG1hcFRvUHJvcHMpIHtcXG4gIHJldHVybiBtYXBUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzICE9PSBudWxsICYmIG1hcFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMgIT09IHVuZGVmaW5lZCA/IEJvb2xlYW4obWFwVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgOiBtYXBUb1Byb3BzLmxlbmd0aCAhPT0gMTtcXG59XFxuXFxuLy8gVXNlZCBieSB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiBhbmQgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzRnVuY3Rpb24sXFxuLy8gdGhpcyBmdW5jdGlvbiB3cmFwcyBtYXBUb1Byb3BzIGluIGEgcHJveHkgZnVuY3Rpb24gd2hpY2ggZG9lcyBzZXZlcmFsIHRoaW5nczpcXG4vLyBcXG4vLyAgKiBEZXRlY3RzIHdoZXRoZXIgdGhlIG1hcFRvUHJvcHMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGRlcGVuZHMgb24gcHJvcHMsIHdoaWNoXFxuLy8gICAgaXMgdXNlZCBieSBzZWxlY3RvckZhY3RvcnkgdG8gZGVjaWRlIGlmIGl0IHNob3VsZCByZWludm9rZSBvbiBwcm9wcyBjaGFuZ2VzLlxcbi8vICAgIFxcbi8vICAqIE9uIGZpcnN0IGNhbGwsIGhhbmRsZXMgbWFwVG9Qcm9wcyBpZiByZXR1cm5zIGFub3RoZXIgZnVuY3Rpb24sIGFuZCB0cmVhdHMgdGhhdFxcbi8vICAgIG5ldyBmdW5jdGlvbiBhcyB0aGUgdHJ1ZSBtYXBUb1Byb3BzIGZvciBzdWJzZXF1ZW50IGNhbGxzLlxcbi8vICAgIFxcbi8vICAqIE9uIGZpcnN0IGNhbGwsIHZlcmlmaWVzIHRoZSBmaXJzdCByZXN1bHQgaXMgYSBwbGFpbiBvYmplY3QsIGluIG9yZGVyIHRvIHdhcm5cXG4vLyAgICB0aGUgZGV2ZWxvcGVyIHRoYXQgdGhlaXIgbWFwVG9Qcm9wcyBmdW5jdGlvbiBpcyBub3QgcmV0dXJuaW5nIGEgdmFsaWQgcmVzdWx0Llxcbi8vICAgIFxcbmZ1bmN0aW9uIHdyYXBNYXBUb1Byb3BzRnVuYyhtYXBUb1Byb3BzLCBtZXRob2ROYW1lKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gaW5pdFByb3h5U2VsZWN0b3IoZGlzcGF0Y2gsIF9yZWYpIHtcXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gX3JlZi5kaXNwbGF5TmFtZTtcXG5cXG4gICAgdmFyIHByb3h5ID0gZnVuY3Rpb24gbWFwVG9Qcm9wc1Byb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcXG4gICAgICByZXR1cm4gcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPyBwcm94eS5tYXBUb1Byb3BzKHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIDogcHJveHkubWFwVG9Qcm9wcyhzdGF0ZU9yRGlzcGF0Y2gpO1xcbiAgICB9O1xcblxcbiAgICAvLyBhbGxvdyBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5IHRvIGdldCBvd25Qcm9wc1xcbiAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IHRydWU7XFxuXFxuICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBmdW5jdGlvbiBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcXG4gICAgICBwcm94eS5tYXBUb1Byb3BzID0gbWFwVG9Qcm9wcztcXG4gICAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IGdldERlcGVuZHNPbk93blByb3BzKG1hcFRvUHJvcHMpO1xcbiAgICAgIHZhciBwcm9wcyA9IHByb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpO1xcblxcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBwcm9wcztcXG4gICAgICAgIHByb3h5LmRlcGVuZHNPbk93blByb3BzID0gZ2V0RGVwZW5kc09uT3duUHJvcHMocHJvcHMpO1xcbiAgICAgICAgcHJvcHMgPSBwcm94eShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKTtcXG4gICAgICB9XFxuXFxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwcm9wcywgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpO1xcblxcbiAgICAgIHJldHVybiBwcm9wcztcXG4gICAgfTtcXG5cXG4gICAgcmV0dXJuIHByb3h5O1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDc3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB2ZXJpZnlQbGFpbk9iamVjdDtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5cXG5cXG5cXG5mdW5jdGlvbiB2ZXJpZnlQbGFpbk9iamVjdCh2YWx1ZSwgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1ldGhvZE5hbWUgKyAnKCkgaW4gJyArIGRpc3BsYXlOYW1lICsgJyBtdXN0IHJldHVybiBhIHBsYWluIG9iamVjdC4gSW5zdGVhZCByZWNlaXZlZCAnICsgdmFsdWUgKyAnLicpO1xcbiAgfVxcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheUluc2VydFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlJbnNlcnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5TW92ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlNb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVBvcFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlQb3A7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UHVzaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlQdXNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UmVtb3ZlQWxsXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVJlbW92ZUFsbDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlTaGlmdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTcGxpY2VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U3BsaWNlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVN3YXBcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U3dhcDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlVbnNoaWZ0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVVuc2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImF1dG9maWxsXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhdXRvZmlsbDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYmx1clxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYmx1cjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2hhbmdlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjaGFuZ2U7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNsZWFyU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbGVhclN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2xlYXJTdWJtaXRFcnJvcnNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsZWFyU3VibWl0RXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJjbGVhckFzeW5jRXJyb3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsZWFyQXN5bmNFcnJvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZGVzdHJveVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGVzdHJveTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZm9jdXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvY3VzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpbml0aWFsaXplXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbml0aWFsaXplOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZXNldFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzZXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0YXJ0QXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGFydEFzeW5jVmFsaWRhdGlvbjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0U3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wQXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wQXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wU3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic2V0U3VibWl0RmFpbGVkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzZXRTdWJtaXRGYWlsZWQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdFN1Y2NlZWRlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0U3VjY2VlZGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ0b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdG91Y2g7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInVucmVnaXN0ZXJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW5yZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnRvdWNoXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1bnRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1cGRhdGVTeW5jRXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1cGRhdGVTeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1cGRhdGVTeW5jV2FybmluZ3NcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVwZGF0ZVN5bmNXYXJuaW5nczsgfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuXFxuXFxudmFyIGFycmF5SW5zZXJ0ID0gZnVuY3Rpb24gYXJyYXlJbnNlcnQoZm9ybSwgZmllbGQsIGluZGV4LCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9JTlNFUlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQsIGluZGV4OiBpbmRleCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGFycmF5TW92ZSA9IGZ1bmN0aW9uIGFycmF5TW92ZShmb3JtLCBmaWVsZCwgZnJvbSwgdG8pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfTU9WRVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgZnJvbTogZnJvbSwgdG86IHRvIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVBvcCA9IGZ1bmN0aW9uIGFycmF5UG9wKGZvcm0sIGZpZWxkKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1BPUFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlQdXNoID0gZnVuY3Rpb24gYXJyYXlQdXNoKGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QVVNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgYXJyYXlSZW1vdmUgPSBmdW5jdGlvbiBhcnJheVJlbW92ZShmb3JtLCBmaWVsZCwgaW5kZXgpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUkVNT1ZFXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCBpbmRleDogaW5kZXggfSB9O1xcbn07XFxuXFxudmFyIGFycmF5UmVtb3ZlQWxsID0gZnVuY3Rpb24gYXJyYXlSZW1vdmVBbGwoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUkVNT1ZFX0FMTFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlTaGlmdCA9IGZ1bmN0aW9uIGFycmF5U2hpZnQoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU0hJRlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGFycmF5U3BsaWNlID0gZnVuY3Rpb24gYXJyYXlTcGxpY2UoZm9ybSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NQTElDRVxcXCJdLFxcbiAgICBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXg6IGluZGV4LCByZW1vdmVOdW06IHJlbW92ZU51bSB9XFxuICB9O1xcbiAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcXG4gICAgYWN0aW9uLnBheWxvYWQgPSB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgYXJyYXlTd2FwID0gZnVuY3Rpb24gYXJyYXlTd2FwKGZvcm0sIGZpZWxkLCBpbmRleEEsIGluZGV4Qikge1xcbiAgaWYgKGluZGV4QSA9PT0gaW5kZXhCKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignU3dhcCBpbmRpY2VzIGNhbm5vdCBiZSBlcXVhbCcpO1xcbiAgfVxcbiAgaWYgKGluZGV4QSA8IDAgfHwgaW5kZXhCIDwgMCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N3YXAgaW5kaWNlcyBjYW5ub3QgYmUgbmVnYXRpdmUnKTtcXG4gIH1cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU1dBUFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXhBOiBpbmRleEEsIGluZGV4QjogaW5kZXhCIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVVuc2hpZnQgPSBmdW5jdGlvbiBhcnJheVVuc2hpZnQoZm9ybSwgZmllbGQsIHZhbHVlKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1VOU0hJRlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBhdXRvZmlsbCA9IGZ1bmN0aW9uIGF1dG9maWxsKGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBVVRPRklMTFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGJsdXIgPSBmdW5jdGlvbiBibHVyKGZvcm0sIGZpZWxkLCB2YWx1ZSwgdG91Y2gpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQkxVUlxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgdG91Y2g6IHRvdWNoIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgY2hhbmdlID0gZnVuY3Rpb24gY2hhbmdlKGZvcm0sIGZpZWxkLCB2YWx1ZSwgdG91Y2gsIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0hBTkdFXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCB0b3VjaDogdG91Y2gsIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBjbGVhclN1Ym1pdCA9IGZ1bmN0aW9uIGNsZWFyU3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgY2xlYXJTdWJtaXRFcnJvcnMgPSBmdW5jdGlvbiBjbGVhclN1Ym1pdEVycm9ycyhmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0gfTtcXG59O1xcblxcbnZhciBjbGVhckFzeW5jRXJyb3IgPSBmdW5jdGlvbiBjbGVhckFzeW5jRXJyb3IoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfQVNZTkNfRVJST1JcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZvcm0gPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgZm9ybVtfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiREVTVFJPWVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSB9O1xcbn07XFxuXFxudmFyIGZvY3VzID0gZnVuY3Rpb24gZm9jdXMoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiRk9DVVNcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGluaXRpYWxpemUgPSBmdW5jdGlvbiBpbml0aWFsaXplKGZvcm0sIHZhbHVlcywga2VlcERpcnR5KSB7XFxuICB2YXIgb3RoZXJNZXRhID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7fTtcXG5cXG4gIGlmIChrZWVwRGlydHkgaW5zdGFuY2VvZiBPYmplY3QpIHtcXG4gICAgb3RoZXJNZXRhID0ga2VlcERpcnR5O1xcbiAgICBrZWVwRGlydHkgPSBmYWxzZTtcXG4gIH1cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiSU5JVElBTElaRVxcXCJdLCBtZXRhOiBfZXh0ZW5kcyh7IGZvcm06IGZvcm0sIGtlZXBEaXJ0eToga2VlcERpcnR5IH0sIG90aGVyTWV0YSksIHBheWxvYWQ6IHZhbHVlcyB9O1xcbn07XFxuXFxudmFyIHJlZ2lzdGVyRmllbGQgPSBmdW5jdGlvbiByZWdpc3RlckZpZWxkKGZvcm0sIG5hbWUsIHR5cGUpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVHSVNURVJfRklFTERcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0sIHBheWxvYWQ6IHsgbmFtZTogbmFtZSwgdHlwZTogdHlwZSB9IH07XFxufTtcXG5cXG52YXIgcmVzZXQgPSBmdW5jdGlvbiByZXNldChmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlJFU0VUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBmdW5jdGlvbiBzdGFydEFzeW5jVmFsaWRhdGlvbihmb3JtLCBmaWVsZCkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVEFSVF9BU1lOQ19WQUxJREFUSU9OXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0gfTtcXG59O1xcblxcbnZhciBzdGFydFN1Ym1pdCA9IGZ1bmN0aW9uIHN0YXJ0U3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RBUlRfU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc3RvcEFzeW5jVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIHN0b3BBc3luY1ZhbGlkYXRpb24oZm9ybSwgZXJyb3JzKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfQVNZTkNfVkFMSURBVElPTlxcXCJdLFxcbiAgICBtZXRhOiB7IGZvcm06IGZvcm0gfSxcXG4gICAgcGF5bG9hZDogZXJyb3JzXFxuICB9O1xcbiAgaWYgKGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCkge1xcbiAgICBhY3Rpb24uZXJyb3IgPSB0cnVlO1xcbiAgfVxcbiAgcmV0dXJuIGFjdGlvbjtcXG59O1xcblxcbnZhciBzdG9wU3VibWl0ID0gZnVuY3Rpb24gc3RvcFN1Ym1pdChmb3JtLCBlcnJvcnMpIHtcXG4gIHZhciBhY3Rpb24gPSB7XFxuICAgIHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RPUF9TVUJNSVRcXFwiXSxcXG4gICAgbWV0YTogeyBmb3JtOiBmb3JtIH0sXFxuICAgIHBheWxvYWQ6IGVycm9yc1xcbiAgfTtcXG4gIGlmIChlcnJvcnMgJiYgT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgYWN0aW9uLmVycm9yID0gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgc3VibWl0ID0gZnVuY3Rpb24gc3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc2V0U3VibWl0RmFpbGVkID0gZnVuY3Rpb24gc2V0U3VibWl0RmFpbGVkKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xcbiAgICBmaWVsZHNbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNFVF9TVUJNSVRfRkFJTEVEXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSwgZXJyb3I6IHRydWUgfTtcXG59O1xcblxcbnZhciBzZXRTdWJtaXRTdWNjZWVkZWQgPSBmdW5jdGlvbiBzZXRTdWJtaXRTdWNjZWVkZWQoZm9ybSkge1xcbiAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBmaWVsZHMgPSBBcnJheShfbGVuMyA+IDEgPyBfbGVuMyAtIDEgOiAwKSwgX2tleTMgPSAxOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XFxuICAgIGZpZWxkc1tfa2V5MyAtIDFdID0gYXJndW1lbnRzW19rZXkzXTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZHM6IGZpZWxkcyB9LCBlcnJvcjogZmFsc2UgfTtcXG59O1xcblxcbnZhciB0b3VjaCA9IGZ1bmN0aW9uIHRvdWNoKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjQgPiAxID8gX2xlbjQgLSAxIDogMCksIF9rZXk0ID0gMTsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xcbiAgICBmaWVsZHNbX2tleTQgLSAxXSA9IGFyZ3VtZW50c1tfa2V5NF07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlRPVUNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSB9O1xcbn07XFxuXFxudmFyIHVucmVnaXN0ZXJGaWVsZCA9IGZ1bmN0aW9uIHVucmVnaXN0ZXJGaWVsZChmb3JtLCBuYW1lKSB7XFxuICB2YXIgZGVzdHJveU9uVW5tb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVU5SRUdJU1RFUl9GSUVMRFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSwgcGF5bG9hZDogeyBuYW1lOiBuYW1lLCBkZXN0cm95T25Vbm1vdW50OiBkZXN0cm95T25Vbm1vdW50IH0gfTtcXG59O1xcblxcbnZhciB1bnRvdWNoID0gZnVuY3Rpb24gdW50b3VjaChmb3JtKSB7XFxuICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGZpZWxkcyA9IEFycmF5KF9sZW41ID4gMSA/IF9sZW41IC0gMSA6IDApLCBfa2V5NSA9IDE7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcXG4gICAgZmllbGRzW19rZXk1IC0gMV0gPSBhcmd1bWVudHNbX2tleTVdO1xcbiAgfVxcblxcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlRPVUNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSB9O1xcbn07XFxuXFxudmFyIHVwZGF0ZVN5bmNFcnJvcnMgPSBmdW5jdGlvbiB1cGRhdGVTeW5jRXJyb3JzKGZvcm0pIHtcXG4gIHZhciBzeW5jRXJyb3JzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcXG4gIHZhciBlcnJvciA9IGFyZ3VtZW50c1syXTtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVVBEQVRFX1NZTkNfRVJST1JTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IHN5bmNFcnJvcnM6IHN5bmNFcnJvcnMsIGVycm9yOiBlcnJvciB9IH07XFxufTtcXG5cXG52YXIgdXBkYXRlU3luY1dhcm5pbmdzID0gZnVuY3Rpb24gdXBkYXRlU3luY1dhcm5pbmdzKGZvcm0pIHtcXG4gIHZhciBzeW5jV2FybmluZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcbiAgdmFyIHdhcm5pbmcgPSBhcmd1bWVudHNbMl07XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX1dBUk5JTkdTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IHN5bmNXYXJuaW5nczogc3luY1dhcm5pbmdzLCB3YXJuaW5nOiB3YXJuaW5nIH0gfTtcXG59O1xcblxcbi8qKiovIH0pLFxcbi8qIDc5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2VzNl9lcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTQpO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxudmFyIFN1Ym1pc3Npb25FcnJvciA9IGZ1bmN0aW9uIChfRXh0ZW5kYWJsZUVycm9yKSB7XFxuICBfaW5oZXJpdHMoU3VibWlzc2lvbkVycm9yLCBfRXh0ZW5kYWJsZUVycm9yKTtcXG5cXG4gIGZ1bmN0aW9uIFN1Ym1pc3Npb25FcnJvcihlcnJvcnMpIHtcXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN1Ym1pc3Npb25FcnJvcik7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChTdWJtaXNzaW9uRXJyb3IuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihTdWJtaXNzaW9uRXJyb3IpKS5jYWxsKHRoaXMsICdTdWJtaXQgVmFsaWRhdGlvbiBGYWlsZWQnKSk7XFxuXFxuICAgIF90aGlzLmVycm9ycyA9IGVycm9ycztcXG4gICAgcmV0dXJuIF90aGlzO1xcbiAgfVxcblxcbiAgcmV0dXJuIFN1Ym1pc3Npb25FcnJvcjtcXG59KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9lczZfZXJyb3JfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFN1Ym1pc3Npb25FcnJvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogODAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODEpO1xcblxcblxcbnZhciBzaWxlbmNlRXZlbnQgPSBmdW5jdGlvbiBzaWxlbmNlRXZlbnQoZXZlbnQpIHtcXG4gIHZhciBpcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50KTtcXG4gIGlmIChpcykge1xcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xcbiAgfVxcbiAgcmV0dXJuIGlzO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2lsZW5jZUV2ZW50KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGlzRXZlbnQgPSBmdW5jdGlvbiBpc0V2ZW50KGNhbmRpZGF0ZSkge1xcbiAgcmV0dXJuICEhKGNhbmRpZGF0ZSAmJiBjYW5kaWRhdGUuc3RvcFByb3BhZ2F0aW9uICYmIGNhbmRpZGF0ZS5wcmV2ZW50RGVmYXVsdCk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0V2ZW50KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcblxcblxcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNFcXVhbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcXG4gKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgY29tcGFyaXNvbnNcXG4gKiBhcmUgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoIHVwIHRvXFxuICogc2l4IGFyZ3VtZW50czogKG9ialZhbHVlLCBvdGhWYWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrXSkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XFxuICogICByZXR1cm4gL15oKD86aXxlbGxvKSQvLnRlc3QodmFsdWUpO1xcbiAqIH1cXG4gKlxcbiAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlKSB7XFxuICogICBpZiAoaXNHcmVldGluZyhvYmpWYWx1ZSkgJiYgaXNHcmVldGluZyhvdGhWYWx1ZSkpIHtcXG4gKiAgICAgcmV0dXJuIHRydWU7XFxuICogICB9XFxuICogfVxcbiAqXFxuICogdmFyIGFycmF5ID0gWydoZWxsbycsICdnb29kYnllJ107XFxuICogdmFyIG90aGVyID0gWydoaScsICdnb29kYnllJ107XFxuICpcXG4gKiBfLmlzRXF1YWxXaXRoKGFycmF5LCBvdGhlciwgY3VzdG9taXplcik7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlzRXF1YWxXaXRoKHZhbHVlLCBvdGhlciwgY3VzdG9taXplcikge1xcbiAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xcbiAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBvdGhlcikgOiB1bmRlZmluZWQ7XFxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG90aGVyLCB1bmRlZmluZWQsIGN1c3RvbWl6ZXIpIDogISFyZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzRXF1YWxXaXRoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxudmFyIHByb2Nlc3NQcm9wcyA9IGZ1bmN0aW9uIHByb2Nlc3NQcm9wcyh0eXBlLCBwcm9wcywgX3ZhbHVlKSB7XFxuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcXG5cXG4gIGlmICh0eXBlID09PSAnY2hlY2tib3gnKSB7XFxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcXG4gICAgICBjaGVja2VkOiAhIXZhbHVlXFxuICAgIH0pO1xcbiAgfVxcbiAgaWYgKHR5cGUgPT09ICdyYWRpbycpIHtcXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBwcm9wcywge1xcbiAgICAgIGNoZWNrZWQ6IHZhbHVlID09PSBfdmFsdWUsXFxuICAgICAgdmFsdWU6IF92YWx1ZVxcbiAgICB9KTtcXG4gIH1cXG4gIGlmICh0eXBlID09PSAnc2VsZWN0LW11bHRpcGxlJykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgdmFsdWU6IHZhbHVlIHx8IFtdXFxuICAgIH0pO1xcbiAgfVxcbiAgaWYgKHR5cGUgPT09ICdmaWxlJykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgdmFsdWU6IHZhbHVlIHx8IHVuZGVmaW5lZFxcbiAgICB9KTtcXG4gIH1cXG4gIHJldHVybiBwcm9wcztcXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZFByb3BzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRQcm9wcyhfcmVmMiwgbmFtZSwgX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZjIuZ2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYyLnRvSlM7XFxuXFxuICB2YXIgYXN5bmNFcnJvciA9IF9yZWYuYXN5bmNFcnJvcixcXG4gICAgICBhc3luY1ZhbGlkYXRpbmcgPSBfcmVmLmFzeW5jVmFsaWRhdGluZyxcXG4gICAgICBvbkJsdXIgPSBfcmVmLm9uQmx1cixcXG4gICAgICBvbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXFxuICAgICAgb25Ecm9wID0gX3JlZi5vbkRyb3AsXFxuICAgICAgb25EcmFnU3RhcnQgPSBfcmVmLm9uRHJhZ1N0YXJ0LFxcbiAgICAgIGRpcnR5ID0gX3JlZi5kaXJ0eSxcXG4gICAgICBkaXNwYXRjaCA9IF9yZWYuZGlzcGF0Y2gsXFxuICAgICAgb25Gb2N1cyA9IF9yZWYub25Gb2N1cyxcXG4gICAgICBmb3JtID0gX3JlZi5mb3JtLFxcbiAgICAgIGZvcm1hdCA9IF9yZWYuZm9ybWF0LFxcbiAgICAgIHBhcnNlID0gX3JlZi5wYXJzZSxcXG4gICAgICBwcmlzdGluZSA9IF9yZWYucHJpc3RpbmUsXFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcXG4gICAgICBzdWJtaXRFcnJvciA9IF9yZWYuc3VibWl0RXJyb3IsXFxuICAgICAgc3VibWl0RmFpbGVkID0gX3JlZi5zdWJtaXRGYWlsZWQsXFxuICAgICAgc3VibWl0dGluZyA9IF9yZWYuc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3IgPSBfcmVmLnN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZyA9IF9yZWYuc3luY1dhcm5pbmcsXFxuICAgICAgdmFsaWRhdGUgPSBfcmVmLnZhbGlkYXRlLFxcbiAgICAgIHZhbHVlID0gX3JlZi52YWx1ZSxcXG4gICAgICBfdmFsdWUgPSBfcmVmLl92YWx1ZSxcXG4gICAgICB3YXJuID0gX3JlZi53YXJuLFxcbiAgICAgIGN1c3RvbSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2FzeW5jRXJyb3InLCAnYXN5bmNWYWxpZGF0aW5nJywgJ29uQmx1cicsICdvbkNoYW5nZScsICdvbkRyb3AnLCAnb25EcmFnU3RhcnQnLCAnZGlydHknLCAnZGlzcGF0Y2gnLCAnb25Gb2N1cycsICdmb3JtJywgJ2Zvcm1hdCcsICdwYXJzZScsICdwcmlzdGluZScsICdwcm9wcycsICdzdGF0ZScsICdzdWJtaXRFcnJvcicsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0dGluZycsICdzeW5jRXJyb3InLCAnc3luY1dhcm5pbmcnLCAndmFsaWRhdGUnLCAndmFsdWUnLCAnX3ZhbHVlJywgJ3dhcm4nXSk7XFxuXFxuICB2YXIgZXJyb3IgPSBzeW5jRXJyb3IgfHwgYXN5bmNFcnJvciB8fCBzdWJtaXRFcnJvcjtcXG4gIHZhciB3YXJuaW5nID0gc3luY1dhcm5pbmc7XFxuXFxuICB2YXIgZm9ybWF0RmllbGRWYWx1ZSA9IGZ1bmN0aW9uIGZvcm1hdEZpZWxkVmFsdWUodmFsdWUsIGZvcm1hdCkge1xcbiAgICBpZiAoZm9ybWF0ID09PSBudWxsKSB7XFxuICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICB9XFxuICAgIHZhciBkZWZhdWx0Rm9ybWF0dGVkVmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcXG4gICAgcmV0dXJuIGZvcm1hdCA/IGZvcm1hdCh2YWx1ZSwgbmFtZSkgOiBkZWZhdWx0Rm9ybWF0dGVkVmFsdWU7XFxuICB9O1xcblxcbiAgdmFyIGZvcm1hdHRlZEZpZWxkVmFsdWUgPSBmb3JtYXRGaWVsZFZhbHVlKHZhbHVlLCBmb3JtYXQpO1xcblxcbiAgcmV0dXJuIHtcXG4gICAgaW5wdXQ6IHByb2Nlc3NQcm9wcyhjdXN0b20udHlwZSwge1xcbiAgICAgIG5hbWU6IG5hbWUsXFxuICAgICAgb25CbHVyOiBvbkJsdXIsXFxuICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxcbiAgICAgIG9uRHJhZ1N0YXJ0OiBvbkRyYWdTdGFydCxcXG4gICAgICBvbkRyb3A6IG9uRHJvcCxcXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzLFxcbiAgICAgIHZhbHVlOiBmb3JtYXR0ZWRGaWVsZFZhbHVlXFxuICAgIH0sIF92YWx1ZSksXFxuICAgIG1ldGE6IF9leHRlbmRzKHt9LCB0b0pTKHN0YXRlKSwge1xcbiAgICAgIGFjdGl2ZTogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICdhY3RpdmUnKSksXFxuICAgICAgYXN5bmNWYWxpZGF0aW5nOiBhc3luY1ZhbGlkYXRpbmcsXFxuICAgICAgYXV0b2ZpbGxlZDogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICdhdXRvZmlsbGVkJykpLFxcbiAgICAgIGRpcnR5OiBkaXJ0eSxcXG4gICAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXFxuICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgIGZvcm06IGZvcm0sXFxuICAgICAgd2FybmluZzogd2FybmluZyxcXG4gICAgICBpbnZhbGlkOiAhIWVycm9yLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdWJtaXR0aW5nOiAhIXN1Ym1pdHRpbmcsXFxuICAgICAgc3VibWl0RmFpbGVkOiAhIXN1Ym1pdEZhaWxlZCxcXG4gICAgICB0b3VjaGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3RvdWNoZWQnKSksXFxuICAgICAgdmFsaWQ6ICFlcnJvcixcXG4gICAgICB2aXNpdGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3Zpc2l0ZWQnKSlcXG4gICAgfSksXFxuICAgIGN1c3RvbTogX2V4dGVuZHMoe30sIGN1c3RvbSwgcHJvcHMpXFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRQcm9wcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogODQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldFZhbHVlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNSZWFjdE5hdGl2ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzApO1xcblxcblxcblxcbnZhciBvbkNoYW5nZVZhbHVlID0gZnVuY3Rpb24gb25DaGFuZ2VWYWx1ZShldmVudCwgX3JlZikge1xcbiAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxcbiAgICAgIG5vcm1hbGl6ZSA9IF9yZWYubm9ybWFsaXplO1xcblxcbiAgLy8gcmVhZCB2YWx1ZSBmcm9tIGlucHV0XFxuICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNSZWFjdE5hdGl2ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuICAvLyBwYXJzZSB2YWx1ZSBpZiB3ZSBoYXZlIGEgcGFyc2VyXFxuICBpZiAocGFyc2UpIHtcXG4gICAgdmFsdWUgPSBwYXJzZSh2YWx1ZSwgbmFtZSk7XFxuICB9XFxuXFxuICAvLyBub3JtYWxpemUgdmFsdWVcXG4gIGlmIChub3JtYWxpemUpIHtcXG4gICAgdmFsdWUgPSBub3JtYWxpemUobmFtZSwgdmFsdWUpO1xcbiAgfVxcblxcbiAgcmV0dXJuIHZhbHVlO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob25DaGFuZ2VWYWx1ZSk7XFxuXFxuLyoqKi8gfSksXFxuLyogODUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVJc1ByaXN0aW5lID0gZnVuY3Rpb24gY3JlYXRlSXNQcmlzdGluZShfcmVmKSB7XFxuICB2YXIgZGVlcEVxdWFsID0gX3JlZi5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBfcmVmLmVtcHR5LFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgICB2YXIgaW5pdGlhbCA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuaW5pdGlhbCcpIHx8IGVtcHR5O1xcbiAgICAgIHZhciB2YWx1ZXMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnZhbHVlcycpIHx8IGluaXRpYWw7XFxuICAgICAgcmV0dXJuIGRlZXBFcXVhbChpbml0aWFsLCB2YWx1ZXMpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzUHJpc3RpbmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDg2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuICBJbiB0aGVcXG4vLyBicm93c2VyIHRoaXMgaXMgYSBsaXR0bGUgY29tcGxpY2F0ZWQgZHVlIHRvIHVua25vd24gcXVhbGl0eSBvZiBNYXRoLnJhbmRvbSgpXFxuLy8gYW5kIGluY29uc2lzdGVudCBzdXBwb3J0IGZvciB0aGUgYGNyeXB0b2AgQVBJLiAgV2UgZG8gdGhlIGJlc3Qgd2UgY2FuIHZpYVxcbi8vIGZlYXR1cmUtZGV0ZWN0aW9uXFxuXFxuLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFxcXCJ0aGlzXFxcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cXG52YXIgZ2V0UmFuZG9tVmFsdWVzID0gKHR5cGVvZihjcnlwdG8pICE9ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pKSB8fFxcbiAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mKG1zQ3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0bykpO1xcbmlmIChnZXRSYW5kb21WYWx1ZXMpIHtcXG4gIC8vIFdIQVRXRyBjcnlwdG8gUk5HIC0gaHR0cDovL3dpa2kud2hhdHdnLm9yZy93aWtpL0NyeXB0b1xcbiAgdmFyIHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXFxuXFxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdoYXR3Z1JORygpIHtcXG4gICAgZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcXG4gICAgcmV0dXJuIHJuZHM4O1xcbiAgfTtcXG59IGVsc2Uge1xcbiAgLy8gTWF0aC5yYW5kb20oKS1iYXNlZCAoUk5HKVxcbiAgLy9cXG4gIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB1c2UgTWF0aC5yYW5kb20oKS4gIEl0J3MgZmFzdCwgYnV0IGlzIG9mIHVuc3BlY2lmaWVkXFxuICAvLyBxdWFsaXR5LlxcbiAgdmFyIHJuZHMgPSBuZXcgQXJyYXkoMTYpO1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRoUk5HKCkge1xcbiAgICBmb3IgKHZhciBpID0gMCwgcjsgaSA8IDE2OyBpKyspIHtcXG4gICAgICBpZiAoKGkgJiAweDAzKSA9PT0gMCkgciA9IE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAwMDtcXG4gICAgICBybmRzW2ldID0gciA+Pj4gKChpICYgMHgwMykgPDwgMykgJiAweGZmO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBybmRzO1xcbiAgfTtcXG59XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogODcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuLyoqXFxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XFxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXFxuICovXFxudmFyIGJ5dGVUb0hleCA9IFtdO1xcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcXG4gIGJ5dGVUb0hleFtpXSA9IChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSk7XFxufVxcblxcbmZ1bmN0aW9uIGJ5dGVzVG9VdWlkKGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IG9mZnNldCB8fCAwO1xcbiAgdmFyIGJ0aCA9IGJ5dGVUb0hleDtcXG4gIHJldHVybiBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gKyAnLScgK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArICctJyArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGJ5dGVzVG9VdWlkO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDg4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbnZhciBSZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgSGVscCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhIZWxwLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBIZWxwKCkge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5faGVscFBvcHVwID0gSFRNTFNwYW5FbGVtZW50ID0gbnVsbDtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBIZWxwLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2ZhcyBmYS1mdyBmYS1xdWVzdGlvbi1jaXJjbGUgZGVmYXVsdC1jb2xvcicsIHRoaXMucHJvcHMuY29udGFpbmVyQ2xhc3MpLCBcXFwiZGF0YS1jb250ZW50XFxcIjogdGhpcy5wcm9wcy50ZXh0LCByZWY6IGZ1bmN0aW9uIChkb20pIHsgcmV0dXJuIF90aGlzLl9oZWxwUG9wdXAgPSBkb207IH0sIHN0eWxlOiB0aGlzLnByb3BzLnN0eWxlIH0pKTtcXG4gICAgfTtcXG4gICAgSGVscC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAkKHRoaXMuX2hlbHBQb3B1cCkucG9wb3Zlcih7XFxuICAgICAgICAgICAgY29udGFpbmVyOiAnYm9keScsXFxuICAgICAgICAgICAgdHJpZ2dlcjogJ2hvdmVyJyxcXG4gICAgICAgICAgICBodG1sOiB0cnVlXFxuICAgICAgICB9KTtcXG4gICAgfTtcXG4gICAgSGVscC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAkKHRoaXMuX2hlbHBQb3B1cCkucG9wb3ZlcignZGVzdHJveScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gSGVscDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IEhlbHA7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogODkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxudmFyIGNoYXJlbmMgPSB7XFxuICAvLyBVVEYtOCBlbmNvZGluZ1xcbiAgdXRmODoge1xcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBzdHJpbmdUb0J5dGVzOiBmdW5jdGlvbihzdHIpIHtcXG4gICAgICByZXR1cm4gY2hhcmVuYy5iaW4uc3RyaW5nVG9CeXRlcyh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSkpO1xcbiAgICB9LFxcblxcbiAgICAvLyBDb252ZXJ0IGEgYnl0ZSBhcnJheSB0byBhIHN0cmluZ1xcbiAgICBieXRlc1RvU3RyaW5nOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGNoYXJlbmMuYmluLmJ5dGVzVG9TdHJpbmcoYnl0ZXMpKSk7XFxuICAgIH1cXG4gIH0sXFxuXFxuICAvLyBCaW5hcnkgZW5jb2RpbmdcXG4gIGJpbjoge1xcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBzdHJpbmdUb0J5dGVzOiBmdW5jdGlvbihzdHIpIHtcXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcXG4gICAgICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKTtcXG4gICAgICByZXR1cm4gYnl0ZXM7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBieXRlIGFycmF5IHRvIGEgc3RyaW5nXFxuICAgIGJ5dGVzVG9TdHJpbmc6IGZ1bmN0aW9uKGJ5dGVzKSB7XFxuICAgICAgZm9yICh2YXIgc3RyID0gW10sIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspXFxuICAgICAgICBzdHIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKSk7XFxuICAgICAgcmV0dXJuIHN0ci5qb2luKCcnKTtcXG4gICAgfVxcbiAgfVxcbn07XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBjaGFyZW5jO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDkwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG52YXIgX19leHRlbmRzID0gdGhpcyAmJiB0aGlzLl9fZXh0ZW5kcyB8fCBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGQuX19wcm90b19fID0gYjtcXG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkge1xcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xcbiAgICAgICAgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0oKTtcXG52YXIgX19hc3NpZ24gPSB0aGlzICYmIHRoaXMuX19hc3NpZ24gfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcXG4gICAgICAgIHMgPSBhcmd1bWVudHNbaV07XFxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xcbiAgICB9XFxuICAgIHJldHVybiB0O1xcbn07XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciByZWR1eF9mb3JtXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcXG52YXIgcGxhdGZvcm02ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTQpO1xcbnZhciB3ZWJTdG9yYWdlID0gcGxhdGZvcm02LndlYlN0b3JhZ2U7XFxudmFyIGZvcm1zID0gcGxhdGZvcm02LmZvcm1zO1xcbnZhciB0ZXh0X2lucHV0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1NSk7XFxudmFyIHNlbGVjdF9pbnB1dF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTkpO1xcbnZhciB0b2dnbGVfcGFuZWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYwKTtcXG52YXIgaGVscGVyc18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjMpO1xcbnZhciBVdGlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcyKTtcXG52YXIgd29yZGluZ3NfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjczKTtcXG52YXIgV09SRElOR1MgPSBoZWxwZXJzXzEuZ2V0V29yZGluZ3Mod29yZGluZ3NfMS5kZWZhdWx0LCB3ZWJTdG9yYWdlLmxvY2FsZSk7XFxudmFyIEN1c3RvbUZvcm0gPSBmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhDdXN0b21Gb3JtLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBDdXN0b21Gb3JtKHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnJlbmRlclJGUURldGFpbHMgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgdmFyIHJmcSA9IF90aGlzLnByb3BzLmRhdGEucmZxO1xcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInRpbGUgY29sLXhzLTEyIGJvdHRvbS1tYXJnaW4tbGdcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRhYmxlXFxcIiwgeyBzdHlsZTogeyB3aWR0aDogJzEwMCUnLCBtaW5IZWlnaHQ6IDQwIH0gfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhlYWRcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0clxcXCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pZCksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pc3N1ZV9kYXRlKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tbGFiZWxcXFwiIH0sIFdPUkRJTkdTLmlzc3VlX3RpbWUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0aFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby1sYWJlbFxcXCIgfSwgV09SRElOR1Mubm90ZSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGJvZHlcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0clxcXCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEuaWQpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0ZFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby12YWx1ZVxcXCIsIHN0eWxlOiB7IHZlcnRpY2FsQWxpZ246ICdib3R0b20nIH0gfSwgcmZxLmlzc3VlRGF0ZSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEuaXNzdWVUaW1lKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGRcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tdmFsdWVcXFwiLCBzdHlsZTogeyB2ZXJ0aWNhbEFsaWduOiAnYm90dG9tJyB9IH0sIHJmcS5ub3RlKSkpKSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMucmVuZGVySXRlbXMgPSBmdW5jdGlvbiAoX2EpIHtcXG4gICAgICAgICAgICB2YXIgZmllbGRzID0gX2EuZmllbGRzO1xcbiAgICAgICAgICAgIHZhciB0b3RhbCA9IFV0aWxzLmRpc3BsYXlUb3RhbEFtb3VudChmaWVsZHMuZ2V0QWxsKCkpO1xcbiAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHsgdG90YWw6IHRvdGFsIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImJvdHRvbS1tYXJnaW5cXFwiLCBzdHlsZTogeyB0ZXh0QWxpZ246ICdyaWdodCcgfSB9LCBXT1JESU5HUy50b3RhbF9hbW91bnQsIFxcXCI6IFxcXCIsIHRvdGFsKSwgX3RoaXMucmVuZGVySXRlbSh7IGZpZWxkczogZmllbGRzIH0pKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5yZW5kZXJJdGVtID0gZnVuY3Rpb24gKF9hKSB7XFxuICAgICAgICAgICAgdmFyIGZpZWxkcyA9IF9hLmZpZWxkcztcXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgbnVsbCwgZmllbGRzLm1hcChmdW5jdGlvbiAobWVtYmVyLCBpbmRleCwgZmllbGRzKSB7XFxuICAgICAgICAgICAgICAgIHZhciBsaW5lID0gX3RoaXMucHJvcHMuZGF0YS5saW5lc1tpbmRleF07XFxuICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IGZpZWxkcy5nZXQoaW5kZXgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBrZXk6IGluZGV4LCBjbGFzc05hbWU6IFxcXCJib3R0b20tbWFyZ2luXFxcIiwgc3R5bGU6IHsgcGFkZGluZzogMTUsIGJvcmRlckNvbG9yOiBcXFwiI2VlZVxcXCIsIGJvcmRlcldpZHRoOiAxLCBib3JkZXJTdHlsZTogXFxcInNvbGlkXFxcIiB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicm93IGJvdHRvbS1tYXJnaW5cXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJcXFwiLCBudWxsLCBXT1JESU5HUy5saW5lLCBcXFwiICNcXFwiLCBsaW5lLmlkKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFdPUkRJTkdTLmFtb3VudCwgXFxcIjogXFxcIiwgVXRpbHMuZGlzcGxheUl0ZW1BbW91bnQoZmllbGQpKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicm93IHRleHQtbWVkaXVtIGJvdHRvbS1tYXJnaW5cXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFdPUkRJTkdTLmRlc2NyaXB0aW9uLCBcXFwiOiBcXFwiLCBsaW5lLm5vdGUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImNvbC14cy02XFxcIiB9LCBXT1JESU5HUy5xdWFudGl0eSwgXFxcIjogXFxcIiwgbGluZS5xdWFudGl0eSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvd1xcXCIgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChzZWxlY3RfaW5wdXRfMS5kZWZhdWx0LCB7IG5hbWU6IG1lbWJlciArIFxcXCIuaXRlbVxcXCIsIGxhYmVsOiBXT1JESU5HUy5zZWxlY3RfaXRlbSwgY29udGFpbmVyQ2xhc3M6IFxcXCJjb2wteHMtMTJcXFwiLCBvcHRpb25zOiBVdGlscy5mb3JtYXRJdGVtc09wdGlvbnMobGluZS5pdGVtcykgfSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvd1xcXCIgfSwgUmVhY3QuY3JlYXRlRWxlbWVudCh0ZXh0X2lucHV0XzEuZGVmYXVsdCwgeyBuYW1lOiBtZW1iZXIgKyBcXFwiLmRpc2NvdW50XFxcIiwgbGFiZWw6IFdPUkRJTkdTLmRpc2NvdW50LCBjb250YWluZXJDbGFzczogXFxcImNvbC14cy0xMlxcXCIsIHR5cGU6IFxcXCJudW1iZXJcXFwiIH0pKSk7XFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN1Ym1pdEZvcm0gPSBmdW5jdGlvbiAodmFsdWVzKSB7XFxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gX19hc3NpZ24oe30sIHZhbHVlcywgeyB0b3RhbDogX3RoaXMuc3RhdGUudG90YWwgfSk7XFxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xcbiAgICAgICAgICAgIF90aGlzLnByb3BzLnN1Ym1pdEZvcm0oe1xcbiAgICAgICAgICAgICAgICByZnE6IEpTT04uc3RyaW5naWZ5KHZhbHVlcy5yZnEpLFxcbiAgICAgICAgICAgICAgICBsaW5lczogSlNPTi5zdHJpbmdpZnkodmFsdWVzLmxpbmVzKVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0geyB0b3RhbDogJycgfTtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBDdXN0b21Gb3JtLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodG9nZ2xlX3BhbmVsXzEuZGVmYXVsdCwgeyBwYW5lbFRpdGxlOiBcXFwiUHJvdmlkZSBRdW90ZVxcXCIsIGhpZGVUaXRsZTogZmFsc2UsIGRlZmF1bHRPcGVuZWQ6IHRydWUsIHRvZ2dsYWJsZTogZmFsc2UsIGNhbmNlbEJ0bjogeyBsYWJlbDogV09SRElOR1MuY2FuY2VsLCBhY3Rpb246IHByb3BzLmNsb3NlRm9ybSB9LCBzdWJtaXRCdG46IHsgbGFiZWw6IFdPUkRJTkdTLnN1Ym1pdCwgYWN0aW9uOiBwcm9wcy5oYW5kbGVTdWJtaXQodGhpcy5zdWJtaXRGb3JtKSB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImg0XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJ1cHBlciBib3R0b20tbWFyZ2luXFxcIiB9LCBXT1JESU5HUy5yZnFfaW5mbyksIHRoaXMucmVuZGVyUkZRRGV0YWlscygpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJoNFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidXBwZXIgYm90dG9tLW1hcmdpblxcXCIgfSwgV09SRElOR1MubGlzdF9pdGVtcyksIFJlYWN0LmNyZWF0ZUVsZW1lbnQocmVkdXhfZm9ybV8xLkZpZWxkQXJyYXksIHsgbmFtZTogXFxcImxpbmVzXFxcIiwgY29tcG9uZW50OiB0aGlzLnJlbmRlckl0ZW1zIH0pKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIEN1c3RvbUZvcm07XFxufShSZWFjdC5Db21wb25lbnQpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IGZvcm1zLnJlZHV4Rm9ybSh7IGZvcm06ICdjdXN0b21fZm9ybScgfSkoQ3VzdG9tRm9ybSk7XFxuXFxuLyoqKi8gfSksXFxuLyogOTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3JlZHVjZXJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3JlZHV4Rm9ybV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0ZpZWxkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fRmllbGRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fRmllbGRBcnJheV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Zvcm1WYWx1ZVNlbGVjdG9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fc2VsZWN0b3JzX2dldEZvcm1OYW1lc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX3NlbGVjdG9yc19nZXRGb3JtVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fc2VsZWN0b3JzX2dldEZvcm1Jbml0aWFsVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX3NlbGVjdG9yc19nZXRGb3JtU3luY0Vycm9yc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19zZWxlY3RvcnNfZ2V0Rm9ybUFzeW5jRXJyb3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX3NlbGVjdG9yc19nZXRGb3JtU3luY1dhcm5pbmdzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NlbGVjdG9yc19nZXRGb3JtU3VibWl0RXJyb3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX3NlbGVjdG9yc19pc0RpcnR5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3NlbGVjdG9yc19pc0ludmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fc2VsZWN0b3JzX2lzUHJpc3RpbmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX3NlbGVjdG9yc19pc1N1Ym1pdHRpbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fc2VsZWN0b3JzX2hhc1N1Ym1pdFN1Y2NlZWRlZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19zZWxlY3RvcnNfaGFzU3VibWl0RmFpbGVkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX0Zvcm1fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fRm9ybVNlY3Rpb25fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fU3VibWlzc2lvbkVycm9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fcHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX2FjdGlvbnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X19hY3Rpb25UeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgY3JlYXRlQWxsID0gZnVuY3Rpb24gY3JlYXRlQWxsKHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIF9leHRlbmRzKHtcXG4gICAgLy8gc2VwYXJhdGUgb3V0IGZpZWxkIGFjdGlvbnNcXG4gICAgYWN0aW9uVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjZfX2FjdGlvblR5cGVzX19cXG4gIH0sIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX2FjdGlvbnNfXywge1xcbiAgICBGaWVsZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fRmllbGRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIEZpZWxkczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fRmllbGRzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGaWVsZEFycmF5OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19GaWVsZEFycmF5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19Gb3JtX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICBGb3JtU2VjdGlvbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fRm9ybVNlY3Rpb25fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgIGZvcm1WYWx1ZVNlbGVjdG9yOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19mb3JtVmFsdWVTZWxlY3Rvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybU5hbWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19zZWxlY3RvcnNfZ2V0Rm9ybU5hbWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBnZXRGb3JtVmFsdWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19zZWxlY3RvcnNfZ2V0Rm9ybVZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybUluaXRpYWxWYWx1ZXM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX3NlbGVjdG9yc19nZXRGb3JtSW5pdGlhbFZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVN5bmNFcnJvcnM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNFcnJvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1Bc3luY0Vycm9yczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX3NlbGVjdG9yc19nZXRGb3JtQXN5bmNFcnJvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1TeW5jV2FybmluZ3M6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNXYXJuaW5nc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVN1Ym1pdEVycm9yczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NlbGVjdG9yc19nZXRGb3JtU3VibWl0RXJyb3JzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc0RpcnR5OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fc2VsZWN0b3JzX2lzRGlydHlfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzSW52YWxpZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3NlbGVjdG9yc19pc0ludmFsaWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzUHJpc3RpbmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19zZWxlY3RvcnNfaXNQcmlzdGluZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgaXNWYWxpZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX3NlbGVjdG9yc19pc1ZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc1N1Ym1pdHRpbmc6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19zZWxlY3RvcnNfaXNTdWJtaXR0aW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBoYXNTdWJtaXRTdWNjZWVkZWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19zZWxlY3RvcnNfaGFzU3VibWl0U3VjY2VlZGVkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBoYXNTdWJtaXRGYWlsZWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19zZWxlY3RvcnNfaGFzU3VibWl0RmFpbGVkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBwcm9wVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX3Byb3BUeXBlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgcmVkdXhGb3JtOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yZWR1eEZvcm1fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIHJlZHVjZXI6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3JlZHVjZXJfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIFN1Ym1pc3Npb25FcnJvcjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fU3VibWlzc2lvbkVycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICB2YWx1ZXM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3ZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKVxcbiAgfSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVBbGwpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVsZXRlSW5XaXRoQ2xlYW5VcF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Myk7XFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZVJlZHVjZXIgPSBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyKHN0cnVjdHVyZSkge1xcbiAgdmFyIF9iZWhhdmlvcnM7XFxuXFxuICB2YXIgZGVlcEVxdWFsID0gc3RydWN0dXJlLmRlZXBFcXVhbCxcXG4gICAgICBlbXB0eSA9IHN0cnVjdHVyZS5lbXB0eSxcXG4gICAgICBnZXRJbiA9IHN0cnVjdHVyZS5nZXRJbixcXG4gICAgICBzZXRJbiA9IHN0cnVjdHVyZS5zZXRJbixcXG4gICAgICBkZWxldGVJbiA9IHN0cnVjdHVyZS5kZWxldGVJbixcXG4gICAgICBmcm9tSlMgPSBzdHJ1Y3R1cmUuZnJvbUpTLFxcbiAgICAgIGtleXMgPSBzdHJ1Y3R1cmUua2V5cyxcXG4gICAgICBzaXplID0gc3RydWN0dXJlLnNpemUsXFxuICAgICAgc3BsaWNlID0gc3RydWN0dXJlLnNwbGljZTtcXG5cXG4gIHZhciBkZWxldGVJbldpdGhDbGVhblVwID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVsZXRlSW5XaXRoQ2xlYW5VcF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHZhciBkb1NwbGljZSA9IGZ1bmN0aW9uIGRvU3BsaWNlKHN0YXRlLCBrZXksIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB2YWx1ZSwgZm9yY2UpIHtcXG4gICAgdmFyIGV4aXN0aW5nID0gZ2V0SW4oc3RhdGUsIGtleSArICcuJyArIGZpZWxkKTtcXG4gICAgcmV0dXJuIGV4aXN0aW5nIHx8IGZvcmNlID8gc2V0SW4oc3RhdGUsIGtleSArICcuJyArIGZpZWxkLCBzcGxpY2UoZXhpc3RpbmcsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSkgOiBzdGF0ZTtcXG4gIH07XFxuICB2YXIgcm9vdEtleXMgPSBbJ3ZhbHVlcycsICdmaWVsZHMnLCAnc3VibWl0RXJyb3JzJywgJ2FzeW5jRXJyb3JzJ107XFxuICB2YXIgYXJyYXlTcGxpY2UgPSBmdW5jdGlvbiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIG5vblZhbHVlc1ZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IGVtcHR5IDogdW5kZWZpbmVkO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICd2YWx1ZXMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUsIHRydWUpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdmaWVsZHMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgbm9uVmFsdWVzVmFsdWUpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdzeW5jRXJyb3JzJywgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHVuZGVmaW5lZCk7XFxuICAgIHJlc3VsdCA9IGRvU3BsaWNlKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdhc3luY0Vycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG5cXG4gIHZhciBiZWhhdmlvcnMgPSAoX2JlaGF2aW9ycyA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9JTlNFUlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmKSB7XFxuICAgIHZhciBfcmVmJG1ldGEgPSBfcmVmLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZiRtZXRhLmluZGV4LFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYucGF5bG9hZDtcXG5cXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgaW5kZXgsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX01PVkVcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMikge1xcbiAgICB2YXIgX3JlZjIkbWV0YSA9IF9yZWYyLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYyJG1ldGEuZmllbGQsXFxuICAgICAgICBmcm9tID0gX3JlZjIkbWV0YS5mcm9tLFxcbiAgICAgICAgdG8gPSBfcmVmMiRtZXRhLnRvO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgaWYgKGxlbmd0aCkge1xcbiAgICAgIHJvb3RLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgdmFyIHBhdGggPSBrZXkgKyAnLicgKyBmaWVsZDtcXG4gICAgICAgIGlmIChnZXRJbihyZXN1bHQsIHBhdGgpKSB7XFxuICAgICAgICAgIHZhciB2YWx1ZSA9IGdldEluKHJlc3VsdCwgcGF0aCArICdbJyArIGZyb20gKyAnXScpO1xcbiAgICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIHBhdGgsIHNwbGljZShnZXRJbihyZXN1bHQsIHBhdGgpLCBmcm9tLCAxKSk7IC8vIHJlbW92ZVxcbiAgICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIHBhdGgsIHNwbGljZShnZXRJbihyZXN1bHQsIHBhdGgpLCB0bywgMCwgdmFsdWUpKTsgLy8gaW5zZXJ0XFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QT1BcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMykge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmMy5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHJldHVybiBsZW5ndGggPyBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGxlbmd0aCAtIDEsIDEpIDogc3RhdGU7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUFVTSFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY0KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWY0Lm1ldGEuZmllbGQsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjQucGF5bG9hZDtcXG5cXG4gICAgdmFyIGFycmF5ID0gZ2V0SW4oc3RhdGUsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gc2l6ZShhcnJheSkgOiAwO1xcbiAgICByZXR1cm4gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCBsZW5ndGgsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY1KSB7XFxuICAgIHZhciBfcmVmNSRtZXRhID0gX3JlZjUubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjUkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZjUkbWV0YS5pbmRleDtcXG5cXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgaW5kZXgsIDEpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRV9BTExcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmNikge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmNi5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHJldHVybiBsZW5ndGggPyBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIGxlbmd0aCkgOiBzdGF0ZTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9TSElGVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY3KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWY3Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIDEpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NQTElDRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY4KSB7XFxuICAgIHZhciBfcmVmOCRtZXRhID0gX3JlZjgubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjgkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZjgkbWV0YS5pbmRleCxcXG4gICAgICAgIHJlbW92ZU51bSA9IF9yZWY4JG1ldGEucmVtb3ZlTnVtLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWY4LnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NXQVBcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmOSkge1xcbiAgICB2YXIgX3JlZjkkbWV0YSA9IF9yZWY5Lm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWY5JG1ldGEuZmllbGQsXFxuICAgICAgICBpbmRleEEgPSBfcmVmOSRtZXRhLmluZGV4QSxcXG4gICAgICAgIGluZGV4QiA9IF9yZWY5JG1ldGEuaW5kZXhCO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJvb3RLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHZhciB2YWx1ZUEgPSBnZXRJbihyZXN1bHQsIGtleSArICcuJyArIGZpZWxkICsgJ1snICsgaW5kZXhBICsgJ10nKTtcXG4gICAgICB2YXIgdmFsdWVCID0gZ2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QiArICddJyk7XFxuICAgICAgaWYgKHZhbHVlQSAhPT0gdW5kZWZpbmVkIHx8IHZhbHVlQiAhPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIGtleSArICcuJyArIGZpZWxkICsgJ1snICsgaW5kZXhBICsgJ10nLCB2YWx1ZUIpO1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QiArICddJywgdmFsdWVBKTtcXG4gICAgICB9XFxuICAgIH0pO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1VOU0hJRlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTApIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjEwLm1ldGEuZmllbGQsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEwLnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFVVE9GSUxMXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjExKSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWYxMS5tZXRhLmZpZWxkLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYxMS5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnYXN5bmNFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdzdWJtaXRFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcuYXV0b2ZpbGxlZCcsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICd2YWx1ZXMuJyArIGZpZWxkLCBwYXlsb2FkKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJCTFVSXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjEyKSB7XFxuICAgIHZhciBfcmVmMTIkbWV0YSA9IF9yZWYxMi5tZXRhLFxcbiAgICAgICAgZmllbGQgPSBfcmVmMTIkbWV0YS5maWVsZCxcXG4gICAgICAgIHRvdWNoID0gX3JlZjEyJG1ldGEudG91Y2gsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEyLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGluaXRpYWwgPSBnZXRJbihyZXN1bHQsICdpbml0aWFsLicgKyBmaWVsZCk7XFxuICAgIGlmIChpbml0aWFsID09PSB1bmRlZmluZWQgJiYgcGF5bG9hZCA9PT0gJycpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB9IGVsc2UgaWYgKHBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQsIHBheWxvYWQpO1xcbiAgICB9XFxuICAgIGlmIChmaWVsZCA9PT0gZ2V0SW4ocmVzdWx0LCAnYWN0aXZlJykpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdhY3RpdmUnKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy5hY3RpdmUnKTtcXG4gICAgaWYgKHRvdWNoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcsIHRydWUpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNIQU5HRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxMykge1xcbiAgICB2YXIgX3JlZjEzJG1ldGEgPSBfcmVmMTMubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjEzJG1ldGEuZmllbGQsXFxuICAgICAgICB0b3VjaCA9IF9yZWYxMyRtZXRhLnRvdWNoLFxcbiAgICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9ycyA9IF9yZWYxMyRtZXRhLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEzLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGluaXRpYWwgPSBnZXRJbihyZXN1bHQsICdpbml0aWFsLicgKyBmaWVsZCk7XFxuICAgIGlmIChpbml0aWFsID09PSB1bmRlZmluZWQgJiYgcGF5bG9hZCA9PT0gJycpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB9IGVsc2UgaWYgKHBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQsIHBheWxvYWQpO1xcbiAgICB9XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnYXN5bmNFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgaWYgKCFwZXJzaXN0ZW50U3VibWl0RXJyb3JzKSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdzdWJtaXRFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmF1dG9maWxsZWQnKTtcXG4gICAgaWYgKHRvdWNoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcsIHRydWUpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIGRlbGV0ZUluKHN0YXRlLCAndHJpZ2dlclN1Ym1pdCcpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHN0YXRlLCAnc3VibWl0RXJyb3JzJyk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfQVNZTkNfRVJST1JcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTQpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE0Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBkZWxldGVJbihzdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBmaWVsZCk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiRk9DVVNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTUpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE1Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIHByZXZpb3VzbHlBY3RpdmUgPSBnZXRJbihzdGF0ZSwgJ2FjdGl2ZScpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdmaWVsZHMuJyArIHByZXZpb3VzbHlBY3RpdmUgKyAnLmFjdGl2ZScpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy52aXNpdGVkJywgdHJ1ZSk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmFjdGl2ZScsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdhY3RpdmUnLCBmaWVsZCk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiSU5JVElBTElaRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxNikge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYxNi5wYXlsb2FkLFxcbiAgICAgICAgX3JlZjE2JG1ldGEgPSBfcmVmMTYubWV0YSxcXG4gICAgICAgIGtlZXBEaXJ0eSA9IF9yZWYxNiRtZXRhLmtlZXBEaXJ0eSxcXG4gICAgICAgIGtlZXBTdWJtaXRTdWNjZWVkZWQgPSBfcmVmMTYkbWV0YS5rZWVwU3VibWl0U3VjY2VlZGVkO1xcblxcbiAgICB2YXIgbWFwRGF0YSA9IGZyb21KUyhwYXlsb2FkKTtcXG4gICAgdmFyIHJlc3VsdCA9IGVtcHR5OyAvLyBjbGVhbiBhbGwgZmllbGQgc3RhdGVcXG5cXG4gICAgLy8gcGVyc2lzdCBvbGQgd2FybmluZ3MsIHRoZXkgd2lsbCBnZXQgcmVjYWxjdWxhdGVkIGlmIHRoZSBuZXcgZm9ybSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgdmFsdWVzXFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3RhdGUsICd3YXJuaW5nJyk7XFxuICAgIGlmICh3YXJuaW5nKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnd2FybmluZycsIHdhcm5pbmcpO1xcbiAgICB9XFxuICAgIHZhciBzeW5jV2FybmluZ3MgPSBnZXRJbihzdGF0ZSwgJ3N5bmNXYXJuaW5ncycpO1xcbiAgICBpZiAoc3luY1dhcm5pbmdzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJywgc3luY1dhcm5pbmdzKTtcXG4gICAgfVxcblxcbiAgICAvLyBwZXJzaXN0IG9sZCBlcnJvcnMsIHRoZXkgd2lsbCBnZXQgcmVjYWxjdWxhdGVkIGlmIHRoZSBuZXcgZm9ybSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgdmFsdWVzXFxuICAgIHZhciBlcnJvciA9IGdldEluKHN0YXRlLCAnZXJyb3InKTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBlcnJvcik7XFxuICAgIH1cXG4gICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihzdGF0ZSwgJ3N5bmNFcnJvcnMnKTtcXG4gICAgaWYgKHN5bmNFcnJvcnMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3JzJywgc3luY0Vycm9ycyk7XFxuICAgIH1cXG5cXG4gICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihzdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgaWYgKHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJywgcmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgIH1cXG4gICAgdmFyIG5ld1ZhbHVlcyA9IG1hcERhdGE7XFxuICAgIGlmIChrZWVwRGlydHkgJiYgcmVnaXN0ZXJlZEZpZWxkcykge1xcbiAgICAgIC8vXFxuICAgICAgLy8gS2VlcCB0aGUgdmFsdWUgb2YgZGlydHkgZmllbGRzIHdoaWxlIHVwZGF0aW5nIHRoZSB2YWx1ZSBvZlxcbiAgICAgIC8vIHByaXN0aW5lIGZpZWxkcy4gVGhpcyB3YXksIGFwcHMgY2FuIHJlaW5pdGlhbGl6ZSBmb3JtcyB3aGlsZVxcbiAgICAgIC8vIGF2b2lkaW5nIHN0b21waW5nIG9uIHVzZXIgZWRpdHMuXFxuICAgICAgLy9cXG4gICAgICAvLyBOb3RlIDE6IFRoZSBpbml0aWFsaXplIGFjdGlvbiByZXBsYWNlcyBhbGwgaW5pdGlhbCB2YWx1ZXNcXG4gICAgICAvLyByZWdhcmRsZXNzIG9mIGtlZXBEaXJ0eS5cXG4gICAgICAvL1xcbiAgICAgIC8vIE5vdGUgMjogV2hlbiBhIGZpZWxkIGlzIGRpcnR5LCBrZWVwRGlydHkgaXMgZW5hYmxlZCwgYW5kIHRoZSBmaWVsZFxcbiAgICAgIC8vIHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBuZXcgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZpZWxkLCB0aGVcXG4gICAgICAvLyBpbml0aWFsaXplIGFjdGlvbiBjYXVzZXMgdGhlIGZpZWxkIHRvIGJlY29tZSBwcmlzdGluZS4gVGhhdCBlZmZlY3RcXG4gICAgICAvLyBpcyB3aGF0IHdlIHdhbnQuXFxuICAgICAgLy9cXG4gICAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcycpO1xcbiAgICAgIHZhciBwcmV2aW91c0luaXRpYWxWYWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ2luaXRpYWwnKTtcXG4gICAgICBrZXlzKHJlZ2lzdGVyZWRGaWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgIHZhciBwcmV2aW91c0luaXRpYWxWYWx1ZSA9IGdldEluKHByZXZpb3VzSW5pdGlhbFZhbHVlcywgbmFtZSk7XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGdldEluKHByZXZpb3VzVmFsdWVzLCBuYW1lKTtcXG4gICAgICAgIGlmICghZGVlcEVxdWFsKHByZXZpb3VzVmFsdWUsIHByZXZpb3VzSW5pdGlhbFZhbHVlKSkge1xcbiAgICAgICAgICAvLyBUaGlzIGZpZWxkIHdhcyBkaXJ0eS4gUmVzdG9yZSB0aGUgZGlydHkgdmFsdWUuXFxuICAgICAgICAgIG5ld1ZhbHVlcyA9IHNldEluKG5ld1ZhbHVlcywgbmFtZSwgcHJldmlvdXNWYWx1ZSk7XFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgIH1cXG4gICAgaWYgKGtlZXBTdWJtaXRTdWNjZWVkZWQgJiYgZ2V0SW4oc3RhdGUsICdzdWJtaXRTdWNjZWVkZWQnKSkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcsIHRydWUpO1xcbiAgICB9XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcycsIG5ld1ZhbHVlcyk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2luaXRpYWwnLCBtYXBEYXRhKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJSRUdJU1RFUl9GSUVMRFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxNykge1xcbiAgICB2YXIgX3JlZjE3JHBheWxvYWQgPSBfcmVmMTcucGF5bG9hZCxcXG4gICAgICAgIG5hbWUgPSBfcmVmMTckcGF5bG9hZC5uYW1lLFxcbiAgICAgICAgdHlwZSA9IF9yZWYxNyRwYXlsb2FkLnR5cGU7XFxuXFxuICAgIHZhciBrZXkgPSAncmVnaXN0ZXJlZEZpZWxkc1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXSc7XFxuICAgIHZhciBmaWVsZCA9IGdldEluKHN0YXRlLCBrZXkpO1xcbiAgICBpZiAoZmllbGQpIHtcXG4gICAgICB2YXIgY291bnQgPSBnZXRJbihmaWVsZCwgJ2NvdW50JykgKyAxO1xcbiAgICAgIGZpZWxkID0gc2V0SW4oZmllbGQsICdjb3VudCcsIGNvdW50KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICBmaWVsZCA9IGZyb21KUyh7IG5hbWU6IG5hbWUsIHR5cGU6IHR5cGUsIGNvdW50OiAxIH0pO1xcbiAgICB9XFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwga2V5LCBmaWVsZCk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVTRVRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHZhciByZXN1bHQgPSBlbXB0eTtcXG4gICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihzdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgaWYgKHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJywgcmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgIH1cXG4gICAgdmFyIHZhbHVlcyA9IGdldEluKHN0YXRlLCAnaW5pdGlhbCcpO1xcbiAgICBpZiAodmFsdWVzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAndmFsdWVzJywgdmFsdWVzKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdpbml0aWFsJywgdmFsdWVzKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIHNldEluKHN0YXRlLCAndHJpZ2dlclN1Ym1pdCcsIHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX0FTWU5DX1ZBTElEQVRJT05cXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTgpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE4Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycsIGZpZWxkIHx8IHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIHNldEluKHN0YXRlLCAnc3VibWl0dGluZycsIHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfQVNZTkNfVkFMSURBVElPTlxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxOSkge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYxOS5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jVmFsaWRhdGluZycpO1xcbiAgICBpZiAocGF5bG9hZCAmJiBPYmplY3Qua2V5cyhwYXlsb2FkKS5sZW5ndGgpIHtcXG4gICAgICB2YXIgX2Vycm9yID0gcGF5bG9hZC5fZXJyb3IsXFxuICAgICAgICAgIGZpZWxkRXJyb3JzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHBheWxvYWQsIFsnX2Vycm9yJ10pO1xcblxcbiAgICAgIGlmIChfZXJyb3IpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2Vycm9yJywgX2Vycm9yKTtcXG4gICAgICB9XFxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpZWxkRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJywgZnJvbUpTKGZpZWxkRXJyb3JzKSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJyk7XFxuICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2Vycm9yJyk7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnYXN5bmNFcnJvcnMnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfU1VCTUlUXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIwKSB7XFxuICAgIHZhciBwYXlsb2FkID0gX3JlZjIwLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0dGluZycpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgIGlmIChwYXlsb2FkICYmIE9iamVjdC5rZXlzKHBheWxvYWQpLmxlbmd0aCkge1xcbiAgICAgIHZhciBfZXJyb3IgPSBwYXlsb2FkLl9lcnJvcixcXG4gICAgICAgICAgZmllbGRFcnJvcnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocGF5bG9hZCwgWydfZXJyb3InXSk7XFxuXFxuICAgICAgaWYgKF9lcnJvcikge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBfZXJyb3IpO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIH1cXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmllbGRFcnJvcnMpLmxlbmd0aCkge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3VibWl0RXJyb3JzJywgZnJvbUpTKGZpZWxkRXJyb3JzKSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgICAgIH1cXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnLCB0cnVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRTdWNjZWVkZWQnLCB0cnVlKTtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9GQUlMRURcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjEpIHtcXG4gICAgdmFyIGZpZWxkcyA9IF9yZWYyMS5tZXRhLmZpZWxkcztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnLCB0cnVlKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfSk7XFxuICAgIGlmIChmaWVsZHMubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnYW55VG91Y2hlZCcsIHRydWUpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0RmFpbGVkJyk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcsIHRydWUpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlRPVUNIXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIyKSB7XFxuICAgIHZhciBmaWVsZHMgPSBfcmVmMjIubWV0YS5maWVsZHM7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfSk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlJFR0lTVEVSX0ZJRUxEXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIzKSB7XFxuICAgIHZhciBfcmVmMjMkcGF5bG9hZCA9IF9yZWYyMy5wYXlsb2FkLFxcbiAgICAgICAgbmFtZSA9IF9yZWYyMyRwYXlsb2FkLm5hbWUsXFxuICAgICAgICBkZXN0cm95T25Vbm1vdW50ID0gX3JlZjIzJHBheWxvYWQuZGVzdHJveU9uVW5tb3VudDtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICB2YXIga2V5ID0gJ3JlZ2lzdGVyZWRGaWVsZHNbXFxcXCcnICsgbmFtZSArICdcXFxcJ10nO1xcbiAgICB2YXIgZmllbGQgPSBnZXRJbihyZXN1bHQsIGtleSk7XFxuICAgIGlmICghZmllbGQpIHtcXG4gICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9XFxuXFxuICAgIHZhciBjb3VudCA9IGdldEluKGZpZWxkLCAnY291bnQnKSAtIDE7XFxuICAgIGlmIChjb3VudCA8PSAwICYmIGRlc3Ryb3lPblVubW91bnQpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsIGtleSk7XFxuICAgICAgaWYgKGRlZXBFcXVhbChnZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJyksIGVtcHR5KSkge1xcbiAgICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAncmVnaXN0ZXJlZEZpZWxkcycpO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICBmaWVsZCA9IHNldEluKGZpZWxkLCAnY291bnQnLCBjb3VudCk7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXksIGZpZWxkKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVOVE9VQ0hcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjQpIHtcXG4gICAgdmFyIGZpZWxkcyA9IF9yZWYyNC5tZXRhLmZpZWxkcztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICByZXR1cm4gcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcpO1xcbiAgICB9KTtcXG4gICAgdmFyIGFueVRvdWNoZWQgPSBrZXlzKGdldEluKHJlc3VsdCwgJ3JlZ2lzdGVyZWRGaWVsZHMnKSkuc29tZShmdW5jdGlvbiAoa2V5KSB7XFxuICAgICAgcmV0dXJuIGdldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsga2V5ICsgJy50b3VjaGVkJyk7XFxuICAgIH0pO1xcbiAgICByZXN1bHQgPSBhbnlUb3VjaGVkID8gc2V0SW4ocmVzdWx0LCAnYW55VG91Y2hlZCcsIHRydWUpIDogZGVsZXRlSW4ocmVzdWx0LCAnYW55VG91Y2hlZCcpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX0VSUk9SU1xcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYyNSkge1xcbiAgICB2YXIgX3JlZjI1JHBheWxvYWQgPSBfcmVmMjUucGF5bG9hZCxcXG4gICAgICAgIHN5bmNFcnJvcnMgPSBfcmVmMjUkcGF5bG9hZC5zeW5jRXJyb3JzLFxcbiAgICAgICAgZXJyb3IgPSBfcmVmMjUkcGF5bG9hZC5lcnJvcjtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBpZiAoZXJyb3IpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdlcnJvcicsIGVycm9yKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3InLCB0cnVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N5bmNFcnJvcicpO1xcbiAgICB9XFxuICAgIGlmIChPYmplY3Qua2V5cyhzeW5jRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3JzJywgc3luY0Vycm9ycyk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3luY0Vycm9ycycpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVVBEQVRFX1NZTkNfV0FSTklOR1NcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjYpIHtcXG4gICAgdmFyIF9yZWYyNiRwYXlsb2FkID0gX3JlZjI2LnBheWxvYWQsXFxuICAgICAgICBzeW5jV2FybmluZ3MgPSBfcmVmMjYkcGF5bG9hZC5zeW5jV2FybmluZ3MsXFxuICAgICAgICB3YXJuaW5nID0gX3JlZjI2JHBheWxvYWQud2FybmluZztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBpZiAod2FybmluZykge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3dhcm5pbmcnLCB3YXJuaW5nKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICd3YXJuaW5nJyk7XFxuICAgIH1cXG4gICAgaWYgKE9iamVjdC5rZXlzKHN5bmNXYXJuaW5ncykubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJywgc3luY1dhcm5pbmdzKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzeW5jV2FybmluZ3MnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9iZWhhdmlvcnMpO1xcblxcbiAgdmFyIHJlZHVjZXIgPSBmdW5jdGlvbiByZWR1Y2VyKCkge1xcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVtcHR5O1xcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xcblxcbiAgICB2YXIgYmVoYXZpb3IgPSBiZWhhdmlvcnNbYWN0aW9uLnR5cGVdO1xcbiAgICByZXR1cm4gYmVoYXZpb3IgPyBiZWhhdmlvcihzdGF0ZSwgYWN0aW9uKSA6IHN0YXRlO1xcbiAgfTtcXG5cXG4gIHZhciBieUZvcm0gPSBmdW5jdGlvbiBieUZvcm0ocmVkdWNlcikge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICAgIHZhciBzdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZW1wdHk7XFxuICAgICAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XFxuXFxuICAgICAgdmFyIGZvcm0gPSBhY3Rpb24gJiYgYWN0aW9uLm1ldGEgJiYgYWN0aW9uLm1ldGEuZm9ybTtcXG4gICAgICBpZiAoIWZvcm0pIHtcXG4gICAgICAgIHJldHVybiBzdGF0ZTtcXG4gICAgICB9XFxuICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkRFU1RST1lcXFwiXSkge1xcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5tZXRhLmZvcm0ucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGZvcm0pIHtcXG4gICAgICAgICAgcmV0dXJuIGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCBmb3JtKTtcXG4gICAgICAgIH0sIHN0YXRlKTtcXG4gICAgICB9XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEluKHN0YXRlLCBmb3JtKTtcXG4gICAgICB2YXIgcmVzdWx0ID0gcmVkdWNlcihmb3JtU3RhdGUsIGFjdGlvbik7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gZm9ybVN0YXRlID8gc3RhdGUgOiBzZXRJbihzdGF0ZSwgZm9ybSwgcmVzdWx0KTtcXG4gICAgfTtcXG4gIH07XFxuXFxuICAvKipcXG4gICAqIEFkZHMgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IHRvIHRoZSByZWR1Y2VyXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGRlY29yYXRlKHRhcmdldCkge1xcbiAgICB0YXJnZXQucGx1Z2luID0gZnVuY3Rpb24gcGx1Z2luKHJlZHVjZXJzKSB7XFxuICAgICAgdmFyIF90aGlzID0gdGhpcztcXG5cXG4gICAgICAvLyB1c2UgJ2Z1bmN0aW9uJyBrZXl3b3JkIHRvIGVuYWJsZSAndGhpcydcXG4gICAgICByZXR1cm4gZGVjb3JhdGUoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIHN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBlbXB0eTtcXG4gICAgICAgIHZhciBhY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlZHVjZXJzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBrZXkpIHtcXG4gICAgICAgICAgdmFyIHByZXZpb3VzU3RhdGUgPSBnZXRJbihhY2N1bXVsYXRvciwga2V5KTtcXG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHJlZHVjZXJzW2tleV0ocHJldmlvdXNTdGF0ZSwgYWN0aW9uLCBnZXRJbihzdGF0ZSwga2V5KSk7XFxuICAgICAgICAgIHJldHVybiBuZXh0U3RhdGUgPT09IHByZXZpb3VzU3RhdGUgPyBhY2N1bXVsYXRvciA6IHNldEluKGFjY3VtdWxhdG9yLCBrZXksIG5leHRTdGF0ZSk7XFxuICAgICAgICB9LCBfdGhpcyhzdGF0ZSwgYWN0aW9uKSk7XFxuICAgICAgfSk7XFxuICAgIH07XFxuXFxuICAgIHJldHVybiB0YXJnZXQ7XFxuICB9XFxuXFxuICByZXR1cm4gZGVjb3JhdGUoYnlGb3JtKHJlZHVjZXIpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZVJlZHVjZXIpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xcblxcblxcblxcbnZhciBjcmVhdGVEZWxldGVJbldpdGhDbGVhblVwID0gZnVuY3Rpb24gY3JlYXRlRGVsZXRlSW5XaXRoQ2xlYW5VcChfcmVmKSB7XFxuICB2YXIgZGVlcEVxdWFsID0gX3JlZi5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBfcmVmLmVtcHR5LFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBkZWxldGVJbiA9IF9yZWYuZGVsZXRlSW4sXFxuICAgICAgc2V0SW4gPSBfcmVmLnNldEluO1xcblxcblxcbiAgdmFyIGRlbGV0ZUluV2l0aENsZWFuVXAgPSBmdW5jdGlvbiBkZWxldGVJbldpdGhDbGVhblVwKHN0YXRlLCBwYXRoKSB7XFxuICAgIGlmIChwYXRoW3BhdGgubGVuZ3RoIC0gMV0gPT09ICddJykge1xcbiAgICAgIC8vIGFycmF5IHBhdGhcXG4gICAgICB2YXIgcGF0aFRva2VucyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCk7XFxuICAgICAgcGF0aFRva2Vucy5wb3AoKTtcXG4gICAgICB2YXIgcGFyZW50ID0gZ2V0SW4oc3RhdGUsIHBhdGhUb2tlbnMuam9pbignLicpKTtcXG4gICAgICByZXR1cm4gcGFyZW50ID8gc2V0SW4oc3RhdGUsIHBhdGgsIHVuZGVmaW5lZCkgOiBzdGF0ZTtcXG4gICAgfVxcbiAgICB2YXIgcmVzdWx0ID0gZGVsZXRlSW4oc3RhdGUsIHBhdGgpO1xcbiAgICB2YXIgZG90SW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKCcuJyk7XFxuICAgIGlmIChkb3RJbmRleCA+IDApIHtcXG4gICAgICB2YXIgcGFyZW50UGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIGRvdEluZGV4KTtcXG4gICAgICBpZiAocGFyZW50UGF0aFtwYXJlbnRQYXRoLmxlbmd0aCAtIDFdICE9PSAnXScpIHtcXG4gICAgICAgIHZhciBfcGFyZW50ID0gZ2V0SW4ocmVzdWx0LCBwYXJlbnRQYXRoKTtcXG4gICAgICAgIGlmIChkZWVwRXF1YWwoX3BhcmVudCwgZW1wdHkpKSB7XFxuICAgICAgICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgcGFyZW50UGF0aCk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9O1xcblxcbiAgcmV0dXJuIGRlbGV0ZUluV2l0aENsZWFuVXA7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVEZWxldGVJbldpdGhDbGVhblVwKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA5NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXFxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXFxuICogb2YgdmFsdWVzLlxcbiAqL1xcbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBzeW1Ub1N0cmluZ1RhZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10udG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXFxuICovXFxuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XFxuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xcblxcbiAgdHJ5IHtcXG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xcbiAgfSBjYXRjaCAoZSkge31cXG5cXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcXG4gIGlmICh1bm1hc2tlZCkge1xcbiAgICBpZiAoaXNPd24pIHtcXG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0UmF3VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqXFxuICogVXNlZCB0byByZXNvbHZlIHRoZVxcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxcbiAqIG9mIHZhbHVlcy5cXG4gKi9cXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxcbiAqL1xcbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XFxuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG9iamVjdFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nyk7XFxuXFxuXFxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xcbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XFxuICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuYywgZnVuY3Rpb24oa2V5KSB7XFxuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XFxuICAgICAgY2FjaGUuY2xlYXIoKTtcXG4gICAgfVxcbiAgICByZXR1cm4ga2V5O1xcbiAgfSk7XFxuXFxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZW1vaXplQ2FwcGVkKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xcblxcblxcbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXFxuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICpcXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcXG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XFxuICpcXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcXG4gKiB2YWx1ZXMob2JqZWN0KTtcXG4gKiAvLyA9PiBbMSwgMl1cXG4gKlxcbiAqIHZhbHVlcyhvdGhlcik7XFxuICogLy8gPT4gWzMsIDRdXFxuICpcXG4gKiBvYmplY3QuYSA9IDI7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWzEsIDJdXFxuICpcXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWydhJywgJ2InXVxcbiAqXFxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xcbiAqL1xcbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XFxuICB9XFxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XFxuXFxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcXG4gICAgfVxcbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcXG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgcmV0dXJuIG1lbW9pemVkO1xcbn1cXG5cXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cXG5tZW1vaXplLkNhY2hlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19NYXBDYWNoZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZW1vaXplKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKi9cXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xcbiAgdGhpcy5zaXplID0gMDtcXG4gIHRoaXMuX19kYXRhX18gPSB7XFxuICAgICdoYXNoJzogbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgJ21hcCc6IG5ldyAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gfHwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19MaXN0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICAnc3RyaW5nJzogbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXVxcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwQ2FjaGVDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hhc2hDbGVhcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc2hEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19oYXNoR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faGFzaEhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2hhc2hTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA4KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBjb25zdHJ1Y3RvclxcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxcbiAqL1xcbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGFzaENsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faGFzaERlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5IYXNoLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc2hHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuSGFzaC5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19oYXNoSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlLnNldCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faGFzaFNldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChIYXNoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMDAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XFxuXFxuXFxuLyoqXFxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqL1xcbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcXG4gIHRoaXMuX19kYXRhX18gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkobnVsbCkgOiB7fTtcXG4gIHRoaXMuc2l6ZSA9IDA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc01hc2tlZF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU291cmNlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUzKTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXFxuICovXFxudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXFxcXFxeJC4qKz8oKVtcXFxcXXt9fF0vZztcXG5cXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXFxudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxcXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXFxcXSQvO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xcbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXFxcXFwkJicpXFxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXFxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcXG4pO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc01hc2tlZF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciBwYXR0ZXJuID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcXG4gIHJldHVybiBwYXR0ZXJuLnRlc3QoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJc05hdGl2ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3JlSnNEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMyk7XFxuXFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcXG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29yZUpzRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ua2V5cyAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ua2V5cy5JRV9QUk9UTyB8fCAnJyk7XFxuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XFxufSgpKTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XFxuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc01hc2tlZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cXG52YXIgY29yZUpzRGF0YSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXVsnX19jb3JlLWpzX3NoYXJlZF9fJ107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY29yZUpzRGF0YSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTA0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XFxuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0VmFsdWUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBIYXNoXFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcXG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hEZWxldGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xcbiAgaWYgKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSB7XFxuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XFxuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xcbiAgfVxcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzaEdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTA3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKlxcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgc2V0XFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XFxuICBkYXRhW2tleV0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gW107XFxuICB0aGlzLnNpemUgPSAwO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NvY0luZGV4T2ZfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XFxuXFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgaWYgKGluZGV4IDwgMCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xcbiAgICBkYXRhLnBvcCgpO1xcbiAgfSBlbHNlIHtcXG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xcbiAgfVxcbiAgLS10aGlzLnNpemU7XFxuICByZXR1cm4gdHJ1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobGlzdENhY2hlRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGdldFxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKipcXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgaWYgKGluZGV4IDwgMCkge1xcbiAgICArK3RoaXMuc2l6ZTtcXG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XFxuICB9IGVsc2Uge1xcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xcbiAgfVxcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGxpc3RDYWNoZVNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcXG5cXG5cXG4vKipcXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBkZWxldGVcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XFxuICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcXG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXFxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0tleWFibGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgZ2V0XFxuICogQG1lbWJlck9mIE1hcENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIGtleSkuZ2V0KGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlR2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBoYXNcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KS5oYXMoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwQ2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xcbiAgdmFyIGRhdGEgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBrZXkpLFxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XFxuXFxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcXG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlU2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlNYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xcblxcblxcblxcblxcblxcbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xcbnZhciBJTkZJTklUWSA9IDEgLyAwO1xcblxcbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xcbnZhciBzeW1ib2xQcm90byA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ucHJvdG90eXBlIDogdW5kZWZpbmVkLFxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XFxuICB9XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xcbiAgfVxcbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcXG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21lcmdlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X191dGlsX2dldERpc3BsYXlOYW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2V2ZW50c19zaWxlbmNlRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19ldmVudHNfc2lsZW5jZUV2ZW50c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19hc3luY1ZhbGlkYXRpb25fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fZGVmYXVsdFNob3VsZFZhbGlkYXRlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fZ2VuZXJhdGVWYWxpZGF0b3JfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjI1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fc2VsZWN0b3JzX2lzVmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpO1xcblxcblxcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcXFwiZnVuY3Rpb25cXFwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFxcXCJzeW1ib2xcXFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcXFwiZnVuY3Rpb25cXFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFxcXCJzeW1ib2xcXFwiIDogdHlwZW9mIG9iajsgfTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciBpc0NsYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24gaXNDbGFzc0NvbXBvbmVudChDb21wb25lbnQpIHtcXG4gIHJldHVybiBCb29sZWFuKENvbXBvbmVudCAmJiBDb21wb25lbnQucHJvdG90eXBlICYmIF90eXBlb2YoQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KSA9PT0gJ29iamVjdCcpO1xcbn07XFxuXFxuLy8gZXh0cmFjdCBmaWVsZC1zcGVjaWZpYyBhY3Rpb25zXFxuXFxudmFyIGFycmF5SW5zZXJ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5SW5zZXJ0XFxcIl0sXFxuICAgIGFycmF5TW92ZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheU1vdmVcXFwiXSxcXG4gICAgYXJyYXlQb3AgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlQb3BcXFwiXSxcXG4gICAgYXJyYXlQdXNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5UHVzaFxcXCJdLFxcbiAgICBhcnJheVJlbW92ZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVJlbW92ZVxcXCJdLFxcbiAgICBhcnJheVJlbW92ZUFsbCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVJlbW92ZUFsbFxcXCJdLFxcbiAgICBhcnJheVNoaWZ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U2hpZnRcXFwiXSxcXG4gICAgYXJyYXlTcGxpY2UgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlTcGxpY2VcXFwiXSxcXG4gICAgYXJyYXlTd2FwID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U3dhcFxcXCJdLFxcbiAgICBhcnJheVVuc2hpZnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlVbnNoaWZ0XFxcIl0sXFxuICAgIGJsdXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYmx1clxcXCJdLFxcbiAgICBjaGFuZ2UgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiY2hhbmdlXFxcIl0sXFxuICAgIGZvY3VzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImZvY3VzXFxcIl0sXFxuICAgIGZvcm1BY3Rpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fLCBbJ2FycmF5SW5zZXJ0JywgJ2FycmF5TW92ZScsICdhcnJheVBvcCcsICdhcnJheVB1c2gnLCAnYXJyYXlSZW1vdmUnLCAnYXJyYXlSZW1vdmVBbGwnLCAnYXJyYXlTaGlmdCcsICdhcnJheVNwbGljZScsICdhcnJheVN3YXAnLCAnYXJyYXlVbnNoaWZ0JywgJ2JsdXInLCAnY2hhbmdlJywgJ2ZvY3VzJ10pO1xcblxcbnZhciBhcnJheUFjdGlvbnMgPSB7XFxuICBhcnJheUluc2VydDogYXJyYXlJbnNlcnQsXFxuICBhcnJheU1vdmU6IGFycmF5TW92ZSxcXG4gIGFycmF5UG9wOiBhcnJheVBvcCxcXG4gIGFycmF5UHVzaDogYXJyYXlQdXNoLFxcbiAgYXJyYXlSZW1vdmU6IGFycmF5UmVtb3ZlLFxcbiAgYXJyYXlSZW1vdmVBbGw6IGFycmF5UmVtb3ZlQWxsLFxcbiAgYXJyYXlTaGlmdDogYXJyYXlTaGlmdCxcXG4gIGFycmF5U3BsaWNlOiBhcnJheVNwbGljZSxcXG4gIGFycmF5U3dhcDogYXJyYXlTd2FwLFxcbiAgYXJyYXlVbnNoaWZ0OiBhcnJheVVuc2hpZnRcXG59O1xcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShPYmplY3Qua2V5cyhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfXykpLCBbJ2FycmF5JywgJ2FzeW5jRXJyb3JzJywgJ2luaXRpYWxpemVkJywgJ2luaXRpYWxWYWx1ZXMnLCAnc3luY0Vycm9ycycsICdzeW5jV2FybmluZ3MnLCAndmFsdWVzJywgJ3JlZ2lzdGVyZWRGaWVsZHMnXSk7XFxuXFxudmFyIGNoZWNrU3VibWl0ID0gZnVuY3Rpb24gY2hlY2tTdWJtaXQoc3VibWl0KSB7XFxuICBpZiAoIXN1Ym1pdCB8fCB0eXBlb2Ygc3VibWl0ICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgZWl0aGVyIHBhc3MgaGFuZGxlU3VibWl0KCkgYW4gb25TdWJtaXQgZnVuY3Rpb24gb3IgcGFzcyBvblN1Ym1pdCBhcyBhIHByb3AnKTtcXG4gIH1cXG4gIHJldHVybiBzdWJtaXQ7XFxufTtcXG5cXG4vKipcXG4gKiBUaGUgZGVjb3JhdG9yIHRoYXQgaXMgdGhlIG1haW4gQVBJIHRvIHJlZHV4LWZvcm1cXG4gKi9cXG52YXIgY3JlYXRlUmVkdXhGb3JtID0gZnVuY3Rpb24gY3JlYXRlUmVkdXhGb3JtKHN0cnVjdHVyZSkge1xcbiAgdmFyIGRlZXBFcXVhbCA9IHN0cnVjdHVyZS5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBzdHJ1Y3R1cmUuZW1wdHksXFxuICAgICAgZ2V0SW4gPSBzdHJ1Y3R1cmUuZ2V0SW4sXFxuICAgICAgc2V0SW4gPSBzdHJ1Y3R1cmUuc2V0SW4sXFxuICAgICAga2V5cyA9IHN0cnVjdHVyZS5rZXlzLFxcbiAgICAgIGZyb21KUyA9IHN0cnVjdHVyZS5mcm9tSlM7XFxuXFxuICB2YXIgaXNWYWxpZCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHJldHVybiBmdW5jdGlvbiAoaW5pdGlhbENvbmZpZykge1xcbiAgICB2YXIgY29uZmlnID0gX2V4dGVuZHMoe1xcbiAgICAgIHRvdWNoT25CbHVyOiB0cnVlLFxcbiAgICAgIHRvdWNoT25DaGFuZ2U6IGZhbHNlLFxcbiAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IGZhbHNlLFxcbiAgICAgIGRlc3Ryb3lPblVubW91bnQ6IHRydWUsXFxuICAgICAgc2hvdWxkQXN5bmNWYWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgICAgc2hvdWxkVmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX2RlZmF1bHRTaG91bGRWYWxpZGF0ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgICBlbmFibGVSZWluaXRpYWxpemU6IGZhbHNlLFxcbiAgICAgIGtlZXBEaXJ0eU9uUmVpbml0aWFsaXplOiBmYWxzZSxcXG4gICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICAgIH0sXFxuICAgICAgcHVyZTogdHJ1ZSxcXG4gICAgICBmb3JjZVVucmVnaXN0ZXJPblVubW91bnQ6IGZhbHNlXFxuICAgIH0sIGluaXRpYWxDb25maWcpO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gKFdyYXBwZWRDb21wb25lbnQpIHtcXG4gICAgICB2YXIgRm9ybSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgICAgICBfaW5oZXJpdHMoRm9ybSwgX0NvbXBvbmVudCk7XFxuXFxuICAgICAgICBmdW5jdGlvbiBGb3JtKHByb3BzKSB7XFxuICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtKTtcXG5cXG4gICAgICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZvcm0uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xcblxcbiAgICAgICAgICBfdGhpcy5zdWJtaXQgPSBfdGhpcy5zdWJtaXQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnJlc2V0ID0gX3RoaXMucmVzZXQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLmFzeW5jVmFsaWRhdGUgPSBfdGhpcy5hc3luY1ZhbGlkYXRlLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5nZXRWYWx1ZXMgPSBfdGhpcy5nZXRWYWx1ZXMuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnJlZ2lzdGVyID0gX3RoaXMucmVnaXN0ZXIuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnVucmVnaXN0ZXIgPSBfdGhpcy51bnJlZ2lzdGVyLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5zdWJtaXRDb21wbGV0ZWQgPSBfdGhpcy5zdWJtaXRDb21wbGV0ZWQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnN1Ym1pdEZhaWxlZCA9IF90aGlzLnN1Ym1pdEZhaWxlZC5iaW5kKF90aGlzKTtcXG4gICAgICAgICAgX3RoaXMuZmllbGRWYWxpZGF0b3JzID0ge307XFxuICAgICAgICAgIF90aGlzLmxhc3RGaWVsZFZhbGlkYXRvcktleXMgPSBbXTtcXG4gICAgICAgICAgX3RoaXMuZmllbGRXYXJuZXJzID0ge307XFxuICAgICAgICAgIF90aGlzLmxhc3RGaWVsZFdhcm5lcktleXMgPSBbXTtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgX2NyZWF0ZUNsYXNzKEZvcm0sIFt7XFxuICAgICAgICAgIGtleTogJ2dldENoaWxkQ29udGV4dCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgIF9yZWR1eEZvcm06IF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCB7XFxuICAgICAgICAgICAgICAgIGdldEZvcm1TdGF0ZTogZnVuY3Rpb24gZ2V0Rm9ybVN0YXRlKHN0YXRlKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEluKF90aGlzMi5wcm9wcy5nZXRGb3JtU3RhdGUoc3RhdGUpLCBfdGhpczIucHJvcHMuZm9ybSk7XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGU6IHRoaXMuYXN5bmNWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWVzOiB0aGlzLmdldFZhbHVlcyxcXG4gICAgICAgICAgICAgICAgc2VjdGlvblByZWZpeDogdW5kZWZpbmVkLFxcbiAgICAgICAgICAgICAgICByZWdpc3RlcjogdGhpcy5yZWdpc3RlcixcXG4gICAgICAgICAgICAgICAgdW5yZWdpc3RlcjogdGhpcy51bnJlZ2lzdGVyLFxcbiAgICAgICAgICAgICAgICByZWdpc3RlcklubmVyT25TdWJtaXQ6IGZ1bmN0aW9uIHJlZ2lzdGVySW5uZXJPblN1Ym1pdChpbm5lck9uU3VibWl0KSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5pbm5lck9uU3VibWl0ID0gaW5uZXJPblN1Ym1pdDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2luaXRJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0SWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIGVuYWJsZVJlaW5pdGlhbGl6ZSA9IHRoaXMucHJvcHMuZW5hYmxlUmVpbml0aWFsaXplO1xcblxcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICAgIGlmICgoZW5hYmxlUmVpbml0aWFsaXplIHx8ICFuZXh0UHJvcHMuaW5pdGlhbGl6ZWQpICYmICFkZWVwRXF1YWwodGhpcy5wcm9wcy5pbml0aWFsVmFsdWVzLCBuZXh0UHJvcHMuaW5pdGlhbFZhbHVlcykpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGtlZXBEaXJ0eSA9IG5leHRQcm9wcy5pbml0aWFsaXplZCAmJiB0aGlzLnByb3BzLmtlZXBEaXJ0eU9uUmVpbml0aWFsaXplO1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmluaXRpYWxpemUobmV4dFByb3BzLmluaXRpYWxWYWx1ZXMsIGtlZXBEaXJ0eSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMgJiYgKCF0aGlzLnByb3BzLmluaXRpYWxpemVkIHx8IGVuYWJsZVJlaW5pdGlhbGl6ZSkpIHtcXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuaW5pdGlhbGl6ZSh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMsIHRoaXMucHJvcHMua2VlcERpcnR5T25SZWluaXRpYWxpemUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd1cGRhdGVTeW5jRXJyb3JzSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlU3luY0Vycm9yc0lmTmVlZGVkKG5leHRTeW5jRXJyb3JzLCBuZXh0RXJyb3IpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBfcHJvcHMuZXJyb3IsXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHMuc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyA9IF9wcm9wcy51cGRhdGVTeW5jRXJyb3JzO1xcblxcbiAgICAgICAgICAgIHZhciBub0Vycm9ycyA9ICghc3luY0Vycm9ycyB8fCAhT2JqZWN0LmtleXMoc3luY0Vycm9ycykubGVuZ3RoKSAmJiAhZXJyb3I7XFxuICAgICAgICAgICAgdmFyIG5leHROb0Vycm9ycyA9ICghbmV4dFN5bmNFcnJvcnMgfHwgIU9iamVjdC5rZXlzKG5leHRTeW5jRXJyb3JzKS5sZW5ndGgpICYmICFuZXh0RXJyb3I7XFxuICAgICAgICAgICAgaWYgKCEobm9FcnJvcnMgJiYgbmV4dE5vRXJyb3JzKSAmJiAoIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwoc3luY0Vycm9ycywgbmV4dFN5bmNFcnJvcnMpIHx8ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKGVycm9yLCBuZXh0RXJyb3IpKSkge1xcbiAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyhuZXh0U3luY0Vycm9ycywgbmV4dEVycm9yKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY2xlYXJTdWJtaXRQcm9taXNlSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXJTdWJtaXRQcm9taXNlSWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSB0aGlzLnByb3BzLnN1Ym1pdHRpbmc7XFxuXFxuICAgICAgICAgICAgaWYgKHRoaXMuc3VibWl0UHJvbWlzZSAmJiBzdWJtaXR0aW5nICYmICFuZXh0UHJvcHMuc3VibWl0dGluZykge1xcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3VibWl0UHJvbWlzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0SWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0SWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBjbGVhclN1Ym1pdCA9IF9wcm9wczIuY2xlYXJTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHRyaWdnZXJTdWJtaXQgPSBfcHJvcHMyLnRyaWdnZXJTdWJtaXQ7XFxuXFxuICAgICAgICAgICAgaWYgKCF0cmlnZ2VyU3VibWl0ICYmIG5leHRQcm9wcy50cmlnZ2VyU3VibWl0KSB7XFxuICAgICAgICAgICAgICBjbGVhclN1Ym1pdCgpO1xcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAndmFsaWRhdGVJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZUlmTmVlZGVkKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgc2hvdWxkVmFsaWRhdGUgPSBfcHJvcHMzLnNob3VsZFZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZSA9IF9wcm9wczMudmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHZhbHVlcyA9IF9wcm9wczMudmFsdWVzO1xcblxcbiAgICAgICAgICAgIHZhciBmaWVsZExldmVsVmFsaWRhdGUgPSB0aGlzLmdlbmVyYXRlVmFsaWRhdG9yKCk7XFxuICAgICAgICAgICAgaWYgKHZhbGlkYXRlIHx8IGZpZWxkTGV2ZWxWYWxpZGF0ZSkge1xcbiAgICAgICAgICAgICAgdmFyIGluaXRpYWxSZW5kZXIgPSBuZXh0UHJvcHMgPT09IHVuZGVmaW5lZDtcXG4gICAgICAgICAgICAgIHZhciBmaWVsZFZhbGlkYXRvcktleXMgPSBPYmplY3Qua2V5cyh0aGlzLmdldFZhbGlkYXRvcnMoKSk7XFxuICAgICAgICAgICAgICB2YXIgc2hvdWxkVmFsaWRhdGVSZXN1bHQgPSBzaG91bGRWYWxpZGF0ZSh7XFxuICAgICAgICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHM6IG5leHRQcm9wcyxcXG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxSZW5kZXI6IGluaXRpYWxSZW5kZXIsXFxuICAgICAgICAgICAgICAgIGxhc3RGaWVsZFZhbGlkYXRvcktleXM6IHRoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyxcXG4gICAgICAgICAgICAgICAgZmllbGRWYWxpZGF0b3JLZXlzOiBmaWVsZFZhbGlkYXRvcktleXMsXFxuICAgICAgICAgICAgICAgIHN0cnVjdHVyZTogc3RydWN0dXJlXFxuICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgIGlmIChzaG91bGRWYWxpZGF0ZVJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHNUb1ZhbGlkYXRlID0gaW5pdGlhbFJlbmRlciA/IHRoaXMucHJvcHMgOiBuZXh0UHJvcHM7XFxuXFxuICAgICAgICAgICAgICAgIHZhciBfbWVyZ2UyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWVyZ2VfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbGlkYXRlID8gdmFsaWRhdGUocHJvcHNUb1ZhbGlkYXRlLnZhbHVlcywgcHJvcHNUb1ZhbGlkYXRlKSB8fCB7fSA6IHt9LCBmaWVsZExldmVsVmFsaWRhdGUgPyBmaWVsZExldmVsVmFsaWRhdGUocHJvcHNUb1ZhbGlkYXRlLnZhbHVlcywgcHJvcHNUb1ZhbGlkYXRlKSB8fCB7fSA6IHt9KSxcXG4gICAgICAgICAgICAgICAgICAgIF9lcnJvciA9IF9tZXJnZTIuX2Vycm9yLFxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN5bmNFcnJvcnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX21lcmdlMiwgWydfZXJyb3InXSk7XFxuXFxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyA9IGZpZWxkVmFsaWRhdG9yS2V5cztcXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTeW5jRXJyb3JzSWZOZWVkZWQobmV4dFN5bmNFcnJvcnMsIF9lcnJvcik7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3VwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkKG5leHRTeW5jV2FybmluZ3MsIG5leHRXYXJuaW5nKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczQgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICB3YXJuaW5nID0gX3Byb3BzNC53YXJuaW5nLFxcbiAgICAgICAgICAgICAgICBzeW5jV2FybmluZ3MgPSBfcHJvcHM0LnN5bmNXYXJuaW5ncyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzID0gX3Byb3BzNC51cGRhdGVTeW5jV2FybmluZ3M7XFxuXFxuICAgICAgICAgICAgdmFyIG5vV2FybmluZ3MgPSAoIXN5bmNXYXJuaW5ncyB8fCAhT2JqZWN0LmtleXMoc3luY1dhcm5pbmdzKS5sZW5ndGgpICYmICF3YXJuaW5nO1xcbiAgICAgICAgICAgIHZhciBuZXh0Tm9XYXJuaW5ncyA9ICghbmV4dFN5bmNXYXJuaW5ncyB8fCAhT2JqZWN0LmtleXMobmV4dFN5bmNXYXJuaW5ncykubGVuZ3RoKSAmJiAhbmV4dFdhcm5pbmc7XFxuICAgICAgICAgICAgaWYgKCEobm9XYXJuaW5ncyAmJiBuZXh0Tm9XYXJuaW5ncykgJiYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKHN5bmNXYXJuaW5ncywgbmV4dFN5bmNXYXJuaW5ncykgfHwgIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwod2FybmluZywgbmV4dFdhcm5pbmcpKSkge1xcbiAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzKG5leHRTeW5jV2FybmluZ3MsIG5leHRXYXJuaW5nKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnd2FybklmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHdhcm5JZk5lZWRlZChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzNSA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzNS5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgd2FybiA9IF9wcm9wczUud2FybixcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzNS52YWx1ZXM7XFxuXFxuICAgICAgICAgICAgdmFyIGZpZWxkTGV2ZWxXYXJuID0gdGhpcy5nZW5lcmF0ZVdhcm5lcigpO1xcbiAgICAgICAgICAgIGlmICh3YXJuIHx8IGZpZWxkTGV2ZWxXYXJuKSB7XFxuICAgICAgICAgICAgICB2YXIgaW5pdGlhbFJlbmRlciA9IG5leHRQcm9wcyA9PT0gdW5kZWZpbmVkO1xcbiAgICAgICAgICAgICAgdmFyIGZpZWxkV2FybmVyS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZ2V0V2FybmVycygpKTtcXG4gICAgICAgICAgICAgIHZhciBzaG91bGRXYXJuUmVzdWx0ID0gc2hvdWxkVmFsaWRhdGUoe1xcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzOiBuZXh0UHJvcHMsXFxuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsUmVuZGVyOiBpbml0aWFsUmVuZGVyLFxcbiAgICAgICAgICAgICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzOiB0aGlzLmxhc3RGaWVsZFdhcm5lcktleXMsXFxuICAgICAgICAgICAgICAgIGZpZWxkVmFsaWRhdG9yS2V5czogZmllbGRXYXJuZXJLZXlzLFxcbiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IHN0cnVjdHVyZVxcbiAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICBpZiAoc2hvdWxkV2FyblJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHNUb1dhcm4gPSBpbml0aWFsUmVuZGVyID8gdGhpcy5wcm9wcyA6IG5leHRQcm9wcztcXG5cXG4gICAgICAgICAgICAgICAgdmFyIF9tZXJnZTMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19tZXJnZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybiA/IHdhcm4ocHJvcHNUb1dhcm4udmFsdWVzLCBwcm9wc1RvV2FybikgOiB7fSwgZmllbGRMZXZlbFdhcm4gPyBmaWVsZExldmVsV2Fybihwcm9wc1RvV2Fybi52YWx1ZXMsIHByb3BzVG9XYXJuKSA6IHt9KSxcXG4gICAgICAgICAgICAgICAgICAgIF93YXJuaW5nID0gX21lcmdlMy5fd2FybmluZyxcXG4gICAgICAgICAgICAgICAgICAgIG5leHRTeW5jV2FybmluZ3MgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX21lcmdlMywgWydfd2FybmluZyddKTtcXG5cXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RmllbGRXYXJuZXJLZXlzID0gZmllbGRXYXJuZXJLZXlzO1xcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkKG5leHRTeW5jV2FybmluZ3MsIF93YXJuaW5nKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgICAgICB0aGlzLmluaXRJZk5lZWRlZCgpO1xcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJZk5lZWRlZCgpO1xcbiAgICAgICAgICAgIHRoaXMud2FybklmTmVlZGVkKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHRoaXMuaW5pdElmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUlmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy53YXJuSWZOZWVkZWQobmV4dFByb3BzKTtcXG4gICAgICAgICAgICB0aGlzLmNsZWFyU3VibWl0UHJvbWlzZUlmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy5zdWJtaXRJZk5lZWRlZChuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMub25DaGFuZ2UpIHtcXG4gICAgICAgICAgICAgIGlmICghZGVlcEVxdWFsKG5leHRQcm9wcy52YWx1ZXMsIHRoaXMucHJvcHMudmFsdWVzKSkge1xcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHMub25DaGFuZ2UobmV4dFByb3BzLnZhbHVlcywgbmV4dFByb3BzLmRpc3BhdGNoLCBuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIGlmICghdGhpcy5wcm9wcy5wdXJlKSByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobmV4dFByb3BzKS5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgICAgICAvLyB1c2VmdWwgdG8gZGVidWcgcmVyZW5kZXJzXFxuICAgICAgICAgICAgICAvLyBpZiAoIXBsYWluLmRlZXBFcXVhbCh0aGlzLnByb3BzWyBwcm9wIF0sIG5leHRQcm9wc1sgcHJvcCBdKSkge1xcbiAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmluZm8ocHJvcCwgJ2NoYW5nZWQnLCB0aGlzLnByb3BzWyBwcm9wIF0sICc9PT4nLCBuZXh0UHJvcHNbIHByb3AgXSlcXG4gICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgIHJldHVybiAhfnByb3BzVG9Ob3RVcGRhdGVGb3IuaW5kZXhPZihwcm9wKSAmJiAhZGVlcEVxdWFsKF90aGlzMy5wcm9wc1twcm9wXSwgbmV4dFByb3BzW3Byb3BdKTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzNiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3lPblVubW91bnQgPSBfcHJvcHM2LmRlc3Ryb3lPblVubW91bnQsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfcHJvcHM2LmRlc3Ryb3k7XFxuXFxuICAgICAgICAgICAgaWYgKGRlc3Ryb3lPblVubW91bnQpIHtcXG4gICAgICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcXG4gICAgICAgICAgICAgIGRlc3Ryb3koKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2V0VmFsdWVzJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlcygpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZXM7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnaXNWYWxpZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkKCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLnZhbGlkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2lzUHJpc3RpbmUnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNQcmlzdGluZSgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZWdpc3RlcicsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWdpc3RlcihuYW1lLCB0eXBlLCBnZXRWYWxpZGF0b3IsIGdldFdhcm5lcikge1xcbiAgICAgICAgICAgIHRoaXMucHJvcHMucmVnaXN0ZXJGaWVsZChuYW1lLCB0eXBlKTtcXG4gICAgICAgICAgICBpZiAoZ2V0VmFsaWRhdG9yKSB7XFxuICAgICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdG9yc1tuYW1lXSA9IGdldFZhbGlkYXRvcjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGdldFdhcm5lcikge1xcbiAgICAgICAgICAgICAgdGhpcy5maWVsZFdhcm5lcnNbbmFtZV0gPSBnZXRXYXJuZXI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3VucmVnaXN0ZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdW5yZWdpc3RlcihuYW1lKSB7XFxuICAgICAgICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVzdHJveU9uVW5tb3VudCB8fCB0aGlzLnByb3BzLmZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCkge1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnVucmVnaXN0ZXJGaWVsZChuYW1lKTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZmllbGRWYWxpZGF0b3JzW25hbWVdO1xcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5maWVsZFdhcm5lcnNbbmFtZV07XFxuICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnVucmVnaXN0ZXJGaWVsZChuYW1lLCBmYWxzZSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldEZpZWxkTGlzdCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGaWVsZExpc3Qob3B0aW9ucykge1xcbiAgICAgICAgICAgIHZhciByZWdpc3RlcmVkRmllbGRzID0gdGhpcy5wcm9wcy5yZWdpc3RlcmVkRmllbGRzO1xcbiAgICAgICAgICAgIHZhciBsaXN0ID0gW107XFxuICAgICAgICAgICAgaWYgKCFyZWdpc3RlcmVkRmllbGRzKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gbGlzdDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGtleVNlcSA9IGtleXMocmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5leGNsdWRlRmllbGRBcnJheSkge1xcbiAgICAgICAgICAgICAga2V5U2VxID0ga2V5U2VxLmZpbHRlcihmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXS50eXBlJykgIT09ICdGaWVsZEFycmF5JztcXG4gICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZnJvbUpTKGtleVNlcS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XFxuICAgICAgICAgICAgICBhY2MucHVzaChrZXkpO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcXG4gICAgICAgICAgICB9LCBsaXN0KSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2V0VmFsaWRhdG9ycycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWxpZGF0b3JzKCkge1xcbiAgICAgICAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIHZhciB2YWxpZGF0b3JzID0ge307XFxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZFZhbGlkYXRvcnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICAgIHZhciB2YWxpZGF0b3IgPSBfdGhpczQuZmllbGRWYWxpZGF0b3JzW25hbWVdKCk7XFxuICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKSB7XFxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnNbbmFtZV0gPSB2YWxpZGF0b3I7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRvcnM7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2VuZXJhdGVWYWxpZGF0b3InLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2VuZXJhdGVWYWxpZGF0b3IoKSB7XFxuICAgICAgICAgICAgdmFyIHZhbGlkYXRvcnMgPSB0aGlzLmdldFZhbGlkYXRvcnMoKTtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModmFsaWRhdG9ycykubGVuZ3RoID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX2dlbmVyYXRlVmFsaWRhdG9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWxpZGF0b3JzLCBzdHJ1Y3R1cmUpIDogdW5kZWZpbmVkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldFdhcm5lcnMnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0V2FybmVycygpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM1ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgd2FybmVycyA9IHt9O1xcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGRXYXJuZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgICAgICB2YXIgd2FybmVyID0gX3RoaXM1LmZpZWxkV2FybmVyc1tuYW1lXSgpO1xcbiAgICAgICAgICAgICAgaWYgKHdhcm5lcikge1xcbiAgICAgICAgICAgICAgICB3YXJuZXJzW25hbWVdID0gd2FybmVyO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiB3YXJuZXJzO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dlbmVyYXRlV2FybmVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdlbmVyYXRlV2FybmVyKCkge1xcbiAgICAgICAgICAgIHZhciB3YXJuZXJzID0gdGhpcy5nZXRXYXJuZXJzKCk7XFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHdhcm5lcnMpLmxlbmd0aCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19nZW5lcmF0ZVZhbGlkYXRvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybmVycywgc3RydWN0dXJlKSA6IHVuZGVmaW5lZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdhc3luY1ZhbGlkYXRlJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzeW5jVmFsaWRhdGUobmFtZSwgdmFsdWUpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM2ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgX3Byb3BzNyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGFzeW5jQmx1ckZpZWxkcyA9IF9wcm9wczcuYXN5bmNCbHVyRmllbGRzLFxcbiAgICAgICAgICAgICAgICBhc3luY0Vycm9ycyA9IF9wcm9wczcuYXN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGUgPSBfcHJvcHM3LmFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzNy5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBfcHJvcHM3LmluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICBwcmlzdGluZSA9IF9wcm9wczcucHJpc3RpbmUsXFxuICAgICAgICAgICAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGUgPSBfcHJvcHM3LnNob3VsZEFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHN0YXJ0QXN5bmNWYWxpZGF0aW9uID0gX3Byb3BzNy5zdGFydEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3RvcEFzeW5jVmFsaWRhdGlvbiA9IF9wcm9wczcuc3RvcEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3luY0Vycm9ycyA9IF9wcm9wczcuc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzNy52YWx1ZXM7XFxuXFxuICAgICAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSAhbmFtZTtcXG4gICAgICAgICAgICBpZiAoYXN5bmNWYWxpZGF0ZSkge1xcbiAgICAgICAgICAgICAgdmFyIHZhbHVlc1RvVmFsaWRhdGUgPSBzdWJtaXR0aW5nID8gdmFsdWVzIDogc2V0SW4odmFsdWVzLCBuYW1lLCB2YWx1ZSk7XFxuICAgICAgICAgICAgICB2YXIgc3luY1ZhbGlkYXRpb25QYXNzZXMgPSBzdWJtaXR0aW5nIHx8ICFnZXRJbihzeW5jRXJyb3JzLCBuYW1lKTtcXG4gICAgICAgICAgICAgIHZhciBpc0JsdXJyZWRGaWVsZCA9ICFzdWJtaXR0aW5nICYmICghYXN5bmNCbHVyRmllbGRzIHx8IH5hc3luY0JsdXJGaWVsZHMuaW5kZXhPZihuYW1lLnJlcGxhY2UoL1xcXFxbWzAtOV0rXFxcXF0vZywgJ1tdJykpKTtcXG4gICAgICAgICAgICAgIGlmICgoaXNCbHVycmVkRmllbGQgfHwgc3VibWl0dGluZykgJiYgc2hvdWxkQXN5bmNWYWxpZGF0ZSh7XFxuICAgICAgICAgICAgICAgIGFzeW5jRXJyb3JzOiBhc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICB0cmlnZ2VyOiBzdWJtaXR0aW5nID8gJ3N1Ym1pdCcgOiAnYmx1cicsXFxuICAgICAgICAgICAgICAgIGJsdXJyZWRGaWVsZDogbmFtZSxcXG4gICAgICAgICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICAgICAgICBzeW5jVmFsaWRhdGlvblBhc3Nlczogc3luY1ZhbGlkYXRpb25QYXNzZXNcXG4gICAgICAgICAgICAgIH0pKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fYXN5bmNWYWxpZGF0aW9uX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jVmFsaWRhdGUodmFsdWVzVG9WYWxpZGF0ZSwgZGlzcGF0Y2gsIF90aGlzNi5wcm9wcywgbmFtZSk7XFxuICAgICAgICAgICAgICAgIH0sIHN0YXJ0QXN5bmNWYWxpZGF0aW9uLCBzdG9wQXN5bmNWYWxpZGF0aW9uLCBuYW1lKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0Q29tcGxldGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdENvbXBsZXRlZChyZXN1bHQpIHtcXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5zdWJtaXRQcm9taXNlO1xcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0RmFpbGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdEZhaWxlZChlcnJvcikge1xcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN1Ym1pdFByb21pc2U7XFxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnbGlzdGVuVG9TdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbGlzdGVuVG9TdWJtaXQocHJvbWlzZSkge1xcbiAgICAgICAgICAgIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2lzX3Byb21pc2VfX19kZWZhdWx0KCkocHJvbWlzZSkpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLnN1Ym1pdFByb21pc2UgPSBwcm9taXNlO1xcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4odGhpcy5zdWJtaXRDb21wbGV0ZWQsIHRoaXMuc3VibWl0RmFpbGVkKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdzdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0KHN1Ym1pdE9yRXZlbnQpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM3ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgX3Byb3BzOCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIG9uU3VibWl0ID0gX3Byb3BzOC5vblN1Ym1pdCxcXG4gICAgICAgICAgICAgICAgYmx1ciA9IF9wcm9wczguYmx1cixcXG4gICAgICAgICAgICAgICAgY2hhbmdlID0gX3Byb3BzOC5jaGFuZ2UsXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzOC5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgdmFsaWRFeGNlcHRTdWJtaXQgPSBfcHJvcHM4LnZhbGlkRXhjZXB0U3VibWl0O1xcblxcblxcbiAgICAgICAgICAgIGlmICghc3VibWl0T3JFdmVudCB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fZXZlbnRzX3NpbGVuY2VFdmVudF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3VibWl0T3JFdmVudCkpIHtcXG4gICAgICAgICAgICAgIC8vIHN1Ym1pdE9yRXZlbnQgaXMgYW4gZXZlbnQ6IGZpcmUgc3VibWl0IGlmIG5vdCBhbHJlYWR5IHN1Ym1pdHRpbmdcXG4gICAgICAgICAgICAgIGlmICghdGhpcy5zdWJtaXRQcm9taXNlKSB7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlubmVyT25TdWJtaXQpIHtcXG4gICAgICAgICAgICAgICAgICAvLyB3aWxsIGNhbGwgXFxcInN1Ym1pdE9yRXZlbnQgaXMgdGhlIHN1Ym1pdCBmdW5jdGlvblxcXCIgYmxvY2sgYmVsb3dcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbm5lck9uU3VibWl0KCk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdGVuVG9TdWJtaXQoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjaGVja1N1Ym1pdChvblN1Ym1pdCksIF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpKSwgdmFsaWRFeGNlcHRTdWJtaXQsIHRoaXMuYXN5bmNWYWxpZGF0ZSwgdGhpcy5nZXRGaWVsZExpc3QoeyBleGNsdWRlRmllbGRBcnJheTogdHJ1ZSB9KSkpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgIC8vIHN1Ym1pdE9yRXZlbnQgaXMgdGhlIHN1Ym1pdCBmdW5jdGlvbjogcmV0dXJuIGRlZmVycmVkIHN1Ym1pdCB0aHVua1xcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19ldmVudHNfc2lsZW5jZUV2ZW50c19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gIV90aGlzNy5zdWJtaXRQcm9taXNlICYmIF90aGlzNy5saXN0ZW5Ub1N1Ym1pdChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19oYW5kbGVTdWJtaXRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGNoZWNrU3VibWl0KHN1Ym1pdE9yRXZlbnQpLCBfZXh0ZW5kcyh7fSwgX3RoaXM3LnByb3BzLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpKSwgdmFsaWRFeGNlcHRTdWJtaXQsIF90aGlzNy5hc3luY1ZhbGlkYXRlLCBfdGhpczcuZ2V0RmllbGRMaXN0KHsgZXhjbHVkZUZpZWxkQXJyYXk6IHRydWUgfSkpKTtcXG4gICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZXNldCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcXG4gICAgICAgICAgICB0aGlzLnByb3BzLnJlc2V0KCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgICAgICAvLyByZW1vdmUgc29tZSByZWR1eC1mb3JtIGNvbmZpZy1vbmx5IHByb3BzXFxuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cXG4gICAgICAgICAgICB2YXIgX3Byb3BzOSA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGFueVRvdWNoZWQgPSBfcHJvcHM5LmFueVRvdWNoZWQsXFxuICAgICAgICAgICAgICAgIGFycmF5SW5zZXJ0ID0gX3Byb3BzOS5hcnJheUluc2VydCxcXG4gICAgICAgICAgICAgICAgYXJyYXlNb3ZlID0gX3Byb3BzOS5hcnJheU1vdmUsXFxuICAgICAgICAgICAgICAgIGFycmF5UG9wID0gX3Byb3BzOS5hcnJheVBvcCxcXG4gICAgICAgICAgICAgICAgYXJyYXlQdXNoID0gX3Byb3BzOS5hcnJheVB1c2gsXFxuICAgICAgICAgICAgICAgIGFycmF5UmVtb3ZlID0gX3Byb3BzOS5hcnJheVJlbW92ZSxcXG4gICAgICAgICAgICAgICAgYXJyYXlSZW1vdmVBbGwgPSBfcHJvcHM5LmFycmF5UmVtb3ZlQWxsLFxcbiAgICAgICAgICAgICAgICBhcnJheVNoaWZ0ID0gX3Byb3BzOS5hcnJheVNoaWZ0LFxcbiAgICAgICAgICAgICAgICBhcnJheVNwbGljZSA9IF9wcm9wczkuYXJyYXlTcGxpY2UsXFxuICAgICAgICAgICAgICAgIGFycmF5U3dhcCA9IF9wcm9wczkuYXJyYXlTd2FwLFxcbiAgICAgICAgICAgICAgICBhcnJheVVuc2hpZnQgPSBfcHJvcHM5LmFycmF5VW5zaGlmdCxcXG4gICAgICAgICAgICAgICAgYXN5bmNFcnJvcnMgPSBfcHJvcHM5LmFzeW5jRXJyb3JzLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRlID0gX3Byb3BzOS5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRpbmcgPSBfcHJvcHM5LmFzeW5jVmFsaWRhdGluZyxcXG4gICAgICAgICAgICAgICAgYmx1ciA9IF9wcm9wczkuYmx1cixcXG4gICAgICAgICAgICAgICAgY2hhbmdlID0gX3Byb3BzOS5jaGFuZ2UsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfcHJvcHM5LmRlc3Ryb3ksXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3lPblVubW91bnQgPSBfcHJvcHM5LmRlc3Ryb3lPblVubW91bnQsXFxuICAgICAgICAgICAgICAgIGZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCA9IF9wcm9wczkuZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50LFxcbiAgICAgICAgICAgICAgICBkaXJ0eSA9IF9wcm9wczkuZGlydHksXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzOS5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgZW5hYmxlUmVpbml0aWFsaXplID0gX3Byb3BzOS5lbmFibGVSZWluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIGVycm9yID0gX3Byb3BzOS5lcnJvcixcXG4gICAgICAgICAgICAgICAgZm9jdXMgPSBfcHJvcHM5LmZvY3VzLFxcbiAgICAgICAgICAgICAgICBmb3JtID0gX3Byb3BzOS5mb3JtLFxcbiAgICAgICAgICAgICAgICBnZXRGb3JtU3RhdGUgPSBfcHJvcHM5LmdldEZvcm1TdGF0ZSxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSA9IF9wcm9wczkuaW5pdGlhbGl6ZSxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBfcHJvcHM5LmluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gX3Byb3BzOS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgICAgICAgICBpbnZhbGlkID0gX3Byb3BzOS5pbnZhbGlkLFxcbiAgICAgICAgICAgICAgICBrZWVwRGlydHlPblJlaW5pdGlhbGl6ZSA9IF9wcm9wczkua2VlcERpcnR5T25SZWluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIHByaXN0aW5lID0gX3Byb3BzOS5wcmlzdGluZSxcXG4gICAgICAgICAgICAgICAgcHJvcE5hbWVzcGFjZSA9IF9wcm9wczkucHJvcE5hbWVzcGFjZSxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJlZEZpZWxkcyA9IF9wcm9wczkucmVnaXN0ZXJlZEZpZWxkcyxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJGaWVsZCA9IF9wcm9wczkucmVnaXN0ZXJGaWVsZCxcXG4gICAgICAgICAgICAgICAgcmVzZXQgPSBfcHJvcHM5LnJlc2V0LFxcbiAgICAgICAgICAgICAgICBzZXRTdWJtaXRGYWlsZWQgPSBfcHJvcHM5LnNldFN1Ym1pdEZhaWxlZCxcXG4gICAgICAgICAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkID0gX3Byb3BzOS5zZXRTdWJtaXRTdWNjZWVkZWQsXFxuICAgICAgICAgICAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGUgPSBfcHJvcHM5LnNob3VsZEFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzOS5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM5LnN0YXJ0QXN5bmNWYWxpZGF0aW9uLFxcbiAgICAgICAgICAgICAgICBzdGFydFN1Ym1pdCA9IF9wcm9wczkuc3RhcnRTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM5LnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgICAgICAgICAgICAgIHN0b3BTdWJtaXQgPSBfcHJvcHM5LnN0b3BTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHN1Ym1pdHRpbmcgPSBfcHJvcHM5LnN1Ym1pdHRpbmcsXFxuICAgICAgICAgICAgICAgIHN1Ym1pdEZhaWxlZCA9IF9wcm9wczkuc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQgPSBfcHJvcHM5LnN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgICAgICAgdG91Y2ggPSBfcHJvcHM5LnRvdWNoLFxcbiAgICAgICAgICAgICAgICB0b3VjaE9uQmx1ciA9IF9wcm9wczkudG91Y2hPbkJsdXIsXFxuICAgICAgICAgICAgICAgIHRvdWNoT25DaGFuZ2UgPSBfcHJvcHM5LnRvdWNoT25DaGFuZ2UsXFxuICAgICAgICAgICAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgPSBfcHJvcHM5LnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHM5LnN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHN5bmNXYXJuaW5ncyA9IF9wcm9wczkuc3luY1dhcm5pbmdzLFxcbiAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyRmllbGQgPSBfcHJvcHM5LnVucmVnaXN0ZXJGaWVsZCxcXG4gICAgICAgICAgICAgICAgdW50b3VjaCA9IF9wcm9wczkudW50b3VjaCxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyA9IF9wcm9wczkudXBkYXRlU3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzID0gX3Byb3BzOS51cGRhdGVTeW5jV2FybmluZ3MsXFxuICAgICAgICAgICAgICAgIHZhbGlkID0gX3Byb3BzOS52YWxpZCxcXG4gICAgICAgICAgICAgICAgdmFsaWRFeGNlcHRTdWJtaXQgPSBfcHJvcHM5LnZhbGlkRXhjZXB0U3VibWl0LFxcbiAgICAgICAgICAgICAgICB2YWx1ZXMgPSBfcHJvcHM5LnZhbHVlcyxcXG4gICAgICAgICAgICAgICAgd2FybmluZyA9IF9wcm9wczkud2FybmluZyxcXG4gICAgICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHM5LCBbJ2FueVRvdWNoZWQnLCAnYXJyYXlJbnNlcnQnLCAnYXJyYXlNb3ZlJywgJ2FycmF5UG9wJywgJ2FycmF5UHVzaCcsICdhcnJheVJlbW92ZScsICdhcnJheVJlbW92ZUFsbCcsICdhcnJheVNoaWZ0JywgJ2FycmF5U3BsaWNlJywgJ2FycmF5U3dhcCcsICdhcnJheVVuc2hpZnQnLCAnYXN5bmNFcnJvcnMnLCAnYXN5bmNWYWxpZGF0ZScsICdhc3luY1ZhbGlkYXRpbmcnLCAnYmx1cicsICdjaGFuZ2UnLCAnZGVzdHJveScsICdkZXN0cm95T25Vbm1vdW50JywgJ2ZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCcsICdkaXJ0eScsICdkaXNwYXRjaCcsICdlbmFibGVSZWluaXRpYWxpemUnLCAnZXJyb3InLCAnZm9jdXMnLCAnZm9ybScsICdnZXRGb3JtU3RhdGUnLCAnaW5pdGlhbGl6ZScsICdpbml0aWFsaXplZCcsICdpbml0aWFsVmFsdWVzJywgJ2ludmFsaWQnLCAna2VlcERpcnR5T25SZWluaXRpYWxpemUnLCAncHJpc3RpbmUnLCAncHJvcE5hbWVzcGFjZScsICdyZWdpc3RlcmVkRmllbGRzJywgJ3JlZ2lzdGVyRmllbGQnLCAncmVzZXQnLCAnc2V0U3VibWl0RmFpbGVkJywgJ3NldFN1Ym1pdFN1Y2NlZWRlZCcsICdzaG91bGRBc3luY1ZhbGlkYXRlJywgJ3Nob3VsZFZhbGlkYXRlJywgJ3N0YXJ0QXN5bmNWYWxpZGF0aW9uJywgJ3N0YXJ0U3VibWl0JywgJ3N0b3BBc3luY1ZhbGlkYXRpb24nLCAnc3RvcFN1Ym1pdCcsICdzdWJtaXR0aW5nJywgJ3N1Ym1pdEZhaWxlZCcsICdzdWJtaXRTdWNjZWVkZWQnLCAndG91Y2gnLCAndG91Y2hPbkJsdXInLCAndG91Y2hPbkNoYW5nZScsICdwZXJzaXN0ZW50U3VibWl0RXJyb3JzJywgJ3N5bmNFcnJvcnMnLCAnc3luY1dhcm5pbmdzJywgJ3VucmVnaXN0ZXJGaWVsZCcsICd1bnRvdWNoJywgJ3VwZGF0ZVN5bmNFcnJvcnMnLCAndXBkYXRlU3luY1dhcm5pbmdzJywgJ3ZhbGlkJywgJ3ZhbGlkRXhjZXB0U3VibWl0JywgJ3ZhbHVlcycsICd3YXJuaW5nJ10pO1xcbiAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cXG5cXG5cXG4gICAgICAgICAgICB2YXIgcmVkdXhGb3JtUHJvcHMgPSBfZXh0ZW5kcyh7XFxuICAgICAgICAgICAgICBhbnlUb3VjaGVkOiBhbnlUb3VjaGVkLFxcbiAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0ZTogdGhpcy5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBhc3luY1ZhbGlkYXRpbmdcXG4gICAgICAgICAgICB9LCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpLCB7XFxuICAgICAgICAgICAgICBkZXN0cm95OiBkZXN0cm95LFxcbiAgICAgICAgICAgICAgZGlydHk6IGRpcnR5LFxcbiAgICAgICAgICAgICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgICAgICAgICAgZm9ybTogZm9ybSxcXG4gICAgICAgICAgICAgIGhhbmRsZVN1Ym1pdDogdGhpcy5zdWJtaXQsXFxuICAgICAgICAgICAgICBpbml0aWFsaXplOiBpbml0aWFsaXplLFxcbiAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlczogaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICAgIGludmFsaWQ6IGludmFsaWQsXFxuICAgICAgICAgICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgICAgICAgICByZXNldDogcmVzZXQsXFxuICAgICAgICAgICAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxcbiAgICAgICAgICAgICAgc3VibWl0RmFpbGVkOiBzdWJtaXRGYWlsZWQsXFxuICAgICAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgICAgIHRvdWNoOiB0b3VjaCxcXG4gICAgICAgICAgICAgIHVudG91Y2g6IHVudG91Y2gsXFxuICAgICAgICAgICAgICB2YWxpZDogdmFsaWQsXFxuICAgICAgICAgICAgICB3YXJuaW5nOiB3YXJuaW5nXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgdmFyIHByb3BzVG9QYXNzID0gX2V4dGVuZHMoe30sIHByb3BOYW1lc3BhY2UgPyBfZGVmaW5lUHJvcGVydHkoe30sIHByb3BOYW1lc3BhY2UsIHJlZHV4Rm9ybVByb3BzKSA6IHJlZHV4Rm9ybVByb3BzLCByZXN0KTtcXG4gICAgICAgICAgICBpZiAoaXNDbGFzc0NvbXBvbmVudChXcmFwcGVkQ29tcG9uZW50KSkge1xcbiAgICAgICAgICAgICAgcHJvcHNUb1Bhc3MucmVmID0gJ3dyYXBwZWQnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKFdyYXBwZWRDb21wb25lbnQsIHByb3BzVG9QYXNzKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfV0pO1xcblxcbiAgICAgICAgcmV0dXJuIEZvcm07XFxuICAgICAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgICAgIEZvcm0uZGlzcGxheU5hbWUgPSAnRm9ybSgnICsgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fdXRpbF9nZXREaXNwbGF5TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoV3JhcHBlZENvbXBvbmVudCkgKyAnKSc7XFxuICAgICAgRm9ybS5XcmFwcGVkQ29tcG9uZW50ID0gV3JhcHBlZENvbXBvbmVudDtcXG4gICAgICBGb3JtLmNoaWxkQ29udGV4dFR5cGVzID0ge1xcbiAgICAgICAgX3JlZHV4Rm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdC5pc1JlcXVpcmVkXFxuICAgICAgfTtcXG4gICAgICBGb3JtLnByb3BUeXBlcyA9IHtcXG4gICAgICAgIGRlc3Ryb3lPblVubW91bnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIGZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QsXFxuICAgICAgICBnZXRGb3JtU3RhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgb25TdWJtaXRGYWlsOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgICAgIG9uU3VibWl0U3VjY2VzczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICBwcm9wTmFtZVNwYWNlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nLFxcbiAgICAgICAgdmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgd2FybjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICB0b3VjaE9uQmx1cjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICB0b3VjaE9uQ2hhbmdlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIHRyaWdnZXJTdWJtaXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9yczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICByZWdpc3RlcmVkRmllbGRzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYW55XFxuICAgICAgfTtcXG5cXG4gICAgICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBwcm9wcykge1xcbiAgICAgICAgdmFyIGZvcm0gPSBwcm9wcy5mb3JtLFxcbiAgICAgICAgICAgIGdldEZvcm1TdGF0ZSA9IHByb3BzLmdldEZvcm1TdGF0ZSxcXG4gICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gcHJvcHMuaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICBlbmFibGVSZWluaXRpYWxpemUgPSBwcm9wcy5lbmFibGVSZWluaXRpYWxpemUsXFxuICAgICAgICAgICAga2VlcERpcnR5T25SZWluaXRpYWxpemUgPSBwcm9wcy5rZWVwRGlydHlPblJlaW5pdGlhbGl6ZTtcXG5cXG4gICAgICAgIHZhciBmb3JtU3RhdGUgPSBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpIHx8IGVtcHR5LCBmb3JtKSB8fCBlbXB0eTtcXG4gICAgICAgIHZhciBzdGF0ZUluaXRpYWwgPSBnZXRJbihmb3JtU3RhdGUsICdpbml0aWFsJyk7XFxuICAgICAgICB2YXIgaW5pdGlhbGl6ZWQgPSAhIXN0YXRlSW5pdGlhbDtcXG5cXG4gICAgICAgIHZhciBzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzID0gZW5hYmxlUmVpbml0aWFsaXplICYmIGluaXRpYWxpemVkICYmICFkZWVwRXF1YWwoaW5pdGlhbFZhbHVlcywgc3RhdGVJbml0aWFsKTtcXG4gICAgICAgIHZhciBzaG91bGRSZXNldFZhbHVlcyA9IHNob3VsZFVwZGF0ZUluaXRpYWxWYWx1ZXMgJiYgIWtlZXBEaXJ0eU9uUmVpbml0aWFsaXplO1xcblxcbiAgICAgICAgdmFyIGluaXRpYWwgPSBpbml0aWFsVmFsdWVzIHx8IHN0YXRlSW5pdGlhbCB8fCBlbXB0eTtcXG5cXG4gICAgICAgIGlmIChzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzKSB7XFxuICAgICAgICAgIGluaXRpYWwgPSBzdGF0ZUluaXRpYWwgfHwgZW1wdHk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgdmFsdWVzID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzJykgfHwgaW5pdGlhbDtcXG5cXG4gICAgICAgIGlmIChzaG91bGRSZXNldFZhbHVlcykge1xcbiAgICAgICAgICB2YWx1ZXMgPSBpbml0aWFsO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIHByaXN0aW5lID0gc2hvdWxkUmVzZXRWYWx1ZXMgfHwgZGVlcEVxdWFsKGluaXRpYWwsIHZhbHVlcyk7XFxuICAgICAgICB2YXIgYXN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsICdhc3luY0Vycm9ycycpO1xcbiAgICAgICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsICdzeW5jRXJyb3JzJykgfHwge307XFxuICAgICAgICB2YXIgc3luY1dhcm5pbmdzID0gZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJykgfHwge307XFxuICAgICAgICB2YXIgcmVnaXN0ZXJlZEZpZWxkcyA9IGdldEluKGZvcm1TdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICAgIHZhciB2YWxpZCA9IGlzVmFsaWQoZm9ybSwgZ2V0Rm9ybVN0YXRlLCBmYWxzZSkoc3RhdGUpO1xcbiAgICAgICAgdmFyIHZhbGlkRXhjZXB0U3VibWl0ID0gaXNWYWxpZChmb3JtLCBnZXRGb3JtU3RhdGUsIHRydWUpKHN0YXRlKTtcXG4gICAgICAgIHZhciBhbnlUb3VjaGVkID0gISFnZXRJbihmb3JtU3RhdGUsICdhbnlUb3VjaGVkJyk7XFxuICAgICAgICB2YXIgc3VibWl0dGluZyA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0dGluZycpO1xcbiAgICAgICAgdmFyIHN1Ym1pdEZhaWxlZCA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyk7XFxuICAgICAgICB2YXIgc3VibWl0U3VjY2VlZGVkID0gISFnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRTdWNjZWVkZWQnKTtcXG4gICAgICAgIHZhciBlcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgJ2Vycm9yJyk7XFxuICAgICAgICB2YXIgd2FybmluZyA9IGdldEluKGZvcm1TdGF0ZSwgJ3dhcm5pbmcnKTtcXG4gICAgICAgIHZhciB0cmlnZ2VyU3VibWl0ID0gZ2V0SW4oZm9ybVN0YXRlLCAndHJpZ2dlclN1Ym1pdCcpO1xcbiAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgYW55VG91Y2hlZDogYW55VG91Y2hlZCxcXG4gICAgICAgICAgYXN5bmNFcnJvcnM6IGFzeW5jRXJyb3JzLFxcbiAgICAgICAgICBhc3luY1ZhbGlkYXRpbmc6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycpIHx8IGZhbHNlLFxcbiAgICAgICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgICAgICBlcnJvcjogZXJyb3IsXFxuICAgICAgICAgIGluaXRpYWxpemVkOiBpbml0aWFsaXplZCxcXG4gICAgICAgICAgaW52YWxpZDogIXZhbGlkLFxcbiAgICAgICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgICAgIHJlZ2lzdGVyZWRGaWVsZHM6IHJlZ2lzdGVyZWRGaWVsZHMsXFxuICAgICAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgICAgIHN1Ym1pdEZhaWxlZDogc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgc3luY0Vycm9yczogc3luY0Vycm9ycyxcXG4gICAgICAgICAgc3luY1dhcm5pbmdzOiBzeW5jV2FybmluZ3MsXFxuICAgICAgICAgIHRyaWdnZXJTdWJtaXQ6IHRyaWdnZXJTdWJtaXQsXFxuICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxcbiAgICAgICAgICB2YWxpZDogdmFsaWQsXFxuICAgICAgICAgIHZhbGlkRXhjZXB0U3VibWl0OiB2YWxpZEV4Y2VwdFN1Ym1pdCxcXG4gICAgICAgICAgd2FybmluZzogd2FybmluZ1xcbiAgICAgICAgfTtcXG4gICAgICB9LCBmdW5jdGlvbiAoZGlzcGF0Y2gsIGluaXRpYWxQcm9wcykge1xcbiAgICAgICAgdmFyIGJpbmRGb3JtID0gZnVuY3Rpb24gYmluZEZvcm0oYWN0aW9uQ3JlYXRvcikge1xcbiAgICAgICAgICByZXR1cm4gYWN0aW9uQ3JlYXRvci5iaW5kKG51bGwsIGluaXRpYWxQcm9wcy5mb3JtKTtcXG4gICAgICAgIH07XFxuXFxuICAgICAgICAvLyBCaW5kIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb24gYHByb3BzLmZvcm1gXFxuICAgICAgICB2YXIgYm91bmRGb3JtQUNzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmb3JtQWN0aW9ucywgYmluZEZvcm0pO1xcbiAgICAgICAgdmFyIGJvdW5kQXJyYXlBQ3MgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2xvZGFzaF9lc19tYXBWYWx1ZXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFycmF5QWN0aW9ucywgYmluZEZvcm0pO1xcbiAgICAgICAgdmFyIGJvdW5kQmx1ciA9IGZ1bmN0aW9uIGJvdW5kQmx1cihmaWVsZCwgdmFsdWUpIHtcXG4gICAgICAgICAgcmV0dXJuIGJsdXIoaW5pdGlhbFByb3BzLmZvcm0sIGZpZWxkLCB2YWx1ZSwgISFpbml0aWFsUHJvcHMudG91Y2hPbkJsdXIpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBib3VuZENoYW5nZSA9IGZ1bmN0aW9uIGJvdW5kQ2hhbmdlKGZpZWxkLCB2YWx1ZSkge1xcbiAgICAgICAgICByZXR1cm4gY2hhbmdlKGluaXRpYWxQcm9wcy5mb3JtLCBmaWVsZCwgdmFsdWUsICEhaW5pdGlhbFByb3BzLnRvdWNoT25DaGFuZ2UsICEhaW5pdGlhbFByb3BzLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBib3VuZEZvY3VzID0gYmluZEZvcm0oZm9jdXMpO1xcblxcbiAgICAgICAgLy8gV3JhcCBhY3Rpb24gY3JlYXRvcnMgd2l0aCBgZGlzcGF0Y2hgXFxuICAgICAgICB2YXIgY29ubmVjdGVkRm9ybUFDcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRGb3JtQUNzLCBkaXNwYXRjaCk7XFxuICAgICAgICB2YXIgY29ubmVjdGVkQXJyYXlBQ3MgPSB7XFxuICAgICAgICAgIGluc2VydDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5SW5zZXJ0LCBkaXNwYXRjaCksXFxuICAgICAgICAgIG1vdmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheU1vdmUsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcG9wOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlQb3AsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcHVzaDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5UHVzaCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICByZW1vdmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVJlbW92ZSwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICByZW1vdmVBbGw6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVJlbW92ZUFsbCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICBzaGlmdDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U2hpZnQsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc3BsaWNlOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlTcGxpY2UsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc3dhcDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U3dhcCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICB1bnNoaWZ0OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlVbnNoaWZ0LCBkaXNwYXRjaClcXG4gICAgICAgIH07XFxuXFxuICAgICAgICB2YXIgY29tcHV0ZWRBY3Rpb25zID0gX2V4dGVuZHMoe30sIGNvbm5lY3RlZEZvcm1BQ3MsIGJvdW5kQXJyYXlBQ3MsIHtcXG4gICAgICAgICAgYmx1cjogYm91bmRCbHVyLFxcbiAgICAgICAgICBjaGFuZ2U6IGJvdW5kQ2hhbmdlLFxcbiAgICAgICAgICBhcnJheTogY29ubmVjdGVkQXJyYXlBQ3MsXFxuICAgICAgICAgIGZvY3VzOiBib3VuZEZvY3VzLFxcbiAgICAgICAgICBkaXNwYXRjaDogZGlzcGF0Y2hcXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNvbXB1dGVkQWN0aW9ucztcXG4gICAgICAgIH07XFxuICAgICAgfSwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICAgICAgdmFyIENvbm5lY3RlZEZvcm0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0KCkoY29ubmVjdG9yKEZvcm0pLCBXcmFwcGVkQ29tcG9uZW50KTtcXG4gICAgICBDb25uZWN0ZWRGb3JtLmRlZmF1bHRQcm9wcyA9IGNvbmZpZztcXG5cXG4gICAgICAvLyBidWlsZCBvdXRlciBjb21wb25lbnQgdG8gZXhwb3NlIGluc3RhbmNlIGFwaVxcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoX0NvbXBvbmVudDIpIHtcXG4gICAgICAgIF9pbmhlcml0cyhSZWR1eEZvcm0sIF9Db21wb25lbnQyKTtcXG5cXG4gICAgICAgIGZ1bmN0aW9uIFJlZHV4Rm9ybSgpIHtcXG4gICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlZHV4Rm9ybSk7XFxuXFxuICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoUmVkdXhGb3JtLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUmVkdXhGb3JtKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBfY3JlYXRlQ2xhc3MoUmVkdXhGb3JtLCBbe1xcbiAgICAgICAgICBrZXk6ICdzdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0KCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnMud3JhcHBlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5zdWJtaXQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZXNldCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkucmVzZXQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMxMCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfcHJvcHMxMC5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczEwLCBbJ2luaXRpYWxWYWx1ZXMnXSk7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShDb25uZWN0ZWRGb3JtLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgICAgICAgcmVmOiAnd3JhcHBlZCcsXFxuICAgICAgICAgICAgICAvLyBjb252ZXJ0IGluaXRpYWxWYWx1ZXMgaWYgbmVlZCB0b1xcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlczogZnJvbUpTKGluaXRpYWxWYWx1ZXMpXFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ZhbGlkJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzVmFsaWQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdpbnZhbGlkJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLnZhbGlkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5wcmlzdGluZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd2YWx1ZXMnLFxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0VmFsdWVzKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZmllbGRMaXN0JyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgLy8gbWFpbmx5IHByb3ZpZGVkIGZvciB0ZXN0aW5nXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldEZpZWxkTGlzdCgpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3dyYXBwZWRJbnN0YW5jZScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIC8vIGZvciB0ZXN0aW5lXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLnJlZnMud3JhcHBlZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfV0pO1xcblxcbiAgICAgICAgcmV0dXJuIFJlZHV4Rm9ybTtcXG4gICAgICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlUmVkdXhGb3JtKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAxMjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNZXJnZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NyZWF0ZUFzc2lnbmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Nyk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXFxuICogaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgaW50byB0aGVcXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcXG4gKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcXG4gKiBhcmUgbWVyZ2VkIHJlY3Vyc2l2ZWx5LiBPdGhlciBvYmplY3RzIGFuZCB2YWx1ZSB0eXBlcyBhcmUgb3ZlcnJpZGRlbiBieVxcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxcbiAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXFxuICpcXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjUuMFxcbiAqIEBjYXRlZ29yeSBPYmplY3RcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXFxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHtcXG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXFxuICogfTtcXG4gKlxcbiAqIHZhciBvdGhlciA9IHtcXG4gKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXFxuICogfTtcXG4gKlxcbiAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XFxuICogLy8gPT4geyAnYSc6IFt7ICdiJzogMiwgJ2MnOiAzIH0sIHsgJ2QnOiA0LCAnZSc6IDUgfV0gfVxcbiAqL1xcbnZhciBtZXJnZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NyZWF0ZUFzc2lnbmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpIHtcXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNZXJnZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcXG59KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZXJnZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUZvcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYmFzZU1lcmdlRGVlcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fc2FmZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXFxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXFxuICogIGNvdW50ZXJwYXJ0cy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Jhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xcbiAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSkge1xcbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19iYXNlTWVyZ2VEZWVwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxcbiAgICAgICAgPyBjdXN0b21pemVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcXG4gICAgICAgIDogdW5kZWZpbmVkO1xcblxcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xcbiAgICAgIH1cXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hc3NpZ25NZXJnZVZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9XFxuICB9LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNZXJnZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBjbGVhclxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbiAgdGhpcy5zaXplID0gMDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTI0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xcblxcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tEZWxldGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgU3RhY2tcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XFxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0YWNrSGFzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0xpc3RDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XFxuXFxuXFxuXFxuXFxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXFxudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XFxuXFxuLyoqXFxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgc2V0XFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pIHtcXG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcXG4gICAgaWYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XFxuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9XFxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ocGFpcnMpO1xcbiAgfVxcbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XFxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XFxuICByZXR1cm4gdGhpcztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xcbiAgICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XFxuXFxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcXG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XFxuICAgICAgICBicmVhaztcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdDtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUJhc2VGb3IpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY2xvbmVCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jbG9uZVR5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19jb3B5QXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2luaXRDbG9uZU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzQXJndW1lbnRzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzQXJyYXlMaWtlT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faXNCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX2lzRnVuY3Rpb25fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9faXNQbGFpbk9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX2lzVHlwZWRBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X190b1BsYWluT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlTWVyZ2VgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxcbiAqIHJlZmVyZW5jZXMgdG8gYmUgbWVyZ2VkLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWVyZ2VGdW5jIFRoZSBmdW5jdGlvbiB0byBtZXJnZSB2YWx1ZXMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXFxuICogIGNvdW50ZXJwYXJ0cy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBtZXJnZUZ1bmMsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XFxuICB2YXIgb2JqVmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fc2FmZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXkpLFxcbiAgICAgIHNyY1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSwga2V5KSxcXG4gICAgICBzdGFja2VkID0gc3RhY2suZ2V0KHNyY1ZhbHVlKTtcXG5cXG4gIGlmIChzdGFja2VkKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnbk1lcmdlVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5LCBzdGFja2VkKTtcXG4gICAgcmV0dXJuO1xcbiAgfVxcbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxcbiAgICA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXFxuICAgIDogdW5kZWZpbmVkO1xcblxcbiAgdmFyIGlzQ29tbW9uID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcXG5cXG4gIGlmIChpc0NvbW1vbikge1xcbiAgICB2YXIgaXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSksXFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faXNCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSxcXG4gICAgICAgIGlzVHlwZWQgPSAhaXNBcnIgJiYgIWlzQnVmZiAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9faXNUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSk7XFxuXFxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XFxuICAgIGlmIChpc0FyciB8fCBpc0J1ZmYgfHwgaXNUeXBlZCkge1xcbiAgICAgIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzQXJyYXlMaWtlT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fY29weUFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKGlzQnVmZikge1xcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY2xvbmVCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlLCB0cnVlKTtcXG4gICAgICB9XFxuICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY2xvbmVUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgdHJ1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2Uge1xcbiAgICAgICAgbmV3VmFsdWUgPSBbXTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgZWxzZSBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX2lzUGxhaW5PYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FyZ3VtZW50c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpKSB7XFxuICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcXG4gICAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlKSkge1xcbiAgICAgICAgbmV3VmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fdG9QbGFpbk9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgICBlbHNlIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2luaXRDbG9uZU9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xcbiAgICB9XFxuICB9XFxuICBpZiAoaXNDb21tb24pIHtcXG4gICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIHN0YWNrLnNldChzcmNWYWx1ZSwgbmV3VmFsdWUpO1xcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xcbiAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xcbiAgfVxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZU1lcmdlRGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xcbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXFxudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcXG5cXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xcbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLkJ1ZmZlciA6IHVuZGVmaW5lZCxcXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXFxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cXG4gKi9cXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xcbiAgaWYgKGlzRGVlcCkge1xcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XFxuICB9XFxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XFxuXFxuICBidWZmZXIuY29weShyZXN1bHQpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2xvbmVCdWZmZXIpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxMzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nsb25lQXJyYXlCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMyKTtcXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXFxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nsb25lQXJyYXlCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNsb25lVHlwZWRBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19VaW50OEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcXG4gIG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ocmVzdWx0KS5zZXQobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fVWludDhBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShhcnJheUJ1ZmZlcikpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2xvbmVBcnJheUJ1ZmZlcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc1Byb3RvdHlwZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXFxuICovXFxuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzUHJvdG90eXBlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKVxcbiAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFByb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSlcXG4gICAgOiB7fTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaW5pdENsb25lT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXFxuICovXFxudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XFxuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxcbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XFxuICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHByb3RvKSkge1xcbiAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XFxuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XFxuICAgIH1cXG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcXG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlQ3JlYXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSA9PSBhcmdzVGFnO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNBcmd1bWVudHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEzNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheUxpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXFxuICogaXMgYW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0FycmF5TGlrZU9iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4xMy4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcXG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxcbiAqL1xcbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3R1YkZhbHNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xcblxcbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcXG5cXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXFxudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XFxudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cXG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cXG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XFxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cXG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgJiZcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSldO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNUeXBlZEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XFxuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VVbmFyeSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xcbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XFxuXFxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5wcm9jZXNzO1xcblxcbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xcbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcXG4gIHRyeSB7XFxuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxcbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcXG5cXG4gICAgaWYgKHR5cGVzKSB7XFxuICAgICAgcmV0dXJuIHR5cGVzO1xcbiAgICB9XFxuXFxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXFxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcXG4gIH0gY2F0Y2ggKGUpIHt9XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChub2RlVXRpbCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjIpKG1vZHVsZSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE0MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29weU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Mik7XFxuXFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHBsYWluIG9iamVjdCBmbGF0dGVuaW5nIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZ1xcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYiA9IDI7XFxuICogfVxcbiAqXFxuICogRm9vLnByb3RvdHlwZS5jID0gMztcXG4gKlxcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxcbiAqXFxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcXG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfVxcbiAqL1xcbmZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3B5T2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c0luX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9ICh0b1BsYWluT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxcbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcXG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XFxuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcXG5cXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XFxuXFxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxcbiAgICAgIDogdW5kZWZpbmVkO1xcblxcbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XFxuICAgIH1cXG4gICAgaWYgKGlzTmV3KSB7XFxuICAgICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gb2JqZWN0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb3B5T2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXFxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cXG4gKi9cXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlLCB2YWx1ZSkpIHx8XFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgdmFsdWUpO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NpZ25WYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXFxuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXFxuICovXFxuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVRpbWVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzUHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19uYXRpdmVLZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ2KTtcXG5cXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25hdGl2ZUtleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG4gIH1cXG4gIHZhciBpc1Byb3RvID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgcmVzdWx0ID0gW107XFxuXFxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XFxuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XFxuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXFxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XFxuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG5hdGl2ZUtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUmVzdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzSXRlcmF0ZWVDYWxsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUmVzdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XFxuICAgIHZhciBpbmRleCA9IC0xLFxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xcblxcbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcXG4gICAgICA6IHVuZGVmaW5lZDtcXG5cXG4gICAgaWYgKGd1YXJkICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzSXRlcmF0ZWVDYWxsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcXG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XFxuICAgICAgbGVuZ3RoID0gMTtcXG4gICAgfVxcbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XFxuICAgICAgaWYgKHNvdXJjZSkge1xcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdDtcXG4gIH0pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVBc3NpZ25lcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pZGVudGl0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fb3ZlclJlc3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTEpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fb3ZlclJlc3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmMsIHN0YXJ0LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lkZW50aXR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSwgZnVuYyArICcnKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVJlc3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBwbHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUwKTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcXG4gICAgICAgIGluZGV4ID0gLTEsXFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XFxuXFxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcXG4gICAgfVxcbiAgICBpbmRleCA9IC0xO1xcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcXG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcXG4gICAgfVxcbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwcGx5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob3ZlclJlc3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxcbiAqL1xcbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcXG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcXG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XFxuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcXG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xcbiAgfVxcbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFwcGx5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VTZXRUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Nob3J0T3V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NCk7XFxuXFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cXG4gKi9cXG52YXIgc2V0VG9TdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zaG9ydE91dF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlU2V0VG9TdHJpbmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNldFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbnN0YW50X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVmaW5lUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXFxuICovXFxudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pZGVudGl0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCAndG9TdHJpbmcnLCB7XFxuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxcbiAgICAndmFsdWUnOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb25zdGFudF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RyaW5nKSxcXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxcbiAgfSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlU2V0VG9TdHJpbmcpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDIuNC4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XFxuICpcXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcXG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cXG4gKlxcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb25zdGFudCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXFxudmFyIEhPVF9DT1VOVCA9IDgwMCxcXG4gICAgSE9UX1NQQU4gPSAxNjtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxcbiAqIG1pbGxpc2Vjb25kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcXG4gIHZhciBjb3VudCA9IDAsXFxuICAgICAgbGFzdENhbGxlZCA9IDA7XFxuXFxuICByZXR1cm4gZnVuY3Rpb24oKSB7XFxuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcXG5cXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcXG4gICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgY291bnQgPSAwO1xcbiAgICB9XFxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNob3J0T3V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgdmFsdWUgYXJndW1lbnQuXFxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLFxcbiAqICBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XFxuICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xcbiAgICAgICAgPyAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcnJheUxpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNJbmRleF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5kZXgsIG9iamVjdC5sZW5ndGgpKVxcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXFxuICAgICAgKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19lcV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xcbiAgfVxcbiAgcmV0dXJuIGZhbHNlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0l0ZXJhdGVlQ2FsbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlRm9yX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19rZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XFxuICByZXR1cm4gb2JqZWN0ICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgaXRlcmF0ZWUsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VGb3JPd24pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNQcm90b3R5cGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX25hdGl2ZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTU4KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xcbiAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1Byb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbmF0aXZlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG4gIH1cXG4gIHZhciByZXN1bHQgPSBbXTtcXG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUtleXMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3Qua2V5cywgT2JqZWN0KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChuYXRpdmVLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNYXRjaGVzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZU1hdGNoZXNQcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3Byb3BlcnR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xcbiAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcXG4gICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faWRlbnRpdHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICB9XFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSlcXG4gICAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VNYXRjaGVzUHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlWzBdLCB2YWx1ZVsxXSlcXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNYXRjaGVzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxuICB9XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fcHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUl0ZXJhdGVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc01hdGNoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0TWF0Y2hEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcXG4gIHZhciBtYXRjaERhdGEgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRNYXRjaERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSk7XFxuICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc01hdGNoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNYXRjaGVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlSXNFcXVhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXFxudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXRjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxcbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhLCBjdXN0b21pemVyKSB7XFxuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxcbiAgICAgIG5vQ3VzdG9taXplciA9ICFjdXN0b21pemVyO1xcblxcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XFxuICAgIHJldHVybiAhbGVuZ3RoO1xcbiAgfVxcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICB3aGlsZSAoaW5kZXgtLSkge1xcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XFxuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXFxuICAgICAgICAgID8gZGF0YVsxXSAhPT0gb2JqZWN0W2RhdGFbMF1dXFxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcXG4gICAgICAgICkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XFxuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxcbiAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcXG5cXG4gICAgaWYgKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKSB7XFxuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICB2YXIgc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG4gICAgICBpZiAoY3VzdG9taXplcikge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjayk7XFxuICAgICAgfVxcbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXFxuICAgICAgICAgICAgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxcbiAgICAgICAgICAgIDogcmVzdWx0XFxuICAgICAgICAgICkpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiB0cnVlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNNYXRjaCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXF1YWxBcnJheXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2VxdWFsQnlUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19lcXVhbE9iamVjdHNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcblxcblxcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgb2JqSXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpLFxcbiAgICAgIG90aElzQXJyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpLFxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2dldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpO1xcblxcbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XFxuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcXG5cXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XFxuXFxuICBpZiAoaXNTYW1lVGFnICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKSB7XFxuICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9faXNCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyKSkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICBvYmpJc0FyciA9IHRydWU7XFxuICAgIG9iaklzT2JqID0gZmFsc2U7XFxuICB9XFxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuICAgIHJldHVybiAob2JqSXNBcnIgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19faXNUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKVxcbiAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXF1YWxBcnJheXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXFxuICAgICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcXVhbEJ5VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xcbiAgfVxcbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XFxuXFxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XFxuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XFxuXFxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcXG4gICAgfVxcbiAgfVxcbiAgaWYgKCFpc1NhbWVUYWcpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsT2JqZWN0c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJc0VxdWFsRGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19NYXBDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc2V0Q2FjaGVBZGRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRDYWNoZUhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjUpO1xcblxcblxcblxcblxcbi8qKlxcbiAqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XFxuXFxuICB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcXG4gIH1cXG59XFxuXFxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3NldENhY2hlQWRkX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFNldENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XFxuXFxuLyoqXFxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgYWRkXFxuICogQG1lbWJlck9mIFNldENhY2hlXFxuICogQGFsaWFzIHB1c2hcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcXG4gIHJldHVybiB0aGlzO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRDYWNoZUFkZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXFxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XFxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRDYWNoZUhhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXFxuICogc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYXJyYXlTb21lKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjYWNoZUhhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsQXJyYXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBUb0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2V0VG9BcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzApO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xcblxcbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcXG5cXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cXG52YXIgc3ltYm9sUHJvdG8gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcXG5cXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXFxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cXG4gKlxcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICBzd2l0Y2ggKHRhZykge1xcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcXG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XFxuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XFxuXFxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XFxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ob2JqZWN0KSwgbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fVWludDhBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShvdGhlcikpKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiB0cnVlO1xcblxcbiAgICBjYXNlIGJvb2xUYWc6XFxuICAgIGNhc2UgZGF0ZVRhZzpcXG4gICAgY2FzZSBudW1iZXJUYWc6XFxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoK29iamVjdCwgK290aGVyKTtcXG5cXG4gICAgY2FzZSBlcnJvclRhZzpcXG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xcblxcbiAgICBjYXNlIHJlZ2V4cFRhZzpcXG4gICAgY2FzZSBzdHJpbmdUYWc6XFxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXFxuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcXG5cXG4gICAgY2FzZSBtYXBUYWc6XFxuICAgICAgdmFyIGNvbnZlcnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21hcFRvQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuICAgIGNhc2Ugc2V0VGFnOlxcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XFxuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2V0VG9BcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXFxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcXG4gICAgICBpZiAoc3RhY2tlZCkge1xcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICAgICAgfVxcbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcXG5cXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XFxuICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsQXJyYXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcXG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcXG4gICAgICByZXR1cm4gcmVzdWx0O1xcblxcbiAgICBjYXNlIHN5bWJvbFRhZzpcXG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XFxuICAgICAgfVxcbiAgfVxcbiAgcmV0dXJuIGZhbHNlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcXVhbEJ5VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XFxuXFxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XFxuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwVG9BcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cXG4gKi9cXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xcblxcbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcXG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XFxuICB9KTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNldFRvQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzIpO1xcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxcbiAgICAgIG9ialByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSxcXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXFxuICAgICAgb3RoUHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRBbGxLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlciksXFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xcblxcbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XFxuICB3aGlsZSAoaW5kZXgtLSkge1xcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxcbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcXG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcXG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICB9XFxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcXG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcXG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcXG5cXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcXG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XFxuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcXG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XFxuXFxuICAgIGlmIChjdXN0b21pemVyKSB7XFxuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcXG4gICAgICAgICAgOiBjb21wYXJlZFxcbiAgICAgICAgKSkge1xcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcXG4gIH1cXG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XFxuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xcblxcbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXFxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XFxuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZXF1YWxPYmplY3RzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRBbGxLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0U3ltYm9sc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2tleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDApO1xcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxcbiAqL1xcbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldEFsbEtleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19rZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFN5bWJvbHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRBbGxLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5UHVzaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXFxuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XFxuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gcmVzdWx0IDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlQdXNoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlR2V0QWxsS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cXG4gKi9cXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XFxuXFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xcbiAgfVxcbiAgcmV0dXJuIGFycmF5O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheVB1c2gpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlGaWx0ZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdHViQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc3KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXFxuICovXFxudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3R1YkFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogZnVuY3Rpb24ob2JqZWN0KSB7XFxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcXG4gICAgcmV0dXJuIFtdO1xcbiAgfVxcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlGaWx0ZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XFxuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcXG4gIH0pO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0U3ltYm9scyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXFxuICAgICAgcmVzSW5kZXggPSAwLFxcbiAgICAgIHJlc3VsdCA9IFtdO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XFxuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5RmlsdGVyKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4xMy4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xcbiAqXFxuICogY29uc29sZS5sb2coYXJyYXlzKTtcXG4gKiAvLyA9PiBbW10sIFtdXVxcbiAqXFxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xcbiAgcmV0dXJuIFtdO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHViQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19TZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19XZWFrTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFzZUdldFRhZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xcblxcbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICBtYXBDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Qcm9taXNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgc2V0Q3RvclN0cmluZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSksXFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fV2Vha01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuLyoqXFxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxcbiAqL1xcbnZhciBnZXRUYWcgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxcbmlmICgoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRhVmlld19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10obmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSBtYXBUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fUHJvbWlzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSBzZXRUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pICE9IHdlYWtNYXBUYWcpKSB7XFxuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xcbiAgICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKEN0b3IpIDogJyc7XFxuXFxuICAgIGlmIChjdG9yU3RyaW5nKSB7XFxuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XFxuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XFxuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XFxuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFRhZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIERhdGFWaWV3ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sICdEYXRhVmlldycpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKERhdGFWaWV3KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cXG52YXIgUHJvbWlzZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnUHJvbWlzZScpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFByb21pc2UpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xcbnZhciBTZXQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1NldCcpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTgyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIFdlYWtNYXAgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1dlYWtNYXAnKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChXZWFrTWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MCk7XFxuXFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xcbiAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcXG5cXG4gIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xcblxcbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N0cmljdENvbXBhcmFibGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKV07XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRNYXRjaERhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc0luX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCksIHNyY1ZhbHVlKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgdmFyIG9ialZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxcbiAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faGFzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aClcXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRyk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlTWF0Y2hlc1Byb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjgpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXFxuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMy43LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XFxuICpcXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xcbiAqIC8vID0+IDNcXG4gKlxcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xcbiAqIC8vID0+IDNcXG4gKlxcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcXG4gKiAvLyA9PiAnZGVmYXVsdCdcXG4gKi9cXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcXG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aCk7XFxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSGFzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19oYXNQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OCk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc1BhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSGFzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUhhc0luKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0xlbmd0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdG9LZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgcGF0aGAgZXhpc3RzIG9uIGBvYmplY3RgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XFxuICBwYXRoID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY2FzdFBhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgsIG9iamVjdCk7XFxuXFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBrZXkgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aFtpbmRleF0pO1xcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcXG4gIH1cXG4gIGlmIChyZXN1bHQgfHwgKytpbmRleCAhPSBsZW5ndGgpIHtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH1cXG4gIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IG9iamVjdC5sZW5ndGg7XFxuICByZXR1cm4gISFsZW5ndGggJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGxlbmd0aCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNJbmRleF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoa2V5LCBsZW5ndGgpICYmXFxuICAgIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlUHJvcGVydHlEZWVwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMi40LjBcXG4gKiBAY2F0ZWdvcnkgVXRpbFxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3RzID0gW1xcbiAqICAgeyAnYSc6IHsgJ2InOiAyIH0gfSxcXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cXG4gKiBdO1xcbiAqXFxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xcbiAqIC8vID0+IFsyLCAxXVxcbiAqXFxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcXG4gKiAvLyA9PiBbMSwgMl1cXG4gKi9cXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNLZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCkpIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVByb3BlcnR5RGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHByb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlUHJvcGVydHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE5MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OCk7XFxuXFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVByb3BlcnR5RGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXFxuICovXFxuXFxuXFxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XFxuICAgIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXFxuICAgIGRlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZGlzcGxheU5hbWU6IHRydWUsXFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgbWl4aW5zOiB0cnVlLFxcbiAgICBwcm9wVHlwZXM6IHRydWUsXFxuICAgIHR5cGU6IHRydWVcXG59O1xcblxcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xcbiAgICBuYW1lOiB0cnVlLFxcbiAgICBsZW5ndGg6IHRydWUsXFxuICAgIHByb3RvdHlwZTogdHJ1ZSxcXG4gICAgY2FsbGVyOiB0cnVlLFxcbiAgICBhcmd1bWVudHM6IHRydWUsXFxuICAgIGFyaXR5OiB0cnVlXFxufTtcXG5cXG52YXIgaXNHZXRPd25Qcm9wZXJ0eVN5bWJvbHNBdmFpbGFibGUgPSB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJztcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBjdXN0b21TdGF0aWNzKSB7XFxuICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykgeyAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xcblxcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cXG4gICAgICAgIGlmIChpc0dldE93blByb3BlcnR5U3ltYm9sc0F2YWlsYWJsZSkge1xcbiAgICAgICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleXNbaV1dICYmICFLTk9XTl9TVEFUSUNTW2tleXNbaV1dICYmICghY3VzdG9tU3RhdGljcyB8fCAhY3VzdG9tU3RhdGljc1trZXlzW2ldXSkpIHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldENvbXBvbmVudFtrZXlzW2ldXSA9IHNvdXJjZUNvbXBvbmVudFtrZXlzW2ldXTtcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcXG5cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBjcmVhdGVQcm92aWRlciAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX3dhcm5pbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlID0gZmFsc2U7XFxuZnVuY3Rpb24gd2FybkFib3V0UmVjZWl2aW5nU3RvcmUoKSB7XFxuICBpZiAoZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUpIHtcXG4gICAgcmV0dXJuO1xcbiAgfVxcbiAgZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUgPSB0cnVlO1xcblxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbHNfd2FybmluZ19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoJzxQcm92aWRlcj4gZG9lcyBub3Qgc3VwcG9ydCBjaGFuZ2luZyBgc3RvcmVgIG9uIHRoZSBmbHkuICcgKyAnSXQgaXMgbW9zdCBsaWtlbHkgdGhhdCB5b3Ugc2VlIHRoaXMgZXJyb3IgYmVjYXVzZSB5b3UgdXBkYXRlZCB0byAnICsgJ1JlZHV4IDIueCBhbmQgUmVhY3QgUmVkdXggMi54IHdoaWNoIG5vIGxvbmdlciBob3QgcmVsb2FkIHJlZHVjZXJzICcgKyAnYXV0b21hdGljYWxseS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXJlZHV4L3JlbGVhc2VzLycgKyAndGFnL3YyLjAuMCBmb3IgdGhlIG1pZ3JhdGlvbiBpbnN0cnVjdGlvbnMuJyk7XFxufVxcblxcbmZ1bmN0aW9uIGNyZWF0ZVByb3ZpZGVyKCkge1xcbiAgdmFyIF9Qcm92aWRlciRjaGlsZENvbnRleDtcXG5cXG4gIHZhciBzdG9yZUtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ3N0b3JlJztcXG4gIHZhciBzdWJLZXkgPSBhcmd1bWVudHNbMV07XFxuXFxuICB2YXIgc3Vic2NyaXB0aW9uS2V5ID0gc3ViS2V5IHx8IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XFxuXFxuICB2YXIgUHJvdmlkZXIgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICBfaW5oZXJpdHMoUHJvdmlkZXIsIF9Db21wb25lbnQpO1xcblxcbiAgICBQcm92aWRlci5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xcbiAgICAgIHZhciBfcmVmO1xcblxcbiAgICAgIHJldHVybiBfcmVmID0ge30sIF9yZWZbc3RvcmVLZXldID0gdGhpc1tzdG9yZUtleV0sIF9yZWZbc3Vic2NyaXB0aW9uS2V5XSA9IG51bGwsIF9yZWY7XFxuICAgIH07XFxuXFxuICAgIGZ1bmN0aW9uIFByb3ZpZGVyKHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFByb3ZpZGVyKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICBfdGhpc1tzdG9yZUtleV0gPSBwcm9wcy5zdG9yZTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNoaWxkcmVuXFxcIl0ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKTtcXG4gICAgfTtcXG5cXG4gICAgcmV0dXJuIFByb3ZpZGVyO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiAobmV4dFByb3BzKSB7XFxuICAgICAgaWYgKHRoaXNbc3RvcmVLZXldICE9PSBuZXh0UHJvcHMuc3RvcmUpIHtcXG4gICAgICAgIHdhcm5BYm91dFJlY2VpdmluZ1N0b3JlKCk7XFxuICAgICAgfVxcbiAgICB9O1xcbiAgfVxcblxcbiAgUHJvdmlkZXIucHJvcFR5cGVzID0ge1xcbiAgICBzdG9yZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogc3RvcmVTaGFwZSAqL10uaXNSZXF1aXJlZCxcXG4gICAgY2hpbGRyZW46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmVsZW1lbnQuaXNSZXF1aXJlZFxcbiAgfTtcXG4gIFByb3ZpZGVyLmNoaWxkQ29udGV4dFR5cGVzID0gKF9Qcm92aWRlciRjaGlsZENvbnRleCA9IHt9LCBfUHJvdmlkZXIkY2hpbGRDb250ZXhbc3RvcmVLZXldID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogc3RvcmVTaGFwZSAqL10uaXNSZXF1aXJlZCwgX1Byb3ZpZGVyJGNoaWxkQ29udGV4W3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9Qcm92aWRlciRjaGlsZENvbnRleCk7XFxuXFxuICByZXR1cm4gUHJvdmlkZXI7XFxufVxcblxcbi8qIHVudXNlZCBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBfdW51c2VkX3dlYnBhY2tfZGVmYXVsdF9leHBvcnQgPSAoY3JlYXRlUHJvdmlkZXIoKSk7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE5NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTUpO1xcblxcbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xcbnZhciBjaGVja1Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk2KTtcXG5cXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcXG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXFxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXFxuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXFxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICB9IGNhdGNoICh4KSB7fVxcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcXG4gIHJldHVybiBudWxsO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKSB7XFxuICAvKiBnbG9iYWwgU3ltYm9sICovXFxuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XFxuICB2YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cXG5cXG4gIC8qKlxcbiAgICogUmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRlcmFibGUgb2JqZWN0LlxcbiAgICpcXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxcbiAgICpcXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XFxuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcXG4gICAqICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTtcXG4gICAqICAgICAgIC4uLlxcbiAgICogICAgIH1cXG4gICAqXFxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cXG4gICAqL1xcbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XFxuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XFxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKipcXG4gICAqIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IGFsbG93IGRlY2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJlXFxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxcbiAgICpcXG4gICAqICAgdmFyIFByb3BzID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTtcXG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcXG4gICAqICAgICBwcm9wVHlwZXM6IHtcXG4gICAqICAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5hbWVkIFxcXCJkZXNjcmlwdGlvblxcXCIuXFxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxcbiAgICpcXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFxcXCJjYXRlZ29yeVxcXCIuXFxuICAgKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsXFxuICAgKlxcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFxcXCJkaWFsb2dcXFwiIHRoYXQgcmVxdWlyZXMgYW4gaW5zdGFuY2Ugb2YgRGlhbG9nLlxcbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxcbiAgICogICAgIH0sXFxuICAgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsgLi4uIH1cXG4gICAqICAgfSk7XFxuICAgKlxcbiAgICogQSBtb3JlIGZvcm1hbCBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOlxcbiAgICpcXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxcbiAgICogICBkZWNsIDo9IFJlYWN0UHJvcFR5cGVzLnt0eXBlfSguaXNSZXF1aXJlZCk/XFxuICAgKlxcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xcbiAgICogYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIEZvciBleGFtcGxlOlxcbiAgICpcXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xcbiAgICogICAgcHJvcFR5cGVzOiB7XFxuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcXFwiaHJlZlxcXCIuXFxuICAgKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXFxuICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2YgVVJJKSkge1xcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcXG4gICAqICAgICAgICAgICAgY29tcG9uZW50TmFtZVxcbiAgICogICAgICAgICAgKTtcXG4gICAqICAgICAgICB9XFxuICAgKiAgICAgIH1cXG4gICAqICAgIH0sXFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cXG4gICAqICB9KTtcXG4gICAqXFxuICAgKiBAaW50ZXJuYWxcXG4gICAqL1xcblxcbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcXG5cXG4gIC8vIEltcG9ydGFudCFcXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcXG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxcbiAgICBmdW5jOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSxcXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxcbiAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzdHJpbmcnKSxcXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXFxuXFxuICAgIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSxcXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIsXFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxcbiAgfTtcXG5cXG4gIC8qKlxcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXFxuICAgKi9cXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cXG4gIGZ1bmN0aW9uIGlzKHgsIHkpIHtcXG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxcbiAgICBpZiAoeCA9PT0geSkge1xcbiAgICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXFxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcXG4gICAgfVxcbiAgfVxcbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXFxuXFxuICAvKipcXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcXG4gICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBvdXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsXFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXFxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XFxuICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlwZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xcbiAgICB0aGlzLnN0YWNrID0gJyc7XFxuICB9XFxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXFxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XFxuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcXG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XFxuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xcblxcbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XFxuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXFxuICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gJyArXFxuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXFxuICAgICAgICAgICk7XFxuICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICAgICAgICB0aHJvdyBlcnI7XFxuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XFxuICAgICAgICAgIGlmIChcXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXFxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXFxuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXFxuICAgICAgICAgICkge1xcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcXG4gICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgcHJvcCBvbiBgJyArIGNvbXBvbmVudE5hbWUgICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXFxuICAgICAgICAgICAgICAnWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRoaXJkLXBhcnR5IFByb3BUeXBlcyAnICtcXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXFxuICAgICAgICAgICAgKTtcXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XFxuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG51bGw7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcXG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XFxuXFxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XFxuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxcbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxcbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcXG5cXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4nKTtcXG4gICAgICB9XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcXG4gICAgICB9XFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XFxuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XFxuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDtcXG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xcbiAgICAgICAgICByZXR1cm4gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuXFxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzKTtcXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgcHJvcFZhbHVlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XFxuICAgICAgfVxcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xcbiAgICAgIH1cXG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XFxuICAgICAgICBpZiAocHJvcFZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHtcXG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcXG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XFxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XFxuICAgIH1cXG5cXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcXG4gICAgICAgICk7XFxuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XFxuICAgICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KSA9PSBudWxsKSB7XFxuICAgICAgICAgIHJldHVybiBudWxsO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xcbiAgICAgIH1cXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XFxuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcXG4gICAgICAgICAgY29udGludWU7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XFxuICAgICAgfVxcbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgYWxsIGtleXMgaW4gY2FzZSBzb21lIGFyZSByZXF1aXJlZCBidXQgbWlzc2luZyBmcm9tXFxuICAgICAgLy8gcHJvcHMuXFxuICAgICAgdmFyIGFsbEtleXMgPSBhc3NpZ24oe30sIHByb3BzW3Byb3BOYW1lXSwgc2hhcGVUeXBlcyk7XFxuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcXG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XFxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXFxuICAgICAgICAgICAgJ1xcXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xcbiAgICAgICAgICAgICdcXFxcblZhbGlkIGtleXM6ICcgKyAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXFxuICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcXG4gICAgICBjYXNlICdudW1iZXInOlxcbiAgICAgIGNhc2UgJ3N0cmluZyc6XFxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XFxuICAgICAgY2FzZSAnb2JqZWN0JzpcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XFxuICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XFxuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTtcXG4gICAgICAgICAgdmFyIHN0ZXA7XFxuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcXG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXFxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcXG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIGRlZmF1bHQ6XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcXG4gICAgLy8gTmF0aXZlIFN5bWJvbC5cXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuXFxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXFxuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcXG4gICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgfVxcblxcbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXFxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG5cXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XFxuICAgICAgcmV0dXJuICdhcnJheSc7XFxuICAgIH1cXG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cXG4gICAgICByZXR1cm4gJ29iamVjdCc7XFxuICAgIH1cXG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XFxuICAgICAgcmV0dXJuICdzeW1ib2wnO1xcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVHlwZTtcXG4gIH1cXG5cXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxcbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XFxuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcXG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XFxuICAgIH1cXG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XFxuICAgICAgICByZXR1cm4gJ2RhdGUnO1xcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XFxuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVHlwZTtcXG4gIH1cXG5cXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cXG4gIC8vIEZvciBleGFtcGxlLCBcXFwidW5kZWZpbmVkXFxcIiBvciBcXFwib2YgdHlwZSBhcnJheVxcXCJcXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcXG4gICAgc3dpdGNoICh0eXBlKSB7XFxuICAgICAgY2FzZSAnYXJyYXknOlxcbiAgICAgIGNhc2UgJ29iamVjdCc6XFxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxcbiAgICAgIGNhc2UgJ2RhdGUnOlxcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XFxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XFxuICAgICAgZGVmYXVsdDpcXG4gICAgICAgIHJldHVybiB0eXBlO1xcbiAgICB9XFxuICB9XFxuXFxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxcbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcXG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcXG4gIH1cXG5cXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XFxuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcXG5cXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcXG59O1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxOTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qXFxub2JqZWN0LWFzc2lnblxcbihjKSBTaW5kcmUgU29yaHVzXFxuQGxpY2Vuc2UgTUlUXFxuKi9cXG5cXG5cXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XFxudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xcblxcbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xcblxcdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcXG5cXHRcXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xcblxcdH1cXG5cXG5cXHRyZXR1cm4gT2JqZWN0KHZhbCk7XFxufVxcblxcbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcXG5cXHR0cnkge1xcblxcdFxcdGlmICghT2JqZWN0LmFzc2lnbikge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxcblxcblxcdFxcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcXG5cXHRcXHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXFxuXFx0XFx0dGVzdDFbNV0gPSAnZGUnO1xcblxcdFxcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxcblxcdFxcdHZhciB0ZXN0MiA9IHt9O1xcblxcdFxcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xcblxcdFxcdFxcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcXG5cXHRcXHR9XFxuXFx0XFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcXG5cXHRcXHRcXHRyZXR1cm4gdGVzdDJbbl07XFxuXFx0XFx0fSk7XFxuXFx0XFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XFxuXFx0XFx0dmFyIHRlc3QzID0ge307XFxuXFx0XFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XFxuXFx0XFx0XFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcXG5cXHRcXHR9KTtcXG5cXHRcXHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cXG5cXHRcXHRcXHRcXHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cXHR9IGNhdGNoIChlcnIpIHtcXG5cXHRcXHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxcblxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHR9XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XFxuXFx0dmFyIGZyb207XFxuXFx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcXG5cXHR2YXIgc3ltYm9scztcXG5cXG5cXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xcblxcdFxcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcXG5cXG5cXHRcXHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xcblxcdFxcdFxcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcXG5cXHRcXHRcXHRcXHR0b1trZXldID0gZnJvbVtrZXldO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xcblxcdFxcdFxcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XFxuXFx0XFx0XFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XFxuXFx0XFx0XFx0XFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xcblxcdFxcdFxcdFxcdFxcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9XFxuXFxuXFx0cmV0dXJuIHRvO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xcblxcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcXG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcXG5cXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XFxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxcbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcXG4gICAgfSBjYXRjaCAoeCkge31cXG4gIH07XFxufVxcblxcbi8qKlxcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cXG4gKlxcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXFxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXFxcInByb3BcXFwiLCBcXFwiY29udGV4dFxcXCIsIFxcXCJjaGlsZCBjb250ZXh0XFxcIlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXFxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cXG4gKiBAcHJpdmF0ZVxcbiAqL1xcbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcXG4gICAgICBpZiAodHlwZVNwZWNzLmhhc093blByb3BlcnR5KHR5cGVTcGVjTmFtZSkpIHtcXG4gICAgICAgIHZhciBlcnJvcjtcXG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXFxuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXFxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxcbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLidcXG4gICAgICAgICAgICApO1xcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICAgICAgICAgIHRocm93IGVycjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcXG4gICAgICAgICAgZXJyb3IgPSBleDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XFxuICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXFxuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xcbiAgICAgICAgICApXFxuXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcXG5cXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XFxuXFxuICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXFxuICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE5NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXFxuICpcXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXFxuICovXFxuXFxuXFxuXFxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7XFxuXFxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcXG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcXG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcXG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXFxuICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcXG4gICAgKTtcXG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XFxuICAgIHRocm93IGVycjtcXG4gIH07XFxuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcXG4gICAgcmV0dXJuIHNoaW07XFxuICB9O1xcbiAgLy8gSW1wb3J0YW50IVxcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXFxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XFxuICAgIGFycmF5OiBzaGltLFxcbiAgICBib29sOiBzaGltLFxcbiAgICBmdW5jOiBzaGltLFxcbiAgICBudW1iZXI6IHNoaW0sXFxuICAgIG9iamVjdDogc2hpbSxcXG4gICAgc3RyaW5nOiBzaGltLFxcbiAgICBzeW1ib2w6IHNoaW0sXFxuXFxuICAgIGFueTogc2hpbSxcXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcXG4gICAgZWxlbWVudDogc2hpbSxcXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcXG4gICAgbm9kZTogc2hpbSxcXG4gICAgb2JqZWN0T2Y6IGdldFNoaW0sXFxuICAgIG9uZU9mOiBnZXRTaGltLFxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXFxuICAgIHNoYXBlOiBnZXRTaGltLFxcbiAgICBleGFjdDogZ2V0U2hpbVxcbiAgfTtcXG5cXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZW1wdHlGdW5jdGlvbjtcXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xcblxcbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXFxuICovXFxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XFxuICAgIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXFxuICAgIGRlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZGlzcGxheU5hbWU6IHRydWUsXFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxcbiAgICBtaXhpbnM6IHRydWUsXFxuICAgIHByb3BUeXBlczogdHJ1ZSxcXG4gICAgdHlwZTogdHJ1ZVxcbn07XFxuXFxudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XFxuICAgIG5hbWU6IHRydWUsXFxuICAgIGxlbmd0aDogdHJ1ZSxcXG4gICAgcHJvdG90eXBlOiB0cnVlLFxcbiAgICBjYWxsZXI6IHRydWUsXFxuICAgIGNhbGxlZTogdHJ1ZSxcXG4gICAgYXJndW1lbnRzOiB0cnVlLFxcbiAgICBhcml0eTogdHJ1ZVxcbn07XFxuXFxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XFxudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XFxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XFxudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xcbnZhciBvYmplY3RQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZiAmJiBnZXRQcm90b3R5cGVPZihPYmplY3QpO1xcblxcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcXG4gICAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7IC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXFxuXFxuICAgICAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XFxuICAgICAgICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XFxuICAgICAgICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xcbiAgICAgICAgICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcXG5cXG4gICAgICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcXG4gICAgICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XFxuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleV0gJiYgIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAoIWJsYWNrbGlzdCB8fCAhYmxhY2tsaXN0W2tleV0pKSB7XFxuICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcXG4gICAgICAgICAgICAgICAgdHJ5IHsgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1YnNjcmlwdGlvbjsgfSk7XFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuLy8gZW5jYXBzdWxhdGVzIHRoZSBzdWJzY3JpcHRpb24gbG9naWMgZm9yIGNvbm5lY3RpbmcgYSBjb21wb25lbnQgdG8gdGhlIHJlZHV4IHN0b3JlLCBhc1xcbi8vIHdlbGwgYXMgbmVzdGluZyBzdWJzY3JpcHRpb25zIG9mIGRlc2NlbmRhbnQgY29tcG9uZW50cywgc28gdGhhdCB3ZSBjYW4gZW5zdXJlIHRoZVxcbi8vIGFuY2VzdG9yIGNvbXBvbmVudHMgcmUtcmVuZGVyIGJlZm9yZSBkZXNjZW5kYW50c1xcblxcbnZhciBDTEVBUkVEID0gbnVsbDtcXG52YXIgbnVsbExpc3RlbmVycyA9IHtcXG4gIG5vdGlmeTogZnVuY3Rpb24gbm90aWZ5KCkge31cXG59O1xcblxcbmZ1bmN0aW9uIGNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbigpIHtcXG4gIC8vIHRoZSBjdXJyZW50L25leHQgcGF0dGVybiBpcyBjb3BpZWQgZnJvbSByZWR1eCdzIGNyZWF0ZVN0b3JlIGNvZGUuXFxuICAvLyBUT0RPOiByZWZhY3RvcitleHBvc2UgdGhhdCBjb2RlIHRvIGJlIHJldXNhYmxlIGhlcmU/XFxuICB2YXIgY3VycmVudCA9IFtdO1xcbiAgdmFyIG5leHQgPSBbXTtcXG5cXG4gIHJldHVybiB7XFxuICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcXG4gICAgICBuZXh0ID0gQ0xFQVJFRDtcXG4gICAgICBjdXJyZW50ID0gQ0xFQVJFRDtcXG4gICAgfSxcXG4gICAgbm90aWZ5OiBmdW5jdGlvbiBub3RpZnkoKSB7XFxuICAgICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnQgPSBuZXh0O1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBsaXN0ZW5lcnNbaV0oKTtcXG4gICAgICB9XFxuICAgIH0sXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBuZXh0O1xcbiAgICB9LFxcbiAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xcbiAgICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xcbiAgICAgIGlmIChuZXh0ID09PSBjdXJyZW50KSBuZXh0ID0gY3VycmVudC5zbGljZSgpO1xcbiAgICAgIG5leHQucHVzaChsaXN0ZW5lcik7XFxuXFxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xcbiAgICAgICAgaWYgKCFpc1N1YnNjcmliZWQgfHwgY3VycmVudCA9PT0gQ0xFQVJFRCkgcmV0dXJuO1xcbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XFxuXFxuICAgICAgICBpZiAobmV4dCA9PT0gY3VycmVudCkgbmV4dCA9IGN1cnJlbnQuc2xpY2UoKTtcXG4gICAgICAgIG5leHQuc3BsaWNlKG5leHQuaW5kZXhPZihsaXN0ZW5lciksIDEpO1xcbiAgICAgIH07XFxuICAgIH1cXG4gIH07XFxufVxcblxcbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oc3RvcmUsIHBhcmVudFN1Yiwgb25TdGF0ZUNoYW5nZSkge1xcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3Vic2NyaXB0aW9uKTtcXG5cXG4gICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xcbiAgICB0aGlzLnBhcmVudFN1YiA9IHBhcmVudFN1YjtcXG4gICAgdGhpcy5vblN0YXRlQ2hhbmdlID0gb25TdGF0ZUNoYW5nZTtcXG4gICAgdGhpcy51bnN1YnNjcmliZSA9IG51bGw7XFxuICAgIHRoaXMubGlzdGVuZXJzID0gbnVsbExpc3RlbmVycztcXG4gIH1cXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkTmVzdGVkU3ViID0gZnVuY3Rpb24gYWRkTmVzdGVkU3ViKGxpc3RlbmVyKSB7XFxuICAgIHRoaXMudHJ5U3Vic2NyaWJlKCk7XFxuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5zdWJzY3JpYmUobGlzdGVuZXIpO1xcbiAgfTtcXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUubm90aWZ5TmVzdGVkU3VicyA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnMoKSB7XFxuICAgIHRoaXMubGlzdGVuZXJzLm5vdGlmeSgpO1xcbiAgfTtcXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuaXNTdWJzY3JpYmVkID0gZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnVuc3Vic2NyaWJlKTtcXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIHRyeVN1YnNjcmliZSgpIHtcXG4gICAgaWYgKCF0aGlzLnVuc3Vic2NyaWJlKSB7XFxuICAgICAgdGhpcy51bnN1YnNjcmliZSA9IHRoaXMucGFyZW50U3ViID8gdGhpcy5wYXJlbnRTdWIuYWRkTmVzdGVkU3ViKHRoaXMub25TdGF0ZUNoYW5nZSkgOiB0aGlzLnN0b3JlLnN1YnNjcmliZSh0aGlzLm9uU3RhdGVDaGFuZ2UpO1xcblxcbiAgICAgIHRoaXMubGlzdGVuZXJzID0gY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uKCk7XFxuICAgIH1cXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdHJ5VW5zdWJzY3JpYmUoKSB7XFxuICAgIGlmICh0aGlzLnVuc3Vic2NyaWJlKSB7XFxuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUgPSBudWxsO1xcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNsZWFyKCk7XFxuICAgICAgdGhpcy5saXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzO1xcbiAgICB9XFxuICB9O1xcblxcbiAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcXG59KCk7XFxuXFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgY3JlYXRlQ29ubmVjdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX191dGlsc19zaGFsbG93RXF1YWxfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19tYXBEaXNwYXRjaFRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19tYXBTdGF0ZVRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjA4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tZXJnZVByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2VsZWN0b3JGYWN0b3J5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMCk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLypcXG4gIGNvbm5lY3QgaXMgYSBmYWNhZGUgb3ZlciBjb25uZWN0QWR2YW5jZWQuIEl0IHR1cm5zIGl0cyBhcmdzIGludG8gYSBjb21wYXRpYmxlXFxuICBzZWxlY3RvckZhY3RvcnksIHdoaWNoIGhhcyB0aGUgc2lnbmF0dXJlOlxcblxcbiAgICAoZGlzcGF0Y2gsIG9wdGlvbnMpID0+IChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykgPT4gbmV4dEZpbmFsUHJvcHNcXG4gIFxcbiAgY29ubmVjdCBwYXNzZXMgaXRzIGFyZ3MgdG8gY29ubmVjdEFkdmFuY2VkIGFzIG9wdGlvbnMsIHdoaWNoIHdpbGwgaW4gdHVybiBwYXNzIHRoZW0gdG9cXG4gIHNlbGVjdG9yRmFjdG9yeSBlYWNoIHRpbWUgYSBDb25uZWN0IGNvbXBvbmVudCBpbnN0YW5jZSBpcyBpbnN0YW50aWF0ZWQgb3IgaG90IHJlbG9hZGVkLlxcblxcbiAgc2VsZWN0b3JGYWN0b3J5IHJldHVybnMgYSBmaW5hbCBwcm9wcyBzZWxlY3RvciBmcm9tIGl0cyBtYXBTdGF0ZVRvUHJvcHMsXFxuICBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVzLCBtZXJnZVByb3BzLFxcbiAgbWVyZ2VQcm9wc0ZhY3RvcmllcywgYW5kIHB1cmUgYXJncy5cXG5cXG4gIFRoZSByZXN1bHRpbmcgZmluYWwgcHJvcHMgc2VsZWN0b3IgaXMgY2FsbGVkIGJ5IHRoZSBDb25uZWN0IGNvbXBvbmVudCBpbnN0YW5jZSB3aGVuZXZlclxcbiAgaXQgcmVjZWl2ZXMgbmV3IHByb3BzIG9yIHN0b3JlIHN0YXRlLlxcbiAqL1xcblxcbmZ1bmN0aW9uIG1hdGNoKGFyZywgZmFjdG9yaWVzLCBuYW1lKSB7XFxuICBmb3IgKHZhciBpID0gZmFjdG9yaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XFxuICAgIHZhciByZXN1bHQgPSBmYWN0b3JpZXNbaV0oYXJnKTtcXG4gICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcXG4gIH1cXG5cXG4gIHJldHVybiBmdW5jdGlvbiAoZGlzcGF0Y2gsIG9wdGlvbnMpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIG9mIHR5cGUgJyArIHR5cGVvZiBhcmcgKyAnIGZvciAnICsgbmFtZSArICcgYXJndW1lbnQgd2hlbiBjb25uZWN0aW5nIGNvbXBvbmVudCAnICsgb3B0aW9ucy53cmFwcGVkQ29tcG9uZW50TmFtZSArICcuJyk7XFxuICB9O1xcbn1cXG5cXG5mdW5jdGlvbiBzdHJpY3RFcXVhbChhLCBiKSB7XFxuICByZXR1cm4gYSA9PT0gYjtcXG59XFxuXFxuLy8gY3JlYXRlQ29ubmVjdCB3aXRoIGRlZmF1bHQgYXJncyBidWlsZHMgdGhlICdvZmZpY2lhbCcgY29ubmVjdCBiZWhhdmlvci4gQ2FsbGluZyBpdCB3aXRoXFxuLy8gZGlmZmVyZW50IG9wdGlvbnMgb3BlbnMgdXAgc29tZSB0ZXN0aW5nIGFuZCBleHRlbnNpYmlsaXR5IHNjZW5hcmlvc1xcbmZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3QoKSB7XFxuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXFxuICAgICAgX3JlZiRjb25uZWN0SE9DID0gX3JlZi5jb25uZWN0SE9DLFxcbiAgICAgIGNvbm5lY3RIT0MgPSBfcmVmJGNvbm5lY3RIT0MgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9uZW50c19jb25uZWN0QWR2YW5jZWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJGNvbm5lY3RIT0MsXFxuICAgICAgX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID0gX3JlZi5tYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsXFxuICAgICAgbWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzID0gX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcFN0YXRlVG9Qcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYkbWFwU3RhdGVUb1Byb3BzRixcXG4gICAgICBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPSBfcmVmLm1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyxcXG4gICAgICBtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMgPSBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWFwRGlzcGF0Y2hUb1Byb3BzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZiRtYXBEaXNwYXRjaFRvUHJvLFxcbiAgICAgIF9yZWYkbWVyZ2VQcm9wc0ZhY3RvciA9IF9yZWYubWVyZ2VQcm9wc0ZhY3RvcmllcyxcXG4gICAgICBtZXJnZVByb3BzRmFjdG9yaWVzID0gX3JlZiRtZXJnZVByb3BzRmFjdG9yID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21lcmdlUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJG1lcmdlUHJvcHNGYWN0b3IsXFxuICAgICAgX3JlZiRzZWxlY3RvckZhY3RvcnkgPSBfcmVmLnNlbGVjdG9yRmFjdG9yeSxcXG4gICAgICBzZWxlY3RvckZhY3RvcnkgPSBfcmVmJHNlbGVjdG9yRmFjdG9yeSA9PT0gdW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zZWxlY3RvckZhY3RvcnlfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJHNlbGVjdG9yRmFjdG9yeTtcXG5cXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzKSB7XFxuICAgIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge30sXFxuICAgICAgICBfcmVmMiRwdXJlID0gX3JlZjIucHVyZSxcXG4gICAgICAgIHB1cmUgPSBfcmVmMiRwdXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogX3JlZjIkcHVyZSxcXG4gICAgICAgIF9yZWYyJGFyZVN0YXRlc0VxdWFsID0gX3JlZjIuYXJlU3RhdGVzRXF1YWwsXFxuICAgICAgICBhcmVTdGF0ZXNFcXVhbCA9IF9yZWYyJGFyZVN0YXRlc0VxdWFsID09PSB1bmRlZmluZWQgPyBzdHJpY3RFcXVhbCA6IF9yZWYyJGFyZVN0YXRlc0VxdWFsLFxcbiAgICAgICAgX3JlZjIkYXJlT3duUHJvcHNFcXVhID0gX3JlZjIuYXJlT3duUHJvcHNFcXVhbCxcXG4gICAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmMiRhcmVPd25Qcm9wc0VxdWEgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbHNfc2hhbGxvd0VxdWFsX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZjIkYXJlT3duUHJvcHNFcXVhLFxcbiAgICAgICAgX3JlZjIkYXJlU3RhdGVQcm9wc0VxID0gX3JlZjIuYXJlU3RhdGVQcm9wc0VxdWFsLFxcbiAgICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZjIkYXJlU3RhdGVQcm9wc0VxID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZVN0YXRlUHJvcHNFcSxcXG4gICAgICAgIF9yZWYyJGFyZU1lcmdlZFByb3BzRSA9IF9yZWYyLmFyZU1lcmdlZFByb3BzRXF1YWwsXFxuICAgICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsID0gX3JlZjIkYXJlTWVyZ2VkUHJvcHNFID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZU1lcmdlZFByb3BzRSxcXG4gICAgICAgIGV4dHJhT3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgWydwdXJlJywgJ2FyZVN0YXRlc0VxdWFsJywgJ2FyZU93blByb3BzRXF1YWwnLCAnYXJlU3RhdGVQcm9wc0VxdWFsJywgJ2FyZU1lcmdlZFByb3BzRXF1YWwnXSk7XFxuXFxuICAgIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gbWF0Y2gobWFwU3RhdGVUb1Byb3BzLCBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsICdtYXBTdGF0ZVRvUHJvcHMnKTtcXG4gICAgdmFyIGluaXRNYXBEaXNwYXRjaFRvUHJvcHMgPSBtYXRjaChtYXBEaXNwYXRjaFRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcywgJ21hcERpc3BhdGNoVG9Qcm9wcycpO1xcbiAgICB2YXIgaW5pdE1lcmdlUHJvcHMgPSBtYXRjaChtZXJnZVByb3BzLCBtZXJnZVByb3BzRmFjdG9yaWVzLCAnbWVyZ2VQcm9wcycpO1xcblxcbiAgICByZXR1cm4gY29ubmVjdEhPQyhzZWxlY3RvckZhY3RvcnksIF9leHRlbmRzKHtcXG4gICAgICAvLyB1c2VkIGluIGVycm9yIG1lc3NhZ2VzXFxuICAgICAgbWV0aG9kTmFtZTogJ2Nvbm5lY3QnLFxcblxcbiAgICAgIC8vIHVzZWQgdG8gY29tcHV0ZSBDb25uZWN0J3MgZGlzcGxheU5hbWUgZnJvbSB0aGUgd3JhcHBlZCBjb21wb25lbnQncyBkaXNwbGF5TmFtZS5cXG4gICAgICBnZXREaXNwbGF5TmFtZTogZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUobmFtZSkge1xcbiAgICAgICAgcmV0dXJuICdDb25uZWN0KCcgKyBuYW1lICsgJyknO1xcbiAgICAgIH0sXFxuXFxuICAgICAgLy8gaWYgbWFwU3RhdGVUb1Byb3BzIGlzIGZhbHN5LCB0aGUgQ29ubmVjdCBjb21wb25lbnQgZG9lc24ndCBzdWJzY3JpYmUgdG8gc3RvcmUgc3RhdGUgY2hhbmdlc1xcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogQm9vbGVhbihtYXBTdGF0ZVRvUHJvcHMpLFxcblxcbiAgICAgIC8vIHBhc3NlZCB0aHJvdWdoIHRvIHNlbGVjdG9yRmFjdG9yeVxcbiAgICAgIGluaXRNYXBTdGF0ZVRvUHJvcHM6IGluaXRNYXBTdGF0ZVRvUHJvcHMsXFxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wczogaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcXG4gICAgICBpbml0TWVyZ2VQcm9wczogaW5pdE1lcmdlUHJvcHMsXFxuICAgICAgcHVyZTogcHVyZSxcXG4gICAgICBhcmVTdGF0ZXNFcXVhbDogYXJlU3RhdGVzRXF1YWwsXFxuICAgICAgYXJlT3duUHJvcHNFcXVhbDogYXJlT3duUHJvcHNFcXVhbCxcXG4gICAgICBhcmVTdGF0ZVByb3BzRXF1YWw6IGFyZVN0YXRlUHJvcHNFcXVhbCxcXG4gICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsOiBhcmVNZXJnZWRQcm9wc0VxdWFsXFxuXFxuICAgIH0sIGV4dHJhT3B0aW9ucykpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdCgpKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHNoYWxsb3dFcXVhbDtcXG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcXG5cXG5mdW5jdGlvbiBpcyh4LCB5KSB7XFxuICBpZiAoeCA9PT0geSkge1xcbiAgICByZXR1cm4geCAhPT0gMCB8fCB5ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcXG4gIH0gZWxzZSB7XFxuICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XFxuICBpZiAoaXMob2JqQSwgb2JqQikpIHJldHVybiB0cnVlO1xcblxcbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG5cXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xcbiAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XFxuXFxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcXG5cXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcXG4gICAgaWYgKCFoYXNPd24uY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIWlzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gIHJldHVybiB0cnVlO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc09iamVjdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2KTtcXG5cXG5cXG5cXG5mdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbihtYXBEaXNwYXRjaFRvUHJvcHMpIHtcXG4gIHJldHVybiB0eXBlb2YgbWFwRGlzcGF0Y2hUb1Byb3BzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYlxcXCIgLyogd3JhcE1hcFRvUHJvcHNGdW5jICovXSkobWFwRGlzcGF0Y2hUb1Byb3BzLCAnbWFwRGlzcGF0Y2hUb1Byb3BzJykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc01pc3NpbmcobWFwRGlzcGF0Y2hUb1Byb3BzKSB7XFxuICByZXR1cm4gIW1hcERpc3BhdGNoVG9Qcm9wcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcXG4gICAgcmV0dXJuIHsgZGlzcGF0Y2g6IGRpc3BhdGNoIH07XFxuICB9KSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuZnVuY3Rpb24gd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzT2JqZWN0KG1hcERpc3BhdGNoVG9Qcm9wcykge1xcbiAgcmV0dXJuIG1hcERpc3BhdGNoVG9Qcm9wcyAmJiB0eXBlb2YgbWFwRGlzcGF0Y2hUb1Byb3BzID09PSAnb2JqZWN0JyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkobWFwRGlzcGF0Y2hUb1Byb3BzLCBkaXNwYXRjaCk7XFxuICB9KSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoW3doZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9uLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNPYmplY3RdKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihnbG9iYWwsIG1vZHVsZSkgey8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3BvbnlmaWxsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNCk7XFxuLyogZ2xvYmFsIHdpbmRvdyAqL1xcblxcblxcbnZhciByb290O1xcblxcbmlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSBzZWxmO1xcbn0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSB3aW5kb3c7XFxufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xcbiAgcm9vdCA9IGdsb2JhbDtcXG59IGVsc2UgaWYgKHRydWUpIHtcXG4gIHJvb3QgPSBtb2R1bGU7XFxufSBlbHNlIHtcXG4gIHJvb3QgPSBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xcbn1cXG5cXG52YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcG9ueWZpbGxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHJvb3QpO1xcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHJlc3VsdCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHN5bWJvbE9ic2VydmFibGVQb255ZmlsbDtcXG5mdW5jdGlvbiBzeW1ib2xPYnNlcnZhYmxlUG9ueWZpbGwocm9vdCkge1xcblxcdHZhciByZXN1bHQ7XFxuXFx0dmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xcblxcblxcdGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XFxuXFx0XFx0aWYgKFN5bWJvbC5vYnNlcnZhYmxlKSB7XFxuXFx0XFx0XFx0cmVzdWx0ID0gU3ltYm9sLm9ic2VydmFibGU7XFxuXFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHRyZXN1bHQgPSBTeW1ib2woJ29ic2VydmFibGUnKTtcXG5cXHRcXHRcXHRTeW1ib2wub2JzZXJ2YWJsZSA9IHJlc3VsdDtcXG5cXHRcXHR9XFxuXFx0fSBlbHNlIHtcXG5cXHRcXHRyZXN1bHQgPSAnQEBvYnNlcnZhYmxlJztcXG5cXHR9XFxuXFxuXFx0cmV0dXJuIHJlc3VsdDtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIwNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0KTtcXG5cXG5cXG5cXG5cXG5mdW5jdGlvbiBnZXRVbmRlZmluZWRTdGF0ZUVycm9yTWVzc2FnZShrZXksIGFjdGlvbikge1xcbiAgdmFyIGFjdGlvblR5cGUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGU7XFxuICB2YXIgYWN0aW9uTmFtZSA9IGFjdGlvblR5cGUgJiYgJ1xcXCInICsgYWN0aW9uVHlwZS50b1N0cmluZygpICsgJ1xcXCInIHx8ICdhbiBhY3Rpb24nO1xcblxcbiAgcmV0dXJuICdHaXZlbiBhY3Rpb24gJyArIGFjdGlvbk5hbWUgKyAnLCByZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkLiAnICsgJ1RvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZS4gJyArICdJZiB5b3Ugd2FudCB0aGlzIHJlZHVjZXIgdG8gaG9sZCBubyB2YWx1ZSwgeW91IGNhbiByZXR1cm4gbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC4nO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKGlucHV0U3RhdGUsIHJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSkge1xcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xcbiAgdmFyIGFyZ3VtZW50TmFtZSA9IGFjdGlvbiAmJiBhY3Rpb24udHlwZSA9PT0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fW1xcXCJhXFxcIiAvKiBBY3Rpb25UeXBlcyAqL10uSU5JVCA/ICdwcmVsb2FkZWRTdGF0ZSBhcmd1bWVudCBwYXNzZWQgdG8gY3JlYXRlU3RvcmUnIDogJ3ByZXZpb3VzIHN0YXRlIHJlY2VpdmVkIGJ5IHRoZSByZWR1Y2VyJztcXG5cXG4gIGlmIChyZWR1Y2VyS2V5cy5sZW5ndGggPT09IDApIHtcXG4gICAgcmV0dXJuICdTdG9yZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgcmVkdWNlci4gTWFrZSBzdXJlIHRoZSBhcmd1bWVudCBwYXNzZWQgJyArICd0byBjb21iaW5lUmVkdWNlcnMgaXMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgcmVkdWNlcnMuJztcXG4gIH1cXG5cXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5wdXRTdGF0ZSkpIHtcXG4gICAgcmV0dXJuICdUaGUgJyArIGFyZ3VtZW50TmFtZSArICcgaGFzIHVuZXhwZWN0ZWQgdHlwZSBvZiBcXFwiJyArIHt9LnRvU3RyaW5nLmNhbGwoaW5wdXRTdGF0ZSkubWF0Y2goL1xcXFxzKFthLXp8QS1aXSspLylbMV0gKyAnXFxcIi4gRXhwZWN0ZWQgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyAnICsgKCdrZXlzOiBcXFwiJyArIHJlZHVjZXJLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiJyk7XFxuICB9XFxuXFxuICB2YXIgdW5leHBlY3RlZEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dFN0YXRlKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xcbiAgICByZXR1cm4gIXJlZHVjZXJzLmhhc093blByb3BlcnR5KGtleSkgJiYgIXVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldO1xcbiAgfSk7XFxuXFxuICB1bmV4cGVjdGVkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgdW5leHBlY3RlZEtleUNhY2hlW2tleV0gPSB0cnVlO1xcbiAgfSk7XFxuXFxuICBpZiAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMCkge1xcbiAgICByZXR1cm4gJ1VuZXhwZWN0ZWQgJyArICh1bmV4cGVjdGVkS2V5cy5sZW5ndGggPiAxID8gJ2tleXMnIDogJ2tleScpICsgJyAnICsgKCdcXFwiJyArIHVuZXhwZWN0ZWRLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiIGZvdW5kIGluICcgKyBhcmd1bWVudE5hbWUgKyAnLiAnKSArICdFeHBlY3RlZCB0byBmaW5kIG9uZSBvZiB0aGUga25vd24gcmVkdWNlciBrZXlzIGluc3RlYWQ6ICcgKyAoJ1xcXCInICsgcmVkdWNlcktleXMuam9pbignXFxcIiwgXFxcIicpICsgJ1xcXCIuIFVuZXhwZWN0ZWQga2V5cyB3aWxsIGJlIGlnbm9yZWQuJyk7XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xcbiAgT2JqZWN0LmtleXMocmVkdWNlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICB2YXIgcmVkdWNlciA9IHJlZHVjZXJzW2tleV07XFxuICAgIHZhciBpbml0aWFsU3RhdGUgPSByZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX19bXFxcImFcXFwiIC8qIEFjdGlvblR5cGVzICovXS5JTklUIH0pO1xcblxcbiAgICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgXFxcIicgKyBrZXkgKyAnXFxcIiByZXR1cm5lZCB1bmRlZmluZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAnICsgJ0lmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXIgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCAnICsgJ2V4cGxpY2l0bHkgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgJyArICdub3QgYmUgdW5kZWZpbmVkLiBJZiB5b3UgZG9uXFxcXCd0IHdhbnQgdG8gc2V0IGEgdmFsdWUgZm9yIHRoaXMgcmVkdWNlciwgJyArICd5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLicpO1xcbiAgICB9XFxuXFxuICAgIHZhciB0eXBlID0gJ0BAcmVkdXgvUFJPQkVfVU5LTk9XTl9BQ1RJT05fJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KS5zcGxpdCgnJykuam9pbignLicpO1xcbiAgICBpZiAodHlwZW9mIHJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6IHR5cGUgfSkgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gcHJvYmVkIHdpdGggYSByYW5kb20gdHlwZS4gJyArICgnRG9uXFxcXCd0IHRyeSB0byBoYW5kbGUgJyArIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlU3RvcmVfX1tcXFwiYVxcXCIgLyogQWN0aW9uVHlwZXMgKi9dLklOSVQgKyAnIG9yIG90aGVyIGFjdGlvbnMgaW4gXFxcInJlZHV4LypcXFwiICcpICsgJ25hbWVzcGFjZS4gVGhleSBhcmUgY29uc2lkZXJlZCBwcml2YXRlLiBJbnN0ZWFkLCB5b3UgbXVzdCByZXR1cm4gdGhlICcgKyAnY3VycmVudCBzdGF0ZSBmb3IgYW55IHVua25vd24gYWN0aW9ucywgdW5sZXNzIGl0IGlzIHVuZGVmaW5lZCwgJyArICdpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgJyArICdhY3Rpb24gdHlwZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQsIGJ1dCBjYW4gYmUgbnVsbC4nKTtcXG4gICAgfVxcbiAgfSk7XFxufVxcblxcbi8qKlxcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCByZWR1Y2VyIGZ1bmN0aW9ucywgaW50byBhIHNpbmdsZVxcbiAqIHJlZHVjZXIgZnVuY3Rpb24uIEl0IHdpbGwgY2FsbCBldmVyeSBjaGlsZCByZWR1Y2VyLCBhbmQgZ2F0aGVyIHRoZWlyIHJlc3VsdHNcXG4gKiBpbnRvIGEgc2luZ2xlIHN0YXRlIG9iamVjdCwgd2hvc2Uga2V5cyBjb3JyZXNwb25kIHRvIHRoZSBrZXlzIG9mIHRoZSBwYXNzZWRcXG4gKiByZWR1Y2VyIGZ1bmN0aW9ucy5cXG4gKlxcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWR1Y2VycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGNvcnJlc3BvbmQgdG8gZGlmZmVyZW50XFxuICogcmVkdWNlciBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNvbWJpbmVkIGludG8gb25lLiBPbmUgaGFuZHkgd2F5IHRvIG9idGFpblxcbiAqIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzIHJlZHVjZXJzYCBzeW50YXguIFRoZSByZWR1Y2VycyBtYXkgbmV2ZXIgcmV0dXJuXFxuICogdW5kZWZpbmVkIGZvciBhbnkgYWN0aW9uLiBJbnN0ZWFkLCB0aGV5IHNob3VsZCByZXR1cm4gdGhlaXIgaW5pdGlhbCBzdGF0ZVxcbiAqIGlmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlbSB3YXMgdW5kZWZpbmVkLCBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIGFueVxcbiAqIHVucmVjb2duaXplZCBhY3Rpb24uXFxuICpcXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgcmVkdWNlciBmdW5jdGlvbiB0aGF0IGludm9rZXMgZXZlcnkgcmVkdWNlciBpbnNpZGUgdGhlXFxuICogcGFzc2VkIG9iamVjdCwgYW5kIGJ1aWxkcyBhIHN0YXRlIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlLlxcbiAqL1xcbmZ1bmN0aW9uIGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2Vycykge1xcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xcbiAgdmFyIGZpbmFsUmVkdWNlcnMgPSB7fTtcXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmVkdWNlcktleXMubGVuZ3RoOyBpKyspIHtcXG4gICAgdmFyIGtleSA9IHJlZHVjZXJLZXlzW2ldO1xcblxcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxzX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCdObyByZWR1Y2VyIHByb3ZpZGVkIGZvciBrZXkgXFxcIicgKyBrZXkgKyAnXFxcIicpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICBmaW5hbFJlZHVjZXJzW2tleV0gPSByZWR1Y2Vyc1trZXldO1xcbiAgICB9XFxuICB9XFxuICB2YXIgZmluYWxSZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKGZpbmFsUmVkdWNlcnMpO1xcblxcbiAgdmFyIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHZvaWQgMDtcXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHt9O1xcbiAgfVxcblxcbiAgdmFyIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSB2b2lkIDA7XFxuICB0cnkge1xcbiAgICBhc3NlcnRSZWR1Y2VyU2hhcGUoZmluYWxSZWR1Y2Vycyk7XFxuICB9IGNhdGNoIChlKSB7XFxuICAgIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSBlO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbWJpbmF0aW9uKCkge1xcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xcblxcbiAgICBpZiAoc2hhcGVBc3NlcnRpb25FcnJvcikge1xcbiAgICAgIHRocm93IHNoYXBlQXNzZXJ0aW9uRXJyb3I7XFxuICAgIH1cXG5cXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgICB2YXIgd2FybmluZ01lc3NhZ2UgPSBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKHN0YXRlLCBmaW5hbFJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSk7XFxuICAgICAgaWYgKHdhcm5pbmdNZXNzYWdlKSB7XFxuICAgICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh3YXJuaW5nTWVzc2FnZSk7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XFxuICAgIHZhciBuZXh0U3RhdGUgPSB7fTtcXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGZpbmFsUmVkdWNlcktleXMubGVuZ3RoOyBfaSsrKSB7XFxuICAgICAgdmFyIF9rZXkgPSBmaW5hbFJlZHVjZXJLZXlzW19pXTtcXG4gICAgICB2YXIgcmVkdWNlciA9IGZpbmFsUmVkdWNlcnNbX2tleV07XFxuICAgICAgdmFyIHByZXZpb3VzU3RhdGVGb3JLZXkgPSBzdGF0ZVtfa2V5XTtcXG4gICAgICB2YXIgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91c1N0YXRlRm9yS2V5LCBhY3Rpb24pO1xcbiAgICAgIGlmICh0eXBlb2YgbmV4dFN0YXRlRm9yS2V5ID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IGdldFVuZGVmaW5lZFN0YXRlRXJyb3JNZXNzYWdlKF9rZXksIGFjdGlvbik7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcXG4gICAgICB9XFxuICAgICAgbmV4dFN0YXRlW19rZXldID0gbmV4dFN0YXRlRm9yS2V5O1xcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcXG4gICAgfVxcbiAgICByZXR1cm4gaGFzQ2hhbmdlZCA/IG5leHRTdGF0ZSA6IHN0YXRlO1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDIwNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gYmluZEFjdGlvbkNyZWF0b3JzO1xcbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICByZXR1cm4gZGlzcGF0Y2goYWN0aW9uQ3JlYXRvci5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cykpO1xcbiAgfTtcXG59XFxuXFxuLyoqXFxuICogVHVybnMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgYWN0aW9uIGNyZWF0b3JzLCBpbnRvIGFuIG9iamVjdCB3aXRoIHRoZVxcbiAqIHNhbWUga2V5cywgYnV0IHdpdGggZXZlcnkgZnVuY3Rpb24gd3JhcHBlZCBpbnRvIGEgYGRpc3BhdGNoYCBjYWxsIHNvIHRoZXlcXG4gKiBtYXkgYmUgaW52b2tlZCBkaXJlY3RseS4gVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgbWV0aG9kLCBhcyB5b3UgY2FuIGNhbGxcXG4gKiBgc3RvcmUuZGlzcGF0Y2goTXlBY3Rpb25DcmVhdG9ycy5kb1NvbWV0aGluZygpKWAgeW91cnNlbGYganVzdCBmaW5lLlxcbiAqXFxuICogRm9yIGNvbnZlbmllbmNlLCB5b3UgY2FuIGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQsXFxuICogYW5kIGdldCBhIGZ1bmN0aW9uIGluIHJldHVybi5cXG4gKlxcbiAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBhY3Rpb25DcmVhdG9ycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBhY3Rpb25cXG4gKiBjcmVhdG9yIGZ1bmN0aW9ucy4gT25lIGhhbmR5IHdheSB0byBvYnRhaW4gaXQgaXMgdG8gdXNlIEVTNiBgaW1wb3J0ICogYXNgXFxuICogc3ludGF4LiBZb3UgbWF5IGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbi5cXG4gKlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGRpc3BhdGNoIFRoZSBgZGlzcGF0Y2hgIGZ1bmN0aW9uIGF2YWlsYWJsZSBvbiB5b3VyIFJlZHV4XFxuICogc3RvcmUuXFxuICpcXG4gKiBAcmV0dXJucyB7RnVuY3Rpb258T2JqZWN0fSBUaGUgb2JqZWN0IG1pbWlja2luZyB0aGUgb3JpZ2luYWwgb2JqZWN0LCBidXQgd2l0aFxcbiAqIGV2ZXJ5IGFjdGlvbiBjcmVhdG9yIHdyYXBwZWQgaW50byB0aGUgYGRpc3BhdGNoYCBjYWxsLiBJZiB5b3UgcGFzc2VkIGFcXG4gKiBmdW5jdGlvbiBhcyBgYWN0aW9uQ3JlYXRvcnNgLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYWxzbyBiZSBhIHNpbmdsZVxcbiAqIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9ycyhhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpIHtcXG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgcmV0dXJuIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3JzLCBkaXNwYXRjaCk7XFxuICB9XFxuXFxuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzICE9PSAnb2JqZWN0JyB8fCBhY3Rpb25DcmVhdG9ycyA9PT0gbnVsbCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBY3Rpb25DcmVhdG9ycyBleHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwgaW5zdGVhZCByZWNlaXZlZCAnICsgKGFjdGlvbkNyZWF0b3JzID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGFjdGlvbkNyZWF0b3JzKSArICcuICcgKyAnRGlkIHlvdSB3cml0ZSBcXFwiaW1wb3J0IEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiIGluc3RlYWQgb2YgXFxcImltcG9ydCAqIGFzIEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiPycpO1xcbiAgfVxcblxcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhY3Rpb25DcmVhdG9ycyk7XFxuICB2YXIgYm91bmRBY3Rpb25DcmVhdG9ycyA9IHt9O1xcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xcbiAgICB2YXIgYWN0aW9uQ3JlYXRvciA9IGFjdGlvbkNyZWF0b3JzW2tleV07XFxuICAgIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIGJvdW5kQWN0aW9uQ3JlYXRvcnNba2V5XSA9IGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIGJvdW5kQWN0aW9uQ3JlYXRvcnM7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDIwNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGRlZmF1bHQgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb3NlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc1KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBzdG9yZSBlbmhhbmNlciB0aGF0IGFwcGxpZXMgbWlkZGxld2FyZSB0byB0aGUgZGlzcGF0Y2ggbWV0aG9kXFxuICogb2YgdGhlIFJlZHV4IHN0b3JlLiBUaGlzIGlzIGhhbmR5IGZvciBhIHZhcmlldHkgb2YgdGFza3MsIHN1Y2ggYXMgZXhwcmVzc2luZ1xcbiAqIGFzeW5jaHJvbm91cyBhY3Rpb25zIGluIGEgY29uY2lzZSBtYW5uZXIsIG9yIGxvZ2dpbmcgZXZlcnkgYWN0aW9uIHBheWxvYWQuXFxuICpcXG4gKiBTZWUgYHJlZHV4LXRodW5rYCBwYWNrYWdlIGFzIGFuIGV4YW1wbGUgb2YgdGhlIFJlZHV4IG1pZGRsZXdhcmUuXFxuICpcXG4gKiBCZWNhdXNlIG1pZGRsZXdhcmUgaXMgcG90ZW50aWFsbHkgYXN5bmNocm9ub3VzLCB0aGlzIHNob3VsZCBiZSB0aGUgZmlyc3RcXG4gKiBzdG9yZSBlbmhhbmNlciBpbiB0aGUgY29tcG9zaXRpb24gY2hhaW4uXFxuICpcXG4gKiBOb3RlIHRoYXQgZWFjaCBtaWRkbGV3YXJlIHdpbGwgYmUgZ2l2ZW4gdGhlIGBkaXNwYXRjaGAgYW5kIGBnZXRTdGF0ZWAgZnVuY3Rpb25zXFxuICogYXMgbmFtZWQgYXJndW1lbnRzLlxcbiAqXFxuICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gbWlkZGxld2FyZXMgVGhlIG1pZGRsZXdhcmUgY2hhaW4gdG8gYmUgYXBwbGllZC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgc3RvcmUgZW5oYW5jZXIgYXBwbHlpbmcgdGhlIG1pZGRsZXdhcmUuXFxuICovXFxuZnVuY3Rpb24gYXBwbHlNaWRkbGV3YXJlKCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1pZGRsZXdhcmVzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIG1pZGRsZXdhcmVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIChjcmVhdGVTdG9yZSkge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xcbiAgICAgIHZhciBzdG9yZSA9IGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcik7XFxuICAgICAgdmFyIF9kaXNwYXRjaCA9IHN0b3JlLmRpc3BhdGNoO1xcbiAgICAgIHZhciBjaGFpbiA9IFtdO1xcblxcbiAgICAgIHZhciBtaWRkbGV3YXJlQVBJID0ge1xcbiAgICAgICAgZ2V0U3RhdGU6IHN0b3JlLmdldFN0YXRlLFxcbiAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xcbiAgICAgICAgICByZXR1cm4gX2Rpc3BhdGNoKGFjdGlvbik7XFxuICAgICAgICB9XFxuICAgICAgfTtcXG4gICAgICBjaGFpbiA9IG1pZGRsZXdhcmVzLm1hcChmdW5jdGlvbiAobWlkZGxld2FyZSkge1xcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmUobWlkZGxld2FyZUFQSSk7XFxuICAgICAgfSk7XFxuICAgICAgX2Rpc3BhdGNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb3NlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmFwcGx5KHVuZGVmaW5lZCwgY2hhaW4pKHN0b3JlLmRpc3BhdGNoKTtcXG5cXG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0b3JlLCB7XFxuICAgICAgICBkaXNwYXRjaDogX2Rpc3BhdGNoXFxuICAgICAgfSk7XFxuICAgIH07XFxuICB9O1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNNaXNzaW5nICovXFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzYpO1xcblxcblxcbmZ1bmN0aW9uIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc0Z1bmN0aW9uKG1hcFN0YXRlVG9Qcm9wcykge1xcbiAgcmV0dXJuIHR5cGVvZiBtYXBTdGF0ZVRvUHJvcHMgPT09ICdmdW5jdGlvbicgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX193cmFwTWFwVG9Qcm9wc19fW1xcXCJiXFxcIiAvKiB3cmFwTWFwVG9Qcm9wc0Z1bmMgKi9dKShtYXBTdGF0ZVRvUHJvcHMsICdtYXBTdGF0ZVRvUHJvcHMnKSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuZnVuY3Rpb24gd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZyhtYXBTdGF0ZVRvUHJvcHMpIHtcXG4gIHJldHVybiAhbWFwU3RhdGVUb1Byb3BzID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYVxcXCIgLyogd3JhcE1hcFRvUHJvcHNDb25zdGFudCAqL10pKGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIHt9O1xcbiAgfSkgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFt3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiwgd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZ10pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIwOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdE1lcmdlUHJvcHMgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd3JhcE1lcmdlUHJvcHNGdW5jICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWVyZ2VQcm9wc0lzT21pdHRlZCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc3KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbmZ1bmN0aW9uIGRlZmF1bHRNZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XFxuICByZXR1cm4gX2V4dGVuZHMoe30sIG93blByb3BzLCBzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzKTtcXG59XFxuXFxuZnVuY3Rpb24gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbml0TWVyZ2VQcm9wc1Byb3h5KGRpc3BhdGNoLCBfcmVmKSB7XFxuICAgIHZhciBkaXNwbGF5TmFtZSA9IF9yZWYuZGlzcGxheU5hbWUsXFxuICAgICAgICBwdXJlID0gX3JlZi5wdXJlLFxcbiAgICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbCA9IF9yZWYuYXJlTWVyZ2VkUHJvcHNFcXVhbDtcXG5cXG4gICAgdmFyIGhhc1J1bk9uY2UgPSBmYWxzZTtcXG4gICAgdmFyIG1lcmdlZFByb3BzID0gdm9pZCAwO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VQcm9wc1Byb3h5KHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XFxuICAgICAgdmFyIG5leHRNZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xcblxcbiAgICAgIGlmIChoYXNSdW5PbmNlKSB7XFxuICAgICAgICBpZiAoIXB1cmUgfHwgIWFyZU1lcmdlZFByb3BzRXF1YWwobmV4dE1lcmdlZFByb3BzLCBtZXJnZWRQcm9wcykpIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICBoYXNSdW5PbmNlID0gdHJ1ZTtcXG4gICAgICAgIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xcblxcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShtZXJnZWRQcm9wcywgZGlzcGxheU5hbWUsICdtZXJnZVByb3BzJyk7XFxuICAgICAgfVxcblxcbiAgICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gICAgfTtcXG4gIH07XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbihtZXJnZVByb3BzKSB7XFxuICByZXR1cm4gdHlwZW9mIG1lcmdlUHJvcHMgPT09ICdmdW5jdGlvbicgPyB3cmFwTWVyZ2VQcm9wc0Z1bmMobWVyZ2VQcm9wcykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNPbWl0dGVkKG1lcmdlUHJvcHMpIHtcXG4gIHJldHVybiAhbWVyZ2VQcm9wcyA/IGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIGRlZmF1bHRNZXJnZVByb3BzO1xcbiAgfSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoW3doZW5NZXJnZVByb3BzSXNGdW5jdGlvbiwgd2hlbk1lcmdlUHJvcHNJc09taXR0ZWRdKTtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMjEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5ICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5ICovXFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gZmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX192ZXJpZnlTdWJzZWxlY3RvcnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjExKTtcXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuZnVuY3Rpb24gaW1wdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgZGlzcGF0Y2gpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3Ioc3RhdGUsIG93blByb3BzKSB7XFxuICAgIHJldHVybiBtZXJnZVByb3BzKG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpLCBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKSwgb3duUHJvcHMpO1xcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIGRpc3BhdGNoLCBfcmVmKSB7XFxuICB2YXIgYXJlU3RhdGVzRXF1YWwgPSBfcmVmLmFyZVN0YXRlc0VxdWFsLFxcbiAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmLmFyZU93blByb3BzRXF1YWwsXFxuICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZi5hcmVTdGF0ZVByb3BzRXF1YWw7XFxuXFxuICB2YXIgaGFzUnVuQXRMZWFzdE9uY2UgPSBmYWxzZTtcXG4gIHZhciBzdGF0ZSA9IHZvaWQgMDtcXG4gIHZhciBvd25Qcm9wcyA9IHZvaWQgMDtcXG4gIHZhciBzdGF0ZVByb3BzID0gdm9pZCAwO1xcbiAgdmFyIGRpc3BhdGNoUHJvcHMgPSB2b2lkIDA7XFxuICB2YXIgbWVyZ2VkUHJvcHMgPSB2b2lkIDA7XFxuXFxuICBmdW5jdGlvbiBoYW5kbGVGaXJzdENhbGwoZmlyc3RTdGF0ZSwgZmlyc3RPd25Qcm9wcykge1xcbiAgICBzdGF0ZSA9IGZpcnN0U3RhdGU7XFxuICAgIG93blByb3BzID0gZmlyc3RPd25Qcm9wcztcXG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcbiAgICBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIGhhc1J1bkF0TGVhc3RPbmNlID0gdHJ1ZTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaGFuZGxlTmV3UHJvcHNBbmROZXdTdGF0ZSgpIHtcXG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcblxcbiAgICBpZiAobWFwRGlzcGF0Y2hUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuXFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZU5ld1Byb3BzKCkge1xcbiAgICBpZiAobWFwU3RhdGVUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBzdGF0ZVByb3BzID0gbWFwU3RhdGVUb1Byb3BzKHN0YXRlLCBvd25Qcm9wcyk7XFxuXFxuICAgIGlmIChtYXBEaXNwYXRjaFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMpIGRpc3BhdGNoUHJvcHMgPSBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKTtcXG5cXG4gICAgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaGFuZGxlTmV3U3RhdGUoKSB7XFxuICAgIHZhciBuZXh0U3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcbiAgICB2YXIgc3RhdGVQcm9wc0NoYW5nZWQgPSAhYXJlU3RhdGVQcm9wc0VxdWFsKG5leHRTdGF0ZVByb3BzLCBzdGF0ZVByb3BzKTtcXG4gICAgc3RhdGVQcm9wcyA9IG5leHRTdGF0ZVByb3BzO1xcblxcbiAgICBpZiAoc3RhdGVQcm9wc0NoYW5nZWQpIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuXFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZVN1YnNlcXVlbnRDYWxscyhuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykge1xcbiAgICB2YXIgcHJvcHNDaGFuZ2VkID0gIWFyZU93blByb3BzRXF1YWwobmV4dE93blByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHZhciBzdGF0ZUNoYW5nZWQgPSAhYXJlU3RhdGVzRXF1YWwobmV4dFN0YXRlLCBzdGF0ZSk7XFxuICAgIHN0YXRlID0gbmV4dFN0YXRlO1xcbiAgICBvd25Qcm9wcyA9IG5leHRPd25Qcm9wcztcXG5cXG4gICAgaWYgKHByb3BzQ2hhbmdlZCAmJiBzdGF0ZUNoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wc0FuZE5ld1N0YXRlKCk7XFxuICAgIGlmIChwcm9wc0NoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wcygpO1xcbiAgICBpZiAoc3RhdGVDaGFuZ2VkKSByZXR1cm4gaGFuZGxlTmV3U3RhdGUoKTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIHB1cmVGaW5hbFByb3BzU2VsZWN0b3IobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpIHtcXG4gICAgcmV0dXJuIGhhc1J1bkF0TGVhc3RPbmNlID8gaGFuZGxlU3Vic2VxdWVudENhbGxzKG5leHRTdGF0ZSwgbmV4dE93blByb3BzKSA6IGhhbmRsZUZpcnN0Q2FsbChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcyk7XFxuICB9O1xcbn1cXG5cXG4vLyBUT0RPOiBBZGQgbW9yZSBjb21tZW50c1xcblxcbi8vIElmIHB1cmUgaXMgdHJ1ZSwgdGhlIHNlbGVjdG9yIHJldHVybmVkIGJ5IHNlbGVjdG9yRmFjdG9yeSB3aWxsIG1lbW9pemUgaXRzIHJlc3VsdHMsXFxuLy8gYWxsb3dpbmcgY29ubmVjdEFkdmFuY2VkJ3Mgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHRvIHJldHVybiBmYWxzZSBpZiBmaW5hbFxcbi8vIHByb3BzIGhhdmUgbm90IGNoYW5nZWQuIElmIGZhbHNlLCB0aGUgc2VsZWN0b3Igd2lsbCBhbHdheXMgcmV0dXJuIGEgbmV3XFxuLy8gb2JqZWN0IGFuZCBzaG91bGRDb21wb25lbnRVcGRhdGUgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuXFxuXFxuZnVuY3Rpb24gZmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShkaXNwYXRjaCwgX3JlZjIpIHtcXG4gIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gX3JlZjIuaW5pdE1hcFN0YXRlVG9Qcm9wcyxcXG4gICAgICBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzID0gX3JlZjIuaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcXG4gICAgICBpbml0TWVyZ2VQcm9wcyA9IF9yZWYyLmluaXRNZXJnZVByb3BzLFxcbiAgICAgIG9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFsnaW5pdE1hcFN0YXRlVG9Qcm9wcycsICdpbml0TWFwRGlzcGF0Y2hUb1Byb3BzJywgJ2luaXRNZXJnZVByb3BzJ10pO1xcblxcbiAgdmFyIG1hcFN0YXRlVG9Qcm9wcyA9IGluaXRNYXBTdGF0ZVRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbiAgdmFyIG1hcERpc3BhdGNoVG9Qcm9wcyA9IGluaXRNYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbiAgdmFyIG1lcmdlUHJvcHMgPSBpbml0TWVyZ2VQcm9wcyhkaXNwYXRjaCwgb3B0aW9ucyk7XFxuXFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX192ZXJpZnlTdWJzZWxlY3RvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBvcHRpb25zLmRpc3BsYXlOYW1lKTtcXG4gIH1cXG5cXG4gIHZhciBzZWxlY3RvckZhY3RvcnkgPSBvcHRpb25zLnB1cmUgPyBwdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeSA6IGltcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3Rvcnk7XFxuXFxuICByZXR1cm4gc2VsZWN0b3JGYWN0b3J5KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwYXRjaCwgb3B0aW9ucyk7XFxufVxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHZlcmlmeVN1YnNlbGVjdG9ycztcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5cXG5cXG5mdW5jdGlvbiB2ZXJpZnkoc2VsZWN0b3IsIG1ldGhvZE5hbWUsIGRpc3BsYXlOYW1lKSB7XFxuICBpZiAoIXNlbGVjdG9yKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB2YWx1ZSBmb3IgJyArIG1ldGhvZE5hbWUgKyAnIGluICcgKyBkaXNwbGF5TmFtZSArICcuJyk7XFxuICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09ICdtYXBTdGF0ZVRvUHJvcHMnIHx8IG1ldGhvZE5hbWUgPT09ICdtYXBEaXNwYXRjaFRvUHJvcHMnKSB7XFxuICAgIGlmICghc2VsZWN0b3IuaGFzT3duUHJvcGVydHkoJ2RlcGVuZHNPbk93blByb3BzJykpIHtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnVGhlIHNlbGVjdG9yIGZvciAnICsgbWV0aG9kTmFtZSArICcgb2YgJyArIGRpc3BsYXlOYW1lICsgJyBkaWQgbm90IHNwZWNpZnkgYSB2YWx1ZSBmb3IgZGVwZW5kc09uT3duUHJvcHMuJyk7XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuZnVuY3Rpb24gdmVyaWZ5U3Vic2VsZWN0b3JzKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwbGF5TmFtZSkge1xcbiAgdmVyaWZ5KG1hcFN0YXRlVG9Qcm9wcywgJ21hcFN0YXRlVG9Qcm9wcycsIGRpc3BsYXlOYW1lKTtcXG4gIHZlcmlmeShtYXBEaXNwYXRjaFRvUHJvcHMsICdtYXBEaXNwYXRjaFRvUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxuICB2ZXJpZnkobWVyZ2VQcm9wcywgJ21lcmdlUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDIxMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGdldERpc3BsYXlOYW1lID0gZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoQ29tcCkge1xcbiAgcmV0dXJuIENvbXAuZGlzcGxheU5hbWUgfHwgQ29tcC5uYW1lIHx8ICdDb21wb25lbnQnO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0RGlzcGxheU5hbWUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OSk7XFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxuXFxuXFxuXFxudmFyIGhhbmRsZVN1Ym1pdCA9IGZ1bmN0aW9uIGhhbmRsZVN1Ym1pdChzdWJtaXQsIHByb3BzLCB2YWxpZCwgYXN5bmNWYWxpZGF0ZSwgZmllbGRzKSB7XFxuICB2YXIgZGlzcGF0Y2ggPSBwcm9wcy5kaXNwYXRjaCxcXG4gICAgICBvblN1Ym1pdEZhaWwgPSBwcm9wcy5vblN1Ym1pdEZhaWwsXFxuICAgICAgb25TdWJtaXRTdWNjZXNzID0gcHJvcHMub25TdWJtaXRTdWNjZXNzLFxcbiAgICAgIHN0YXJ0U3VibWl0ID0gcHJvcHMuc3RhcnRTdWJtaXQsXFxuICAgICAgc3RvcFN1Ym1pdCA9IHByb3BzLnN0b3BTdWJtaXQsXFxuICAgICAgc2V0U3VibWl0RmFpbGVkID0gcHJvcHMuc2V0U3VibWl0RmFpbGVkLFxcbiAgICAgIHNldFN1Ym1pdFN1Y2NlZWRlZCA9IHByb3BzLnNldFN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICBzeW5jRXJyb3JzID0gcHJvcHMuc3luY0Vycm9ycyxcXG4gICAgICB0b3VjaCA9IHByb3BzLnRvdWNoLFxcbiAgICAgIHZhbHVlcyA9IHByb3BzLnZhbHVlcyxcXG4gICAgICBwZXJzaXN0ZW50U3VibWl0RXJyb3JzID0gcHJvcHMucGVyc2lzdGVudFN1Ym1pdEVycm9ycztcXG5cXG5cXG4gIHRvdWNoLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpOyAvLyBtYXJrIGFsbCBmaWVsZHMgYXMgdG91Y2hlZFxcblxcbiAgaWYgKHZhbGlkIHx8IHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpIHtcXG4gICAgdmFyIGRvU3VibWl0ID0gZnVuY3Rpb24gZG9TdWJtaXQoKSB7XFxuICAgICAgdmFyIHJlc3VsdCA9IHZvaWQgMDtcXG4gICAgICB0cnkge1xcbiAgICAgICAgcmVzdWx0ID0gc3VibWl0KHZhbHVlcywgZGlzcGF0Y2gsIHByb3BzKTtcXG4gICAgICB9IGNhdGNoIChzdWJtaXRFcnJvcikge1xcbiAgICAgICAgdmFyIGVycm9yID0gc3VibWl0RXJyb3IgaW5zdGFuY2VvZiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IHN1Ym1pdEVycm9yLmVycm9ycyA6IHVuZGVmaW5lZDtcXG4gICAgICAgIHN0b3BTdWJtaXQoZXJyb3IpO1xcbiAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICBvblN1Ym1pdEZhaWwoZXJyb3IsIGRpc3BhdGNoLCBzdWJtaXRFcnJvciwgcHJvcHMpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGVycm9yIHx8IG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICAvLyBpZiB5b3UndmUgcHJvdmlkZWQgYW4gb25TdWJtaXRGYWlsIGNhbGxiYWNrLCBkb24ndCByZS10aHJvdyB0aGUgZXJyb3JcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgdGhyb3cgc3VibWl0RXJyb3I7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fX2RlZmF1bHQoKShyZXN1bHQpKSB7XFxuICAgICAgICBzdGFydFN1Ym1pdCgpO1xcbiAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKGZ1bmN0aW9uIChzdWJtaXRSZXN1bHQpIHtcXG4gICAgICAgICAgc3RvcFN1Ym1pdCgpO1xcbiAgICAgICAgICBzZXRTdWJtaXRTdWNjZWVkZWQoKTtcXG4gICAgICAgICAgaWYgKG9uU3VibWl0U3VjY2Vzcykge1xcbiAgICAgICAgICAgIG9uU3VibWl0U3VjY2VzcyhzdWJtaXRSZXN1bHQsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgcmV0dXJuIHN1Ym1pdFJlc3VsdDtcXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzdWJtaXRFcnJvcikge1xcbiAgICAgICAgICB2YXIgZXJyb3IgPSBzdWJtaXRFcnJvciBpbnN0YW5jZW9mIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fU3VibWlzc2lvbkVycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gc3VibWl0RXJyb3IuZXJyb3JzIDogdW5kZWZpbmVkO1xcbiAgICAgICAgICBzdG9wU3VibWl0KGVycm9yKTtcXG4gICAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgICBpZiAob25TdWJtaXRGYWlsKSB7XFxuICAgICAgICAgICAgb25TdWJtaXRGYWlsKGVycm9yLCBkaXNwYXRjaCwgc3VibWl0RXJyb3IsIHByb3BzKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBpZiAoZXJyb3IgfHwgb25TdWJtaXRGYWlsKSB7XFxuICAgICAgICAgICAgLy8gaWYgeW91J3ZlIHByb3ZpZGVkIGFuIG9uU3VibWl0RmFpbCBjYWxsYmFjaywgZG9uJ3QgcmUtdGhyb3cgdGhlIGVycm9yXFxuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRocm93IHN1Ym1pdEVycm9yO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkKCk7XFxuICAgICAgICBpZiAob25TdWJtaXRTdWNjZXNzKSB7XFxuICAgICAgICAgIG9uU3VibWl0U3VjY2VzcyhyZXN1bHQsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgIH07XFxuXFxuICAgIHZhciBhc3luY1ZhbGlkYXRlUmVzdWx0ID0gYXN5bmNWYWxpZGF0ZSAmJiBhc3luY1ZhbGlkYXRlKCk7XFxuICAgIGlmIChhc3luY1ZhbGlkYXRlUmVzdWx0KSB7XFxuICAgICAgcmV0dXJuIGFzeW5jVmFsaWRhdGVSZXN1bHQudGhlbihmdW5jdGlvbiAoYXN5bmNFcnJvcnMpIHtcXG4gICAgICAgIGlmIChhc3luY0Vycm9ycykge1xcbiAgICAgICAgICB0aHJvdyBhc3luY0Vycm9ycztcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkb1N1Ym1pdCgpO1xcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChhc3luY0Vycm9ycykge1xcbiAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICBvblN1Ym1pdEZhaWwoYXN5bmNFcnJvcnMsIGRpc3BhdGNoLCBudWxsLCBwcm9wcyk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYXN5bmNFcnJvcnMpO1xcbiAgICAgIH0pO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJldHVybiBkb1N1Ym1pdCgpO1xcbiAgICB9XFxuICB9IGVsc2Uge1xcbiAgICBzZXRTdWJtaXRGYWlsZWQuYXBwbHkodW5kZWZpbmVkLCBfdG9Db25zdW1hYmxlQXJyYXkoZmllbGRzKSk7XFxuICAgIGlmIChvblN1Ym1pdEZhaWwpIHtcXG4gICAgICBvblN1Ym1pdEZhaWwoc3luY0Vycm9ycywgZGlzcGF0Y2gsIG51bGwsIHByb3BzKTtcXG4gICAgfVxcbiAgICByZXR1cm4gc3luY0Vycm9ycztcXG4gIH1cXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhbmRsZVN1Ym1pdCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9leHRlbmRhYmxlQnVpbHRpbihjbHMpIHtcXG4gIGZ1bmN0aW9uIEV4dGVuZGFibGVCdWlsdGluKCkge1xcbiAgICBjbHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcXG4gIH1cXG5cXG4gIEV4dGVuZGFibGVCdWlsdGluLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY2xzLnByb3RvdHlwZSwge1xcbiAgICBjb25zdHJ1Y3Rvcjoge1xcbiAgICAgIHZhbHVlOiBjbHMsXFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXFxuICAgICAgd3JpdGFibGU6IHRydWUsXFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXFxuICAgIH1cXG4gIH0pO1xcblxcbiAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRXh0ZW5kYWJsZUJ1aWx0aW4sIGNscyk7XFxuICB9IGVsc2Uge1xcbiAgICBFeHRlbmRhYmxlQnVpbHRpbi5fX3Byb3RvX18gPSBjbHM7XFxuICB9XFxuXFxuICByZXR1cm4gRXh0ZW5kYWJsZUJ1aWx0aW47XFxufVxcblxcbnZhciBFeHRlbmRhYmxlRXJyb3IgPSBmdW5jdGlvbiAoX2V4dGVuZGFibGVCdWlsdGluMikge1xcbiAgX2luaGVyaXRzKEV4dGVuZGFibGVFcnJvciwgX2V4dGVuZGFibGVCdWlsdGluMik7XFxuXFxuICBmdW5jdGlvbiBFeHRlbmRhYmxlRXJyb3IoKSB7XFxuICAgIHZhciBtZXNzYWdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcXG5cXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV4dGVuZGFibGVFcnJvcik7XFxuXFxuICAgIC8vIGV4dGVuZGluZyBFcnJvciBpcyB3ZWlyZCBhbmQgZG9lcyBub3QgcHJvcGFnYXRlIGBtZXNzYWdlYFxcbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRXh0ZW5kYWJsZUVycm9yLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRXh0ZW5kYWJsZUVycm9yKSkuY2FsbCh0aGlzLCBtZXNzYWdlKSk7XFxuXFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ21lc3NhZ2UnLCB7XFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxcbiAgICAgIHZhbHVlOiBtZXNzYWdlLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXFxuICAgIH0pO1xcblxcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogX3RoaXMuY29uc3RydWN0b3IubmFtZSxcXG4gICAgICB3cml0YWJsZTogdHJ1ZVxcbiAgICB9KTtcXG5cXG4gICAgaWYgKEVycm9yLmhhc093blByb3BlcnR5KCdjYXB0dXJlU3RhY2tUcmFjZScpKSB7XFxuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoX3RoaXMsIF90aGlzLmNvbnN0cnVjdG9yKTtcXG4gICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMpO1xcbiAgICB9XFxuXFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ3N0YWNrJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogbmV3IEVycm9yKG1lc3NhZ2UpLnN0YWNrLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXFxuICAgIH0pO1xcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICByZXR1cm4gRXh0ZW5kYWJsZUVycm9yO1xcbn0oX2V4dGVuZGFibGVCdWlsdGluKEVycm9yKSk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoRXh0ZW5kYWJsZUVycm9yKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3NpbGVuY2VFdmVudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MCk7XFxuXFxuXFxudmFyIHNpbGVuY2VFdmVudHMgPSBmdW5jdGlvbiBzaWxlbmNlRXZlbnRzKGZuKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zaWxlbmNlRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50KSA/IGZuLmFwcGx5KHVuZGVmaW5lZCwgYXJncykgOiBmbi5hcHBseSh1bmRlZmluZWQsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzaWxlbmNlRXZlbnRzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fKTtcXG5cXG5cXG52YXIgYXN5bmNWYWxpZGF0aW9uID0gZnVuY3Rpb24gYXN5bmNWYWxpZGF0aW9uKGZuLCBzdGFydCwgc3RvcCwgZmllbGQpIHtcXG4gIHN0YXJ0KGZpZWxkKTtcXG4gIHZhciBwcm9taXNlID0gZm4oKTtcXG4gIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0KCkocHJvbWlzZSkpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdhc3luY1ZhbGlkYXRlIGZ1bmN0aW9uIHBhc3NlZCB0byByZWR1eEZvcm0gbXVzdCByZXR1cm4gYSBwcm9taXNlJyk7XFxuICB9XFxuICB2YXIgaGFuZGxlRXJyb3JzID0gZnVuY3Rpb24gaGFuZGxlRXJyb3JzKHJlamVjdGVkKSB7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZXJyb3JzKSB7XFxuICAgICAgaWYgKGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCkge1xcbiAgICAgICAgc3RvcChlcnJvcnMpO1xcbiAgICAgICAgcmV0dXJuIGVycm9ycztcXG4gICAgICB9IGVsc2UgaWYgKHJlamVjdGVkKSB7XFxuICAgICAgICBzdG9wKCk7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FzeW5jaHJvbm91cyB2YWxpZGF0aW9uIHByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGhvdXQgZXJyb3JzLicpO1xcbiAgICAgIH1cXG4gICAgICBzdG9wKCk7XFxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xcbiAgICB9O1xcbiAgfTtcXG4gIHJldHVybiBwcm9taXNlLnRoZW4oaGFuZGxlRXJyb3JzKGZhbHNlKSwgaGFuZGxlRXJyb3JzKHRydWUpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFzeW5jVmFsaWRhdGlvbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUgPSBmdW5jdGlvbiBkZWZhdWx0U2hvdWxkQXN5bmNWYWxpZGF0ZShfcmVmKSB7XFxuICB2YXIgaW5pdGlhbGl6ZWQgPSBfcmVmLmluaXRpYWxpemVkLFxcbiAgICAgIHRyaWdnZXIgPSBfcmVmLnRyaWdnZXIsXFxuICAgICAgcHJpc3RpbmUgPSBfcmVmLnByaXN0aW5lLFxcbiAgICAgIHN5bmNWYWxpZGF0aW9uUGFzc2VzID0gX3JlZi5zeW5jVmFsaWRhdGlvblBhc3NlcztcXG5cXG4gIGlmICghc3luY1ZhbGlkYXRpb25QYXNzZXMpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgc3dpdGNoICh0cmlnZ2VyKSB7XFxuICAgIGNhc2UgJ2JsdXInOlxcbiAgICAgIC8vIGJsdXJyaW5nXFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIGNhc2UgJ3N1Ym1pdCc6XFxuICAgICAgLy8gc3VibWl0dGluZywgc28gb25seSBhc3luYyB2YWxpZGF0ZSBpZiBmb3JtIGlzIGRpcnR5IG9yIHdhcyBuZXZlciBpbml0aWFsaXplZFxcbiAgICAgIC8vIGNvbnZlcnNlbHksIERPTidUIGFzeW5jIHZhbGlkYXRlIGlmIHRoZSBmb3JtIGlzIHByaXN0aW5lIGp1c3QgYXMgaXQgd2FzIGluaXRpYWxpemVkXFxuICAgICAgcmV0dXJuICFwcmlzdGluZSB8fCAhaW5pdGlhbGl6ZWQ7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGRlZmF1bHRTaG91bGRWYWxpZGF0ZSA9IGZ1bmN0aW9uIGRlZmF1bHRTaG91bGRWYWxpZGF0ZShfcmVmKSB7XFxuICB2YXIgdmFsdWVzID0gX3JlZi52YWx1ZXMsXFxuICAgICAgbmV4dFByb3BzID0gX3JlZi5uZXh0UHJvcHMsXFxuICAgICAgaW5pdGlhbFJlbmRlciA9IF9yZWYuaW5pdGlhbFJlbmRlcixcXG4gICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzID0gX3JlZi5sYXN0RmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgIGZpZWxkVmFsaWRhdG9yS2V5cyA9IF9yZWYuZmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgIHN0cnVjdHVyZSA9IF9yZWYuc3RydWN0dXJlO1xcblxcbiAgaWYgKGluaXRpYWxSZW5kZXIpIHtcXG4gICAgcmV0dXJuIHRydWU7XFxuICB9XFxuICByZXR1cm4gIXN0cnVjdHVyZS5kZWVwRXF1YWwodmFsdWVzLCBuZXh0UHJvcHMudmFsdWVzKSB8fCAhc3RydWN0dXJlLmRlZXBFcXVhbChsYXN0RmllbGRWYWxpZGF0b3JLZXlzLCBmaWVsZFZhbGlkYXRvcktleXMpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmYXVsdFNob3VsZFZhbGlkYXRlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxcblxcbnZhciBzcGxpY2UgPSBmdW5jdGlvbiBzcGxpY2UoYXJyYXksIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICBhcnJheSA9IGFycmF5IHx8IFtdO1xcblxcbiAgaWYgKGluZGV4IDwgYXJyYXkubGVuZ3RoKSB7XFxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICFyZW1vdmVOdW0pIHtcXG4gICAgICAvLyBpbnNlcnRpbmcgdW5kZWZpbmVkXFxuICAgICAgdmFyIF9jb3B5MiA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTtcXG4gICAgICBfY29weTIuc3BsaWNlKGluZGV4LCAwLCBudWxsKTtcXG4gICAgICBfY29weTJbaW5kZXhdID0gdW5kZWZpbmVkO1xcbiAgICAgIHJldHVybiBfY29weTI7XFxuICAgIH1cXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcXG4gICAgICB2YXIgX2NvcHkzID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhcnJheSkpO1xcbiAgICAgIF9jb3B5My5zcGxpY2UoaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUpOyAvLyByZW1vdmluZyBhbmQgYWRkaW5nXFxuICAgICAgcmV0dXJuIF9jb3B5MztcXG4gICAgfVxcbiAgICB2YXIgX2NvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICAgIF9jb3B5LnNwbGljZShpbmRleCwgcmVtb3ZlTnVtKTsgLy8gcmVtb3ZpbmdcXG4gICAgcmV0dXJuIF9jb3B5O1xcbiAgfVxcbiAgaWYgKHJlbW92ZU51bSkge1xcbiAgICAvLyB0cnlpbmcgdG8gcmVtb3ZlIG5vbi1leGlzdGFudCBpdGVtOiByZXR1cm4gb3JpZ2luYWwgYXJyYXlcXG4gICAgcmV0dXJuIGFycmF5O1xcbiAgfVxcbiAgLy8gdHJ5aW5nIHRvIGFkZCBvdXRzaWRlIG9mIHJhbmdlOiBqdXN0IHNldCB2YWx1ZVxcbiAgdmFyIGNvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICBjb3B5W2luZGV4XSA9IHZhbHVlO1xcbiAgcmV0dXJuIGNvcHk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzcGxpY2UpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG5cXG52YXIgZ2V0SW4gPSBmdW5jdGlvbiBnZXRJbihzdGF0ZSwgZmllbGQpIHtcXG4gIGlmICghc3RhdGUpIHtcXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcblxcbiAgdmFyIHBhdGggPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKTtcXG4gIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcXG4gIGlmICghbGVuZ3RoKSB7XFxuICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICB9XFxuXFxuICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAmJiAhIXJlc3VsdDsgKytpKSB7XFxuICAgIHJlc3VsdCA9IHJlc3VsdFtwYXRoW2ldXTtcXG4gIH1cXG5cXG4gIHJldHVybiByZXN1bHQ7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRJbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xcblxcblxcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG52YXIgc2V0SW5XaXRoUGF0aCA9IGZ1bmN0aW9uIHNldEluV2l0aFBhdGgoc3RhdGUsIHZhbHVlLCBwYXRoLCBwYXRoSW5kZXgpIHtcXG4gIGlmIChwYXRoSW5kZXggPj0gcGF0aC5sZW5ndGgpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcblxcbiAgdmFyIGZpcnN0ID0gcGF0aFtwYXRoSW5kZXhdO1xcbiAgdmFyIG5leHQgPSBzZXRJbldpdGhQYXRoKHN0YXRlICYmIHN0YXRlW2ZpcnN0XSwgdmFsdWUsIHBhdGgsIHBhdGhJbmRleCArIDEpO1xcblxcbiAgaWYgKCFzdGF0ZSkge1xcbiAgICB2YXIgaW5pdGlhbGl6ZWQgPSBpc05hTihmaXJzdCkgPyB7fSA6IFtdO1xcbiAgICBpbml0aWFsaXplZFtmaXJzdF0gPSBuZXh0O1xcbiAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7XFxuICB9XFxuXFxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZSkpIHtcXG4gICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoc3RhdGUpO1xcbiAgICBjb3B5W2ZpcnN0XSA9IG5leHQ7XFxuICAgIHJldHVybiBjb3B5O1xcbiAgfVxcblxcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgX2RlZmluZVByb3BlcnR5KHt9LCBmaXJzdCwgbmV4dCkpO1xcbn07XFxuXFxudmFyIHNldEluID0gZnVuY3Rpb24gc2V0SW4oc3RhdGUsIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHNldEluV2l0aFBhdGgoc3RhdGUsIHZhbHVlLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKSwgMCk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRJbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Mik7XFxuXFxuXFxuXFxudmFyIGN1c3RvbWl6ZXIgPSBmdW5jdGlvbiBjdXN0b21pemVyKG9iaiwgb3RoZXIpIHtcXG4gIGlmIChvYmogPT09IG90aGVyKSByZXR1cm4gdHJ1ZTtcXG4gIGlmICgob2JqID09IG51bGwgfHwgb2JqID09PSAnJyB8fCBvYmogPT09IGZhbHNlKSAmJiAob3RoZXIgPT0gbnVsbCB8fCBvdGhlciA9PT0gJycgfHwgb3RoZXIgPT09IGZhbHNlKSkgcmV0dXJuIHRydWU7XFxuXFxuICBpZiAob2JqICYmIG90aGVyICYmIG9iai5fZXJyb3IgIT09IG90aGVyLl9lcnJvcikgcmV0dXJuIGZhbHNlO1xcbiAgaWYgKG9iaiAmJiBvdGhlciAmJiBvYmouX3dhcm5pbmcgIT09IG90aGVyLl93YXJuaW5nKSByZXR1cm4gZmFsc2U7XFxufTtcXG5cXG52YXIgZGVlcEVxdWFsID0gZnVuY3Rpb24gZGVlcEVxdWFsKGEsIGIpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoYSwgYiwgY3VzdG9taXplcik7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChkZWVwRXF1YWwpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxudmFyIGRlbGV0ZUluV2l0aFBhdGggPSBmdW5jdGlvbiBkZWxldGVJbldpdGhQYXRoKHN0YXRlLCBmaXJzdCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIHJlc3RbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQgfHwgZmlyc3QgPT09IHVuZGVmaW5lZCkge1xcbiAgICByZXR1cm4gc3RhdGU7XFxuICB9XFxuICBpZiAocmVzdC5sZW5ndGgpIHtcXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgICAgaWYgKGZpcnN0IDwgc3RhdGUubGVuZ3RoKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZSAmJiBzdGF0ZVtmaXJzdF1dLmNvbmNhdChyZXN0KSk7XFxuICAgICAgICBpZiAocmVzdWx0ICE9PSBzdGF0ZVtmaXJzdF0pIHtcXG4gICAgICAgICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHN0YXRlKSk7XFxuICAgICAgICAgIGNvcHlbZmlyc3RdID0gcmVzdWx0O1xcbiAgICAgICAgICByZXR1cm4gY29weTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIHN0YXRlO1xcbiAgICB9XFxuICAgIGlmIChmaXJzdCBpbiBzdGF0ZSkge1xcbiAgICAgIHZhciBfcmVzdWx0ID0gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZSAmJiBzdGF0ZVtmaXJzdF1dLmNvbmNhdChyZXN0KSk7XFxuICAgICAgcmV0dXJuIHN0YXRlW2ZpcnN0XSA9PT0gX3Jlc3VsdCA/IHN0YXRlIDogX2V4dGVuZHMoe30sIHN0YXRlLCBfZGVmaW5lUHJvcGVydHkoe30sIGZpcnN0LCBfcmVzdWx0KSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgIGlmIChpc05hTihmaXJzdCkpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZWxldGUgbm9uLW51bWVyaWNhbCBpbmRleCBmcm9tIGFuIGFycmF5Jyk7XFxuICAgIH1cXG4gICAgaWYgKGZpcnN0IDwgc3RhdGUubGVuZ3RoKSB7XFxuICAgICAgdmFyIF9jb3B5ID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShzdGF0ZSkpO1xcbiAgICAgIF9jb3B5LnNwbGljZShmaXJzdCwgMSk7XFxuICAgICAgcmV0dXJuIF9jb3B5O1xcbiAgICB9XFxuICAgIHJldHVybiBzdGF0ZTtcXG4gIH1cXG4gIGlmIChmaXJzdCBpbiBzdGF0ZSkge1xcbiAgICB2YXIgX2NvcHkyID0gX2V4dGVuZHMoe30sIHN0YXRlKTtcXG4gICAgZGVsZXRlIF9jb3B5MltmaXJzdF07XFxuICAgIHJldHVybiBfY29weTI7XFxuICB9XFxuICByZXR1cm4gc3RhdGU7XFxufTtcXG5cXG52YXIgZGVsZXRlSW4gPSBmdW5jdGlvbiBkZWxldGVJbihzdGF0ZSwgZmllbGQpIHtcXG4gIHJldHVybiBkZWxldGVJbldpdGhQYXRoLmFwcGx5KHVuZGVmaW5lZCwgW3N0YXRlXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZmllbGQpKSkpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVsZXRlSW4pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGtleXMgPSBmdW5jdGlvbiBrZXlzKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPyBPYmplY3Qua2V5cyh2YWx1ZSkgOiBbXTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGtleXMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcbnZhciB0b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xcbn07XFxuXFxudmFyIGdldEVycm9yID0gZnVuY3Rpb24gZ2V0RXJyb3IodmFsdWUsIHZhbHVlcywgcHJvcHMsIHZhbGlkYXRvcnMpIHtcXG4gIHZhciBhcnJheSA9IHRvQXJyYXkodmFsaWRhdG9ycyk7XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBlcnJvciA9IGFycmF5W2ldKHZhbHVlLCB2YWx1ZXMsIHByb3BzKTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICB9XFxuICB9XFxufTtcXG5cXG52YXIgZ2VuZXJhdGVWYWxpZGF0b3IgPSBmdW5jdGlvbiBnZW5lcmF0ZVZhbGlkYXRvcih2YWxpZGF0b3JzLCBfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BzKSB7XFxuICAgIHZhciBlcnJvcnMgPSB7fTtcXG4gICAgT2JqZWN0LmtleXModmFsaWRhdG9ycykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgIHZhciB2YWx1ZSA9IGdldEluKHZhbHVlcywgbmFtZSk7XFxuICAgICAgdmFyIGVycm9yID0gZ2V0RXJyb3IodmFsdWUsIHZhbHVlcywgcHJvcHMsIHZhbGlkYXRvcnNbbmFtZV0pO1xcbiAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgZXJyb3JzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uc2V0SW4oZXJyb3JzLCBuYW1lLCBlcnJvcik7XFxuICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIGVycm9ycztcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZW5lcmF0ZVZhbGlkYXRvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjI2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgZ2V0RXJyb3JLZXlzID0gZnVuY3Rpb24gZ2V0RXJyb3JLZXlzKG5hbWUsIHR5cGUpIHtcXG4gIHN3aXRjaCAodHlwZSkge1xcbiAgICBjYXNlICdGaWVsZCc6XFxuICAgICAgcmV0dXJuIFtuYW1lLCBuYW1lICsgJy5fZXJyb3InXTtcXG4gICAgY2FzZSAnRmllbGRBcnJheSc6XFxuICAgICAgcmV0dXJuIFtuYW1lICsgJy5fZXJyb3InXTtcXG4gICAgZGVmYXVsdDpcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZmllbGQgdHlwZScpO1xcbiAgfVxcbn07XFxuXFxudmFyIGNyZWF0ZUhhc0Vycm9yID0gZnVuY3Rpb24gY3JlYXRlSGFzRXJyb3IoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG5cXG4gIHZhciBoYXNFcnJvciA9IGZ1bmN0aW9uIGhhc0Vycm9yKGZpZWxkLCBzeW5jRXJyb3JzLCBhc3luY0Vycm9ycywgc3VibWl0RXJyb3JzKSB7XFxuICAgIGlmICghc3luY0Vycm9ycyAmJiAhYXN5bmNFcnJvcnMgJiYgIXN1Ym1pdEVycm9ycykge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcblxcbiAgICB2YXIgbmFtZSA9IGdldEluKGZpZWxkLCAnbmFtZScpO1xcbiAgICB2YXIgdHlwZSA9IGdldEluKGZpZWxkLCAndHlwZScpO1xcbiAgICByZXR1cm4gZ2V0RXJyb3JLZXlzKG5hbWUsIHR5cGUpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzeW5jRXJyb3JzLCBrZXkpIHx8IGdldEluKGFzeW5jRXJyb3JzLCBrZXkpIHx8IGdldEluKHN1Ym1pdEVycm9ycywga2V5KTtcXG4gICAgfSk7XFxuICB9O1xcbiAgcmV0dXJuIGhhc0Vycm9yO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzRXJyb3IpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZUZpZWxkID0gZnVuY3Rpb24gY3JlYXRlRmllbGQoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBzZXRJbiA9IF9yZWYuc2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYudG9KUztcXG5cXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsLFxcbiAgICBnZXRJbjogZ2V0SW4sXFxuICAgIHRvSlM6IHRvSlNcXG4gIH0pO1xcblxcbiAgdmFyIEZpZWxkID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKEZpZWxkLCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGQocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGQpO1xcblxcbiAgICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGaWVsZC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkIG11c3QgYmUgaW5zaWRlIGEgY29tcG9uZW50IGRlY29yYXRlZCB3aXRoIHJlZHV4Rm9ybSgpJyk7XFxuICAgICAgfVxcblxcbiAgICAgIF90aGlzLm5vcm1hbGl6ZSA9IF90aGlzLm5vcm1hbGl6ZS5iaW5kKF90aGlzKTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkLCBbe1xcbiAgICAgIGtleTogJ3Nob3VsZENvbXBvbmVudFVwZGF0ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIG5leHRQcm9wcywgbmV4dFN0YXRlKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyKHRoaXMubmFtZSwgJ0ZpZWxkJywgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnByb3BzLnZhbGlkYXRlO1xcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnByb3BzLndhcm47XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm5hbWUgIT09IG5leHRQcm9wcy5uYW1lKSB7XFxuICAgICAgICAgIC8vIHVucmVnaXN0ZXIgb2xkIG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgICAgICAvLyByZWdpc3RlciBuZXcgbmFtZVxcbiAgICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgbmV4dFByb3BzLm5hbWUpLCAnRmllbGQnKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHRoaXMucHJvcHMud2l0aFJlZiwgJ0lmIHlvdSB3YW50IHRvIGFjY2VzcyBnZXRSZW5kZXJlZENvbXBvbmVudCgpLCAnICsgJ3lvdSBtdXN0IHNwZWNpZnkgYSB3aXRoUmVmIHByb3AgdG8gRmllbGQnKTtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFJlbmRlcmVkQ29tcG9uZW50KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbm9ybWFsaXplJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gbm9ybWFsaXplKG5hbWUsIHZhbHVlKSB7XFxuICAgICAgICB2YXIgbm9ybWFsaXplID0gdGhpcy5wcm9wcy5ub3JtYWxpemU7XFxuXFxuICAgICAgICBpZiAoIW5vcm1hbGl6ZSkge1xcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5nZXRWYWx1ZXMoKTtcXG4gICAgICAgIHZhciBwcmV2aW91c1ZhbHVlID0gdGhpcy52YWx1ZTtcXG4gICAgICAgIHZhciBuZXh0VmFsdWVzID0gc2V0SW4ocHJldmlvdXNWYWx1ZXMsIG5hbWUsIHZhbHVlKTtcXG4gICAgICAgIHJldHVybiBub3JtYWxpemUodmFsdWUsIHByZXZpb3VzVmFsdWUsIG5leHRWYWx1ZXMsIHByZXZpb3VzVmFsdWVzKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKENvbm5lY3RlZEZpZWxkLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXFxuICAgICAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLmNvbnRleHQsIHRoaXMucHJvcHMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZGlydHknLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuICF0aGlzLnByaXN0aW5lO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZCAmJiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlKCk7XFxuICAgICAgfVxcbiAgICB9XSk7XFxuXFxuICAgIHJldHVybiBGaWVsZDtcXG4gIH0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG4gIEZpZWxkLnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZy5pc1JlcXVpcmVkLFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUoW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nXSkuaXNSZXF1aXJlZCxcXG4gICAgZm9ybWF0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgbm9ybWFsaXplOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25CbHVyOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25DaGFuZ2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBvbkZvY3VzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25EcmFnU3RhcnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBvbkRyb3A6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwYXJzZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB2YWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5hcnJheU9mKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jKV0pLFxcbiAgICB3YXJuOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmFycmF5T2YoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMpXSksXFxuICAgIHdpdGhSZWY6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sXFxuICB9O1xcbiAgRmllbGQuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY3JlYXRlRmllbGRQcm9wc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMxKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gWydfcmVkdXhGb3JtJ107XFxuXFxudmFyIGNyZWF0ZUNvbm5lY3RlZEZpZWxkID0gZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGVkRmllbGQoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIHZhciBlcnJvciA9IGdldEluKHN5bmNFcnJvcnMsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSBlcnJvciBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgZXJyb3Igc3RydWN0dXJlIHdoZXJlXFxuICAgIC8vIGl0IGNhbiBiZSBzZXQgZGlyZWN0bHksIGl0IG1pZ2h0IG5lZWQgdG8gYmUgdW53cmFwcGVkIGZyb20gdGhlIF9lcnJvciBwcm9wZXJ0eVxcbiAgICByZXR1cm4gZXJyb3IgJiYgZXJyb3IuX2Vycm9yID8gZXJyb3IuX2Vycm9yIDogZXJyb3I7XFxuICB9O1xcblxcbiAgdmFyIGdldFN5bmNXYXJuaW5nID0gZnVuY3Rpb24gZ2V0U3luY1dhcm5pbmcoc3luY1dhcm5pbmdzLCBuYW1lKSB7XFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lKTtcXG4gICAgLy8gQmVjYXVzZSB0aGUgd2FybmluZyBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgd2FybmluZyBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX3dhcm5pbmcgcHJvcGVydHlcXG4gICAgcmV0dXJuIHdhcm5pbmcgJiYgd2FybmluZy5fd2FybmluZyA/IHdhcm5pbmcuX3dhcm5pbmcgOiB3YXJuaW5nO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZCwgX0NvbXBvbmVudCk7XFxuXFxuICAgIGZ1bmN0aW9uIENvbm5lY3RlZEZpZWxkKHByb3BzKSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbm5lY3RlZEZpZWxkKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihDb25uZWN0ZWRGaWVsZCkpLmNhbGwodGhpcywgcHJvcHMpKTtcXG5cXG4gICAgICBfdGhpcy5oYW5kbGVDaGFuZ2UgPSBfdGhpcy5oYW5kbGVDaGFuZ2UuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRm9jdXMgPSBfdGhpcy5oYW5kbGVGb2N1cy5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVCbHVyID0gX3RoaXMuaGFuZGxlQmx1ci5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVEcmFnU3RhcnQgPSBfdGhpcy5oYW5kbGVEcmFnU3RhcnQuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRHJvcCA9IF90aGlzLmhhbmRsZURyb3AuYmluZChfdGhpcyk7XFxuICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuXFxuICAgIF9jcmVhdGVDbGFzcyhDb25uZWN0ZWRGaWVsZCwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHZhciBuZXh0UHJvcHNLZXlzID0gT2JqZWN0LmtleXMobmV4dFByb3BzKTtcXG4gICAgICAgIHZhciB0aGlzUHJvcHNLZXlzID0gT2JqZWN0LmtleXModGhpcy5wcm9wcyk7XFxuICAgICAgICByZXR1cm4gbmV4dFByb3BzS2V5cy5sZW5ndGggIT09IHRoaXNQcm9wc0tleXMubGVuZ3RoIHx8IG5leHRQcm9wc0tleXMuc29tZShmdW5jdGlvbiAocHJvcCkge1xcbiAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczIucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdpc1ByaXN0aW5lJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaXNQcmlzdGluZSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnByaXN0aW5lO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFZhbHVlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVDaGFuZ2UnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcXG4gICAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMubmFtZSxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wcy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wcy5wYXJzZSxcXG4gICAgICAgICAgICBub3JtYWxpemUgPSBfcHJvcHMubm9ybWFsaXplLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlID0gX3Byb3BzLm9uQ2hhbmdlLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlID0gX3Byb3BzLnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xcbiAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XFxuICAgICAgICAgIG9uQ2hhbmdlKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZSBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5jaGFuZ2UobmFtZSwgbmV3VmFsdWUpKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVGb2N1cycsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wczIubmFtZSxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wczIuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgb25Gb2N1cyA9IF9wcm9wczIub25Gb2N1cyxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMi5fcmVkdXhGb3JtO1xcblxcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkZvY3VzKSB7XFxuICAgICAgICAgIG9uRm9jdXMoX2V4dGVuZHMoe30sIGV2ZW50LCB7XFxuICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XFxuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCkge1xcbiAgICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmZvY3VzKG5hbWUpKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVCbHVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMzLm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMzLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIHBhcnNlID0gX3Byb3BzMy5wYXJzZSxcXG4gICAgICAgICAgICBub3JtYWxpemUgPSBfcHJvcHMzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBvbkJsdXIgPSBfcHJvcHMzLm9uQmx1cixcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMy5fcmVkdXhGb3JtLFxcbiAgICAgICAgICAgIF92YWx1ZSA9IF9wcm9wczMuX3ZhbHVlLFxcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSBfcHJvcHMzLnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICAvLyBmb3IgY2hlY2tib3ggYW5kIHJhZGlvLCBpZiB0aGUgdmFsdWUgcHJvcGVydHkgb2YgY2hlY2tib3ggb3IgcmFkaW8gZXF1YWxzXFxuICAgICAgICAvLyB0aGUgdmFsdWUgcGFzc2VkIGJ5IGJsdXIgZXZlbnQsIHRoZW4gZmlyZSBibHVyIGFjdGlvbiB3aXRoIHByZXZpb3VzVmFsdWUuXFxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IF92YWx1ZSAmJiBfdmFsdWUgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZpb3VzVmFsdWU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xcbiAgICAgICAgaWYgKG9uQmx1cikge1xcbiAgICAgICAgICBvbkJsdXIoX2V4dGVuZHMoe30sIGV2ZW50LCB7XFxuICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XFxuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pLCBuZXdWYWx1ZSwgcHJldmlvdXNWYWx1ZSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoIWRlZmF1bHRQcmV2ZW50ZWQpIHtcXG4gICAgICAgICAgLy8gZGlzcGF0Y2ggYmx1ciBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5ibHVyKG5hbWUsIG5ld1ZhbHVlKSk7XFxuXFxuICAgICAgICAgIC8vIGNhbGwgcG9zdC1ibHVyIGNhbGxiYWNrXFxuICAgICAgICAgIGlmIChfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgICBfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUobmFtZSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRHJhZ1N0YXJ0JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRHJhZ1N0YXJ0KGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzNCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPSBfcHJvcHM0Lm9uRHJhZ1N0YXJ0LFxcbiAgICAgICAgICAgIHZhbHVlID0gX3Byb3BzNC52YWx1ZTtcXG5cXG4gICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9ldmVudENvbnN0c19fW1xcXCJhXFxcIiAvKiBkYXRhS2V5ICovXSwgdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xcblxcbiAgICAgICAgaWYgKG9uRHJhZ1N0YXJ0KSB7XFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0KGV2ZW50KTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVEcm9wJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRHJvcChldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczUgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHM1Lm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHM1LmRpc3BhdGNoLFxcbiAgICAgICAgICAgIG9uRHJvcCA9IF9wcm9wczUub25Ecm9wLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM1Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IF9wcm9wczUudmFsdWU7XFxuXFxuICAgICAgICB2YXIgbmV3VmFsdWUgPSBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfX1tcXFwiYVxcXCIgLyogZGF0YUtleSAqL10pO1xcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkRyb3ApIHtcXG4gICAgICAgICAgb25Ecm9wKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZSBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5jaGFuZ2UobmFtZSwgbmV3VmFsdWUpKTtcXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgX3Byb3BzNiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzNi5jb21wb25lbnQsXFxuICAgICAgICAgICAgd2l0aFJlZiA9IF9wcm9wczYud2l0aFJlZixcXG4gICAgICAgICAgICBuYW1lID0gX3Byb3BzNi5uYW1lLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM2Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzNi5ub3JtYWxpemUsXFxuICAgICAgICAgICAgb25CbHVyID0gX3Byb3BzNi5vbkJsdXIsXFxuICAgICAgICAgICAgb25DaGFuZ2UgPSBfcHJvcHM2Lm9uQ2hhbmdlLFxcbiAgICAgICAgICAgIG9uRm9jdXMgPSBfcHJvcHM2Lm9uRm9jdXMsXFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPSBfcHJvcHM2Lm9uRHJhZ1N0YXJ0LFxcbiAgICAgICAgICAgIG9uRHJvcCA9IF9wcm9wczYub25Ecm9wLFxcbiAgICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzNiwgWydjb21wb25lbnQnLCAnd2l0aFJlZicsICduYW1lJywgJ19yZWR1eEZvcm0nLCAnbm9ybWFsaXplJywgJ29uQmx1cicsICdvbkNoYW5nZScsICdvbkZvY3VzJywgJ29uRHJhZ1N0YXJ0JywgJ29uRHJvcCddKTtcXG5cXG4gICAgICAgIHZhciBfY3JlYXRlRmllbGRQcm9wcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHsgZ2V0SW46IGdldEluLCB0b0pTOiB0b0pTIH0sIG5hbWUsIF9leHRlbmRzKHt9LCByZXN0LCB7XFxuICAgICAgICAgIGZvcm06IF9yZWR1eEZvcm0uZm9ybSxcXG4gICAgICAgICAgb25CbHVyOiB0aGlzLmhhbmRsZUJsdXIsXFxuICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZSxcXG4gICAgICAgICAgb25Ecm9wOiB0aGlzLmhhbmRsZURyb3AsXFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0OiB0aGlzLmhhbmRsZURyYWdTdGFydCxcXG4gICAgICAgICAgb25Gb2N1czogdGhpcy5oYW5kbGVGb2N1c1xcbiAgICAgICAgfSkpLFxcbiAgICAgICAgICAgIGN1c3RvbSA9IF9jcmVhdGVGaWVsZFByb3BzLmN1c3RvbSxcXG4gICAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY3JlYXRlRmllbGRQcm9wcywgWydjdXN0b20nXSk7XFxuXFxuICAgICAgICBpZiAod2l0aFJlZikge1xcbiAgICAgICAgICBjdXN0b20ucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnc3RyaW5nJykge1xcbiAgICAgICAgICB2YXIgaW5wdXQgPSBwcm9wcy5pbnB1dCxcXG4gICAgICAgICAgICAgIG1ldGEgPSBwcm9wcy5tZXRhOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXFxuICAgICAgICAgIC8vIGZsYXR0ZW4gaW5wdXQgaW50byBvdGhlciBwcm9wc1xcblxcbiAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKGNvbXBvbmVudCwgX2V4dGVuZHMoe30sIGlucHV0LCBjdXN0b20pKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIGN1c3RvbSkpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gQ29ubmVjdGVkRmllbGQ7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBDb25uZWN0ZWRGaWVsZC5wcm9wVHlwZXMgPSB7XFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBwcm9wczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdFxcbiAgfTtcXG5cXG4gIHZhciBjb25uZWN0b3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X3JlZHV4X19bXFxcImFcXFwiIC8qIGNvbm5lY3QgKi9dKShmdW5jdGlvbiAoc3RhdGUsIG93blByb3BzKSB7XFxuICAgIHZhciBuYW1lID0gb3duUHJvcHMubmFtZSxcXG4gICAgICAgIF9vd25Qcm9wcyRfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX293blByb3BzJF9yZWR1eEZvcm0uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ2luaXRpYWwuJyArIG5hbWUpO1xcbiAgICB2YXIgaW5pdGlhbCA9IGluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5pdGlhbFN0YXRlIDogaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgdmFyIHZhbHVlID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzLicgKyBuYW1lKTtcXG4gICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgIHZhciBzeW5jRXJyb3IgPSBnZXRTeW5jRXJyb3IoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpLCBuYW1lKTtcXG4gICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICB2YXIgcHJpc3RpbmUgPSBkZWVwRXF1YWwodmFsdWUsIGluaXRpYWwpO1xcbiAgICByZXR1cm4ge1xcbiAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICBhc3luY1ZhbGlkYXRpbmc6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycpID09PSBuYW1lLFxcbiAgICAgIGRpcnR5OiAhcHJpc3RpbmUsXFxuICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgIHN0YXRlOiBnZXRJbihmb3JtU3RhdGUsICdmaWVsZHMuJyArIG5hbWUpLFxcbiAgICAgIHN1Ym1pdEVycm9yOiBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRFcnJvcnMuJyArIG5hbWUpLFxcbiAgICAgIHN1Ym1pdEZhaWxlZDogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyksXFxuICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3I6IHN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZzogc3luY1dhcm5pbmcsXFxuICAgICAgdmFsdWU6IHZhbHVlLFxcbiAgICAgIF92YWx1ZTogb3duUHJvcHMudmFsdWUgLy8gc2F2ZSB2YWx1ZSBwYXNzZWQgaW4gKGZvciBjaGVja2JveGVzKVxcbiAgICB9O1xcbiAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgd2l0aFJlZjogdHJ1ZSB9KTtcXG4gIHJldHVybiBjb25uZWN0b3IoQ29ubmVjdGVkRmllbGQpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdGVkRmllbGQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNFdmVudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MSk7XFxuXFxuXFxudmFyIGdldFNlbGVjdGVkVmFsdWVzID0gZnVuY3Rpb24gZ2V0U2VsZWN0ZWRWYWx1ZXMob3B0aW9ucykge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKG9wdGlvbnMpIHtcXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG9wdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XFxuICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnNbaW5kZXhdO1xcbiAgICAgIGlmIChvcHRpb24uc2VsZWN0ZWQpIHtcXG4gICAgICAgIHJlc3VsdC5wdXNoKG9wdGlvbi52YWx1ZSk7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn07XFxuXFxudmFyIGdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoZXZlbnQsIGlzUmVhY3ROYXRpdmUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0V2ZW50X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCkpIHtcXG4gICAgaWYgKCFpc1JlYWN0TmF0aXZlICYmIGV2ZW50Lm5hdGl2ZUV2ZW50ICYmIGV2ZW50Lm5hdGl2ZUV2ZW50LnRleHQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJldHVybiBldmVudC5uYXRpdmVFdmVudC50ZXh0O1xcbiAgICB9XFxuICAgIGlmIChpc1JlYWN0TmF0aXZlICYmIGV2ZW50Lm5hdGl2ZUV2ZW50ICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICByZXR1cm4gZXZlbnQubmF0aXZlRXZlbnQudGV4dDtcXG4gICAgfVxcbiAgICB2YXIgX2V2ZW50JHRhcmdldCA9IGV2ZW50LnRhcmdldCxcXG4gICAgICAgIHR5cGUgPSBfZXZlbnQkdGFyZ2V0LnR5cGUsXFxuICAgICAgICB2YWx1ZSA9IF9ldmVudCR0YXJnZXQudmFsdWUsXFxuICAgICAgICBjaGVja2VkID0gX2V2ZW50JHRhcmdldC5jaGVja2VkLFxcbiAgICAgICAgZmlsZXMgPSBfZXZlbnQkdGFyZ2V0LmZpbGVzLFxcbiAgICAgICAgZGF0YVRyYW5zZmVyID0gZXZlbnQuZGF0YVRyYW5zZmVyO1xcblxcbiAgICBpZiAodHlwZSA9PT0gJ2NoZWNrYm94Jykge1xcbiAgICAgIHJldHVybiBjaGVja2VkO1xcbiAgICB9XFxuICAgIGlmICh0eXBlID09PSAnZmlsZScpIHtcXG4gICAgICByZXR1cm4gZmlsZXMgfHwgZGF0YVRyYW5zZmVyICYmIGRhdGFUcmFuc2Zlci5maWxlcztcXG4gICAgfVxcbiAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdC1tdWx0aXBsZScpIHtcXG4gICAgICByZXR1cm4gZ2V0U2VsZWN0ZWRWYWx1ZXMoZXZlbnQudGFyZ2V0Lm9wdGlvbnMpO1xcbiAgICB9XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBldmVudDtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFZhbHVlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBpc1JlYWN0TmF0aXZlID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnByb2R1Y3QgJiYgd2luZG93Lm5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzUmVhY3ROYXRpdmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGF0YUtleTsgfSk7XFxudmFyIGRhdGFLZXkgPSAndGV4dCc7XFxuXFxuLyoqKi8gfSksXFxuLyogMjMyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciB2YWxpZGF0ZU5hbWVQcm9wID0gZnVuY3Rpb24gdmFsaWRhdGVOYW1lUHJvcChwcm9wKSB7XFxuICBpZiAoIXByb3ApIHtcXG4gICAgcmV0dXJuIG5ldyBFcnJvcignTm8gXFxcIm5hbWVzXFxcIiBwcm9wIHdhcyBzcGVjaWZpZWQgPEZpZWxkcy8+Jyk7XFxuICB9XFxuICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcCkgJiYgIXByb3AuX2lzRmllbGRBcnJheSkge1xcbiAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkIHByb3AgXFxcIm5hbWVzXFxcIiBzdXBwbGllZCB0byA8RmllbGRzLz4uIE11c3QgYmUgZWl0aGVyIGFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgdGhlIGZpZWxkcyBhcnJheSBnZW5lcmF0ZWQgYnkgRmllbGRBcnJheS4nKTtcXG4gIH1cXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZHMgPSBmdW5jdGlvbiBjcmVhdGVGaWVsZHMoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTLFxcbiAgICAgIHNpemUgPSBfcmVmLnNpemU7XFxuXFxuXFxuICB2YXIgQ29ubmVjdGVkRmllbGRzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsLFxcbiAgICBnZXRJbjogZ2V0SW4sXFxuICAgIHRvSlM6IHRvSlMsXFxuICAgIHNpemU6IHNpemVcXG4gIH0pO1xcblxcbiAgdmFyIEZpZWxkcyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZHMsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBGaWVsZHMocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGRzKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGRzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRmllbGRzKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkcyBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkcywgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsX3NoYWxsb3dDb21wYXJlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBuZXh0UHJvcHMsIG5leHRTdGF0ZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgICAgdmFyIGVycm9yID0gdmFsaWRhdGVOYW1lUHJvcCh0aGlzLnByb3BzLm5hbWVzKTtcXG4gICAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xcbiAgICAgICAgdmFyIHJlZ2lzdGVyID0gY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyO1xcblxcbiAgICAgICAgdGhpcy5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiByZWdpc3RlcihuYW1lLCAnRmllbGQnKTtcXG4gICAgICAgIH0pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgaWYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwodGhpcy5wcm9wcy5uYW1lcywgbmV4dFByb3BzLm5hbWVzKSkge1xcbiAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgICAgdmFyIF9jb250ZXh0JF9yZWR1eEZvcm0gPSBjb250ZXh0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgICByZWdpc3RlciA9IF9jb250ZXh0JF9yZWR1eEZvcm0ucmVnaXN0ZXIsXFxuICAgICAgICAgICAgICB1bnJlZ2lzdGVyID0gX2NvbnRleHQkX3JlZHV4Rm9ybS51bnJlZ2lzdGVyO1xcbiAgICAgICAgICAvLyB1bnJlZ2lzdGVyIG9sZCBuYW1lXFxuXFxuICAgICAgICAgIHRoaXMucHJvcHMubmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgIHJldHVybiB1bnJlZ2lzdGVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSkpO1xcbiAgICAgICAgICB9KTtcXG4gICAgICAgICAgLy8gcmVnaXN0ZXIgbmV3IG5hbWVcXG4gICAgICAgICAgbmV4dFByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKSwgJ0ZpZWxkJyk7XFxuICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgIHZhciB1bnJlZ2lzdGVyID0gY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXI7XFxuXFxuICAgICAgICB0aGlzLnByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIHVucmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh0aGlzLnByb3BzLndpdGhSZWYsICdJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZ2V0UmVuZGVyZWRDb21wb25lbnQoKSwgJyArICd5b3UgbXVzdCBzcGVjaWZ5IGEgd2l0aFJlZiBwcm9wIHRvIEZpZWxkcycpO1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0UmVuZGVyZWRDb21wb25lbnQoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG5cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRmllbGRzLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICBuYW1lczogdGhpcy5wcm9wcy5uYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKTtcXG4gICAgICAgICAgfSksXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZXMnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XFxuXFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5uYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5pc0RpcnR5KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncHJpc3RpbmUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuICF0aGlzLmRpcnR5O1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ZhbHVlcycsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZCAmJiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlcygpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gRmllbGRzO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgRmllbGRzLnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZXM6IGZ1bmN0aW9uIG5hbWVzKHByb3BzLCBwcm9wTmFtZSkge1xcbiAgICAgIHJldHVybiB2YWxpZGF0ZU5hbWVQcm9wKHByb3BzW3Byb3BOYW1lXSk7XFxuICAgIH0sXFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBmb3JtYXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwYXJzZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkcy5jb250ZXh0VHlwZXMgPSB7XFxuICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICByZXR1cm4gRmllbGRzO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NCk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgcHJvcHNUb05vdFVwZGF0ZUZvciA9IFsnX3JlZHV4Rm9ybSddO1xcblxcbnZhciBjcmVhdGVDb25uZWN0ZWRGaWVsZHMgPSBmdW5jdGlvbiBjcmVhdGVDb25uZWN0ZWRGaWVsZHMoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTLFxcbiAgICAgIHNpemUgPSBfcmVmLnNpemU7XFxuXFxuXFxuICB2YXIgZ2V0U3luY0Vycm9yID0gZnVuY3Rpb24gZ2V0U3luY0Vycm9yKHN5bmNFcnJvcnMsIG5hbWUpIHtcXG4gICAgdmFyIGVycm9yID0gZ2V0SW4oc3luY0Vycm9ycywgbmFtZSk7XFxuICAgIC8vIEJlY2F1c2UgdGhlIGVycm9yIGZvciB0aGlzIGZpZWxkIG1pZ2h0IG5vdCBiZSBhdCBhIGxldmVsIGluIHRoZSBlcnJvciBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX2Vycm9yIHByb3BlcnR5XFxuICAgIHJldHVybiBlcnJvciAmJiBlcnJvci5fZXJyb3IgPyBlcnJvci5fZXJyb3IgOiBlcnJvcjtcXG4gIH07XFxuXFxuICB2YXIgZ2V0U3luY1dhcm5pbmcgPSBmdW5jdGlvbiBnZXRTeW5jV2FybmluZyhzeW5jV2FybmluZ3MsIG5hbWUpIHtcXG4gICAgdmFyIHdhcm5pbmcgPSBnZXRJbihzeW5jV2FybmluZ3MsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSB3YXJuaW5nIGZvciB0aGlzIGZpZWxkIG1pZ2h0IG5vdCBiZSBhdCBhIGxldmVsIGluIHRoZSB3YXJuaW5nIHN0cnVjdHVyZSB3aGVyZVxcbiAgICAvLyBpdCBjYW4gYmUgc2V0IGRpcmVjdGx5LCBpdCBtaWdodCBuZWVkIHRvIGJlIHVud3JhcHBlZCBmcm9tIHRoZSBfd2FybmluZyBwcm9wZXJ0eVxcbiAgICByZXR1cm4gd2FybmluZyAmJiB3YXJuaW5nLl93YXJuaW5nID8gd2FybmluZy5fd2FybmluZyA6IHdhcm5pbmc7XFxuICB9O1xcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkcyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZHMsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZHMocHJvcHMpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdGVkRmllbGRzKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGRzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ29ubmVjdGVkRmllbGRzKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xcblxcbiAgICAgIF90aGlzLmhhbmRsZUNoYW5nZSA9IF90aGlzLmhhbmRsZUNoYW5nZS5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVGb2N1cyA9IF90aGlzLmhhbmRsZUZvY3VzLmJpbmQoX3RoaXMpO1xcbiAgICAgIF90aGlzLmhhbmRsZUJsdXIgPSBfdGhpcy5oYW5kbGVCbHVyLmJpbmQoX3RoaXMpO1xcblxcbiAgICAgIF90aGlzLm9uQ2hhbmdlRm5zID0gcHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlQ2hhbmdlKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgIH0sIHt9KTtcXG5cXG4gICAgICBfdGhpcy5vbkZvY3VzRm5zID0gcHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUZvY3VzKG5hbWUpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgfSwge30pO1xcblxcbiAgICAgIF90aGlzLm9uQmx1ckZucyA9IHByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUJsdXIobmFtZSwgZXZlbnQpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgfSwge30pO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGRzLCBbe1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICBpZiAodGhpcy5wcm9wcy5uYW1lcyAhPT0gbmV4dFByb3BzLm5hbWVzICYmIChzaXplKHRoaXMucHJvcHMubmFtZXMpICE9PSBzaXplKG5leHRQcm9wcy5uYW1lcykgfHwgbmV4dFByb3BzLm5hbWVzLnNvbWUoZnVuY3Rpb24gKG5leHROYW1lKSB7XFxuICAgICAgICAgIHJldHVybiAhX3RoaXMyLnByb3BzLl9maWVsZHNbbmV4dE5hbWVdO1xcbiAgICAgICAgfSkpKSB7XFxuXFxuICAgICAgICAgIC8vIG5hbWVzIGlzIGNoYW5nZWQuIFRoZSBjYWNoZWQgZXZlbnQgaGFuZGxlcnMgbmVlZCB0byBiZSB1cGRhdGVkXFxuICAgICAgICAgIHRoaXMub25DaGFuZ2VGbnMgPSBuZXh0UHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQ2hhbmdlKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgIH0sIHt9KTtcXG5cXG4gICAgICAgICAgdGhpcy5vbkZvY3VzRm5zID0gbmV4dFByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICAgICAgYWNjW25hbWVdID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5oYW5kbGVGb2N1cyhuYW1lKTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgIH0sIHt9KTtcXG5cXG4gICAgICAgICAgdGhpcy5vbkJsdXJGbnMgPSBuZXh0UHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQmx1cihuYW1lLCBldmVudCk7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgICAgICB9LCB7fSk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XFxuXFxuICAgICAgICB2YXIgbmV4dFByb3BzS2V5cyA9IE9iamVjdC5rZXlzKG5leHRQcm9wcyk7XFxuICAgICAgICB2YXIgdGhpc1Byb3BzS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucHJvcHMpO1xcbiAgICAgICAgcmV0dXJuIG5leHRQcm9wc0tleXMubGVuZ3RoICE9PSB0aGlzUHJvcHNLZXlzLmxlbmd0aCB8fCBuZXh0UHJvcHNLZXlzLnNvbWUoZnVuY3Rpb24gKHByb3ApIHtcXG4gICAgICAgICAgcmV0dXJuICF+cHJvcHNUb05vdFVwZGF0ZUZvci5pbmRleE9mKHByb3ApICYmICFkZWVwRXF1YWwoX3RoaXMzLnByb3BzW3Byb3BdLCBuZXh0UHJvcHNbcHJvcF0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaXNEaXJ0eScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRGlydHkoKSB7XFxuICAgICAgICB2YXIgX2ZpZWxkcyA9IHRoaXMucHJvcHMuX2ZpZWxkcztcXG5cXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhfZmllbGRzKS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiBfZmllbGRzW25hbWVdLmRpcnR5O1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0VmFsdWVzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWVzKCkge1xcbiAgICAgICAgdmFyIF9maWVsZHMgPSB0aGlzLnByb3BzLl9maWVsZHM7XFxuXFxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX2ZpZWxkcykucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgbmFtZSkge1xcbiAgICAgICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uc2V0SW4oYWNjdW11bGF0b3IsIG5hbWUsIF9maWVsZHNbbmFtZV0udmFsdWUpO1xcbiAgICAgICAgfSwge30pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLnJlbmRlcmVkQ29tcG9uZW50O1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2hhbmRsZUNoYW5nZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShuYW1lLCBldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgcGFyc2UgPSBfcHJvcHMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIHsgbmFtZTogbmFtZSwgcGFyc2U6IHBhcnNlLCBub3JtYWxpemU6IG5vcm1hbGl6ZSB9KTtcXG5cXG4gICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uY2hhbmdlKG5hbWUsIHZhbHVlKSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRm9jdXMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhuYW1lKSB7XFxuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMyLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMyLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmZvY3VzKG5hbWUpKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVCbHVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cihuYW1lLCBldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzMy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wczMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzMy5ub3JtYWxpemUsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczMuX3JlZHV4Rm9ybTtcXG5cXG4gICAgICAgIHZhciB2YWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2V2ZW50c19vbkNoYW5nZVZhbHVlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCwgeyBuYW1lOiBuYW1lLCBwYXJzZTogcGFyc2UsIG5vcm1hbGl6ZTogbm9ybWFsaXplIH0pO1xcblxcbiAgICAgICAgLy8gZGlzcGF0Y2ggYmx1ciBhY3Rpb25cXG4gICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uYmx1cihuYW1lLCB2YWx1ZSkpO1xcblxcbiAgICAgICAgLy8gY2FsbCBwb3N0LWJsdXIgY2FsbGJhY2tcXG4gICAgICAgIGlmIChfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgX3JlZHV4Rm9ybS5hc3luY1ZhbGlkYXRlKG5hbWUsIHZhbHVlKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgX3RoaXM0ID0gdGhpcztcXG5cXG4gICAgICAgIHZhciBfcHJvcHM0ID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICBjb21wb25lbnQgPSBfcHJvcHM0LmNvbXBvbmVudCxcXG4gICAgICAgICAgICB3aXRoUmVmID0gX3Byb3BzNC53aXRoUmVmLFxcbiAgICAgICAgICAgIF9maWVsZHMgPSBfcHJvcHM0Ll9maWVsZHMsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczQuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczQsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnX2ZpZWxkcycsICdfcmVkdXhGb3JtJ10pO1xcblxcbiAgICAgICAgdmFyIHNlY3Rpb25QcmVmaXggPSBfcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXg7XFxuXFxuICAgICAgICB2YXIgX09iamVjdCRrZXlzJHJlZHVjZSA9IE9iamVjdC5rZXlzKF9maWVsZHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIG5hbWUpIHtcXG4gICAgICAgICAgdmFyIGNvbm5lY3RlZFByb3BzID0gX2ZpZWxkc1tuYW1lXTtcXG5cXG4gICAgICAgICAgdmFyIF9jcmVhdGVGaWVsZFByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY3JlYXRlRmllbGRQcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoeyBnZXRJbjogZ2V0SW4sIHRvSlM6IHRvSlMgfSwgbmFtZSwgX2V4dGVuZHMoe30sIGNvbm5lY3RlZFByb3BzLCByZXN0LCB7XFxuICAgICAgICAgICAgb25CbHVyOiBfdGhpczQub25CbHVyRm5zW25hbWVdLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBfdGhpczQub25DaGFuZ2VGbnNbbmFtZV0sXFxuICAgICAgICAgICAgb25Gb2N1czogX3RoaXM0Lm9uRm9jdXNGbnNbbmFtZV1cXG4gICAgICAgICAgfSkpLFxcbiAgICAgICAgICAgICAgY3VzdG9tID0gX2NyZWF0ZUZpZWxkUHJvcHMuY3VzdG9tLFxcbiAgICAgICAgICAgICAgZmllbGRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY3JlYXRlRmllbGRQcm9wcywgWydjdXN0b20nXSk7XFxuXFxuICAgICAgICAgIGFjY3VtdWxhdG9yLmN1c3RvbSA9IGN1c3RvbTtcXG4gICAgICAgICAgdmFyIGZpZWxkTmFtZSA9IHNlY3Rpb25QcmVmaXggPyBuYW1lLnJlcGxhY2Uoc2VjdGlvblByZWZpeCArICcuJywgJycpIDogbmFtZTtcXG4gICAgICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBmaWVsZE5hbWUsIGZpZWxkUHJvcHMpO1xcbiAgICAgICAgfSwge30pLFxcbiAgICAgICAgICAgIGN1c3RvbSA9IF9PYmplY3Qka2V5cyRyZWR1Y2UuY3VzdG9tLFxcbiAgICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9PYmplY3Qka2V5cyRyZWR1Y2UsIFsnY3VzdG9tJ10pO1xcblxcbiAgICAgICAgaWYgKHdpdGhSZWYpIHtcXG4gICAgICAgICAgcHJvcHMucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIGN1c3RvbSkpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gQ29ubmVjdGVkRmllbGRzO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgQ29ubmVjdGVkRmllbGRzLnByb3BUeXBlcyA9IHtcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIF9maWVsZHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QuaXNSZXF1aXJlZCxcXG4gICAgcHJvcHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZXMgPSBvd25Qcm9wcy5uYW1lcyxcXG4gICAgICAgIF9vd25Qcm9wcyRfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX293blByb3BzJF9yZWR1eEZvcm0uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgcmV0dXJuIHtcXG4gICAgICBfZmllbGRzOiBuYW1lcy5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBuYW1lKSB7XFxuICAgICAgICB2YXIgaW5pdGlhbFN0YXRlID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbC4nICsgbmFtZSk7XFxuICAgICAgICB2YXIgaW5pdGlhbCA9IGluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5pdGlhbFN0YXRlIDogaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ3ZhbHVlcy4nICsgbmFtZSk7XFxuICAgICAgICB2YXIgc3luY0Vycm9yID0gZ2V0U3luY0Vycm9yKGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNFcnJvcnMnKSwgbmFtZSk7XFxuICAgICAgICB2YXIgc3luY1dhcm5pbmcgPSBnZXRTeW5jV2FybmluZyhnZXRJbihmb3JtU3RhdGUsICdzeW5jV2FybmluZ3MnKSwgbmFtZSk7XFxuICAgICAgICB2YXIgc3VibWl0dGluZyA9IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgICAgIHZhciBwcmlzdGluZSA9IHZhbHVlID09PSBpbml0aWFsO1xcbiAgICAgICAgYWNjdW11bGF0b3JbbmFtZV0gPSB7XFxuICAgICAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY1ZhbGlkYXRpbmcnKSA9PT0gbmFtZSxcXG4gICAgICAgICAgZGlydHk6ICFwcmlzdGluZSxcXG4gICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICAgICAgc3VibWl0RXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEVycm9ycy4nICsgbmFtZSksXFxuICAgICAgICAgIHN1Ym1pdEZhaWxlZDogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyksXFxuICAgICAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgICAgIHN5bmNFcnJvcjogc3luY0Vycm9yLFxcbiAgICAgICAgICBzeW5jV2FybmluZzogc3luY1dhcm5pbmcsXFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICAgICAgX3ZhbHVlOiBvd25Qcm9wcy52YWx1ZSAvLyBzYXZlIHZhbHVlIHBhc3NlZCBpbiAoZm9yIGNoZWNrYm94ZXMpXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xcbiAgICAgIH0sIHt9KVxcbiAgICB9O1xcbiAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgd2l0aFJlZjogdHJ1ZSB9KTtcXG4gIHJldHVybiBjb25uZWN0b3IoQ29ubmVjdGVkRmllbGRzKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUNvbm5lY3RlZEZpZWxkcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRBcnJheV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHRvQXJyYXkgPSBmdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XFxuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XFxufTtcXG5cXG52YXIgd3JhcEVycm9yID0gZnVuY3Rpb24gd3JhcEVycm9yKGZuLCBrZXkpIHtcXG4gIHJldHVybiBmbiAmJiBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciB2YWxpZGF0b3JzID0gdG9BcnJheShmbik7XFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciByZXN1bHQgPSB2YWxpZGF0b3JzW2ldLmFwcGx5KHZhbGlkYXRvcnMsIGFyZ3VtZW50cyk7XFxuICAgICAgaWYgKHJlc3VsdCkge1xcbiAgICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCByZXN1bHQpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfTtcXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZEFycmF5ID0gZnVuY3Rpb24gY3JlYXRlRmllbGRBcnJheShfcmVmMikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYyLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYyLmdldEluLFxcbiAgICAgIHNpemUgPSBfcmVmMi5zaXplO1xcblxcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkQXJyYXkgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Db25uZWN0ZWRGaWVsZEFycmF5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7IGRlZXBFcXVhbDogZGVlcEVxdWFsLCBnZXRJbjogZ2V0SW4sIHNpemU6IHNpemUgfSk7XFxuXFxuICB2YXIgRmllbGRBcnJheSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZEFycmF5LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGRBcnJheShwcm9wcywgY29udGV4dCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGaWVsZEFycmF5KTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGRBcnJheS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkQXJyYXkpKS5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSk7XFxuXFxuICAgICAgaWYgKCFjb250ZXh0Ll9yZWR1eEZvcm0pIHtcXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmllbGRBcnJheSBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkQXJyYXksIFt7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywgbmV4dFByb3BzLCBuZXh0U3RhdGUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxNb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xcblxcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0ucmVnaXN0ZXIodGhpcy5uYW1lLCAnRmllbGRBcnJheScsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIHdyYXBFcnJvcihfdGhpczIucHJvcHMudmFsaWRhdGUsICdfZXJyb3InKTtcXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIHdyYXBFcnJvcihfdGhpczIucHJvcHMud2FybiwgJ193YXJuaW5nJyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm5hbWUgIT09IG5leHRQcm9wcy5uYW1lKSB7XFxuICAgICAgICAgIC8vIHVucmVnaXN0ZXIgb2xkIG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgICAgICAvLyByZWdpc3RlciBuZXcgbmFtZVxcbiAgICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgbmV4dFByb3BzLm5hbWUpLCAnRmllbGRBcnJheScpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS51bnJlZ2lzdGVyKHRoaXMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0UmVuZGVyZWRDb21wb25lbnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZW5kZXJlZENvbXBvbmVudCgpIHtcXG4gICAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0KCkodGhpcy5wcm9wcy53aXRoUmVmLCAnSWYgeW91IHdhbnQgdG8gYWNjZXNzIGdldFJlbmRlcmVkQ29tcG9uZW50KCksICcgKyAneW91IG11c3Qgc3BlY2lmeSBhIHdpdGhSZWYgcHJvcCB0byBGaWVsZEFycmF5Jyk7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRSZW5kZXJlZENvbXBvbmVudCgpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3JlbmRlcicsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRmllbGRBcnJheSwgX2V4dGVuZHMoe30sIHRoaXMucHJvcHMsIHtcXG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxcbiAgICAgICAgICBzeW5jRXJyb3I6IHRoaXMuc3luY0Vycm9yLFxcbiAgICAgICAgICBzeW5jV2FybmluZzogdGhpcy5zeW5jV2FybmluZyxcXG4gICAgICAgICAgX3JlZHV4Rm9ybTogdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgIHJlZjogJ2Nvbm5lY3RlZCdcXG4gICAgICAgIH0pKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICduYW1lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgdGhpcy5wcm9wcy5uYW1lKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS52YWx1ZTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIEZpZWxkQXJyYXk7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBGaWVsZEFycmF5LnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZy5pc1JlcXVpcmVkLFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB2YWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHdhcm46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkQXJyYXkuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkQXJyYXk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGaWVsZEFycmF5KTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21hcFZhbHVlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY3JlYXRlRmllbGRBcnJheVByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzNik7XFxuXFxuXFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHByb3BzVG9Ob3RVcGRhdGVGb3IgPSBbJ19yZWR1eEZvcm0nLCAndmFsdWUnXTtcXG5cXG52YXIgY3JlYXRlQ29ubmVjdGVkRmllbGRBcnJheSA9IGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3RlZEZpZWxkQXJyYXkoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBzaXplID0gX3JlZi5zaXplO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIC8vIEZvciBhbiBhcnJheSwgdGhlIGVycm9yIGNhbiBfT05MWV8gYmUgdW5kZXIgX2Vycm9yLlxcbiAgICAvLyBUaGlzIGlzIHdoeSB0aGlzIGdldFN5bmNFcnJvciBpcyBub3QgdGhlIHNhbWUgYXMgdGhlXFxuICAgIC8vIG9uZSBpbiBGaWVsZC5cXG4gICAgcmV0dXJuIGdldEluKHN5bmNFcnJvcnMsIG5hbWUgKyAnLl9lcnJvcicpO1xcbiAgfTtcXG5cXG4gIHZhciBnZXRTeW5jV2FybmluZyA9IGZ1bmN0aW9uIGdldFN5bmNXYXJuaW5nKHN5bmNXYXJuaW5ncywgbmFtZSkge1xcbiAgICAvLyBGb3IgYW4gYXJyYXksIHRoZSB3YXJuaW5nIGNhbiBfT05MWV8gYmUgdW5kZXIgX3dhcm5pbmcuXFxuICAgIC8vIFRoaXMgaXMgd2h5IHRoaXMgZ2V0U3luY0Vycm9yIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGVcXG4gICAgLy8gb25lIGluIEZpZWxkLlxcbiAgICByZXR1cm4gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lICsgJy5fd2FybmluZycpO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZEFycmF5ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKENvbm5lY3RlZEZpZWxkQXJyYXksIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZEFycmF5KCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb25uZWN0ZWRGaWVsZEFycmF5KTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGRBcnJheS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKENvbm5lY3RlZEZpZWxkQXJyYXkpKS5jYWxsKHRoaXMpKTtcXG5cXG4gICAgICBfdGhpcy5nZXRWYWx1ZSA9IF90aGlzLmdldFZhbHVlLmJpbmQoX3RoaXMpO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGRBcnJheSwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIC8vIFVwZGF0ZSBpZiB0aGUgZWxlbWVudHMgb2YgdGhlIHZhbHVlIGFycmF5IHdhcyB1cGRhdGVkLlxcbiAgICAgICAgdmFyIHRoaXNWYWx1ZSA9IHRoaXMucHJvcHMudmFsdWU7XFxuICAgICAgICB2YXIgbmV4dFZhbHVlID0gbmV4dFByb3BzLnZhbHVlO1xcblxcbiAgICAgICAgaWYgKHRoaXNWYWx1ZSAmJiBuZXh0VmFsdWUpIHtcXG4gICAgICAgICAgaWYgKHRoaXNWYWx1ZS5sZW5ndGggIT09IG5leHRWYWx1ZS5sZW5ndGggfHwgdGhpc1ZhbHVlLmV2ZXJ5KGZ1bmN0aW9uICh2YWwpIHtcXG4gICAgICAgICAgICByZXR1cm4gbmV4dFZhbHVlLnNvbWUoZnVuY3Rpb24gKG5leHQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBkZWVwRXF1YWwodmFsLCBuZXh0KTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgfSkpIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIG5leHRQcm9wc0tleXMgPSBPYmplY3Qua2V5cyhuZXh0UHJvcHMpO1xcbiAgICAgICAgdmFyIHRoaXNQcm9wc0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BzKTtcXG4gICAgICAgIHJldHVybiBuZXh0UHJvcHNLZXlzLmxlbmd0aCAhPT0gdGhpc1Byb3BzS2V5cy5sZW5ndGggfHwgbmV4dFByb3BzS2V5cy5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgIC8vIHVzZWZ1bCB0byBkZWJ1ZyByZXJlbmRlcnNcXG4gICAgICAgICAgLy8gaWYgKCFwbGFpbi5kZWVwRXF1YWwodGhpcy5wcm9wc1sgcHJvcCBdLCBuZXh0UHJvcHNbIHByb3AgXSkpIHtcXG4gICAgICAgICAgLy8gICBjb25zb2xlLmluZm8ocHJvcCwgJ2NoYW5nZWQnLCB0aGlzLnByb3BzWyBwcm9wIF0sICc9PT4nLCBuZXh0UHJvcHNbIHByb3AgXSlcXG4gICAgICAgICAgLy8gfVxcbiAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczIucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRWYWx1ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKGluZGV4KSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZSAmJiBnZXRJbih0aGlzLnByb3BzLnZhbHVlLCBpbmRleCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzLmNvbXBvbmVudCxcXG4gICAgICAgICAgICB3aXRoUmVmID0gX3Byb3BzLndpdGhSZWYsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wcy5uYW1lLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICB2YWxpZGF0ZSA9IF9wcm9wcy52YWxpZGF0ZSxcXG4gICAgICAgICAgICB3YXJuID0gX3Byb3BzLndhcm4sXFxuICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnbmFtZScsICdfcmVkdXhGb3JtJywgJ3ZhbGlkYXRlJywgJ3dhcm4nXSk7XFxuXFxuICAgICAgICB2YXIgcHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19jcmVhdGVGaWVsZEFycmF5UHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGdldEluLCBuYW1lLCBfcmVkdXhGb3JtLmZvcm0sIF9yZWR1eEZvcm0uc2VjdGlvblByZWZpeCwgdGhpcy5nZXRWYWx1ZSwgcmVzdCk7XFxuICAgICAgICBpZiAod2l0aFJlZikge1xcbiAgICAgICAgICBwcm9wcy5yZWYgPSAncmVuZGVyZWRDb21wb25lbnQnO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShjb21wb25lbnQsIHByb3BzKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIENvbm5lY3RlZEZpZWxkQXJyYXk7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBDb25uZWN0ZWRGaWVsZEFycmF5LnByb3BUeXBlcyA9IHtcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgQ29ubmVjdGVkRmllbGRBcnJheS5jb250ZXh0VHlwZXMgPSB7XFxuICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZSA9IG93blByb3BzLm5hbWUsXFxuICAgICAgICBfb3duUHJvcHMkX3JlZHV4Rm9ybSA9IG93blByb3BzLl9yZWR1eEZvcm0sXFxuICAgICAgICBpbml0aWFsVmFsdWVzID0gX293blByb3BzJF9yZWR1eEZvcm0uaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9vd25Qcm9wcyRfcmVkdXhGb3JtLmdldEZvcm1TdGF0ZTtcXG5cXG4gICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgIHZhciBpbml0aWFsID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbC4nICsgbmFtZSkgfHwgaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgdmFyIHZhbHVlID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzLicgKyBuYW1lKTtcXG4gICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgIHZhciBzeW5jRXJyb3IgPSBnZXRTeW5jRXJyb3IoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpLCBuYW1lKTtcXG4gICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICB2YXIgcHJpc3RpbmUgPSBkZWVwRXF1YWwodmFsdWUsIGluaXRpYWwpO1xcbiAgICByZXR1cm4ge1xcbiAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lICsgJy5fZXJyb3InKSxcXG4gICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICBzdWJtaXRFcnJvcjogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RXJyb3JzLicgKyBuYW1lICsgJy5fZXJyb3InKSxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEZhaWxlZCcpLFxcbiAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgc3luY0Vycm9yOiBzeW5jRXJyb3IsXFxuICAgICAgc3luY1dhcm5pbmc6IHN5bmNXYXJuaW5nLFxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICBsZW5ndGg6IHNpemUodmFsdWUpXFxuICAgIH07XFxuICB9LCBmdW5jdGlvbiAoZGlzcGF0Y2gsIG93blByb3BzKSB7XFxuICAgIHZhciBuYW1lID0gb3duUHJvcHMubmFtZSxcXG4gICAgICAgIF9yZWR1eEZvcm0gPSBvd25Qcm9wcy5fcmVkdXhGb3JtO1xcbiAgICB2YXIgYXJyYXlJbnNlcnQgPSBfcmVkdXhGb3JtLmFycmF5SW5zZXJ0LFxcbiAgICAgICAgYXJyYXlNb3ZlID0gX3JlZHV4Rm9ybS5hcnJheU1vdmUsXFxuICAgICAgICBhcnJheVBvcCA9IF9yZWR1eEZvcm0uYXJyYXlQb3AsXFxuICAgICAgICBhcnJheVB1c2ggPSBfcmVkdXhGb3JtLmFycmF5UHVzaCxcXG4gICAgICAgIGFycmF5UmVtb3ZlID0gX3JlZHV4Rm9ybS5hcnJheVJlbW92ZSxcXG4gICAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3JlZHV4Rm9ybS5hcnJheVJlbW92ZUFsbCxcXG4gICAgICAgIGFycmF5U2hpZnQgPSBfcmVkdXhGb3JtLmFycmF5U2hpZnQsXFxuICAgICAgICBhcnJheVNwbGljZSA9IF9yZWR1eEZvcm0uYXJyYXlTcGxpY2UsXFxuICAgICAgICBhcnJheVN3YXAgPSBfcmVkdXhGb3JtLmFycmF5U3dhcCxcXG4gICAgICAgIGFycmF5VW5zaGlmdCA9IF9yZWR1eEZvcm0uYXJyYXlVbnNoaWZ0O1xcblxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgICAgYXJyYXlJbnNlcnQ6IGFycmF5SW5zZXJ0LFxcbiAgICAgIGFycmF5TW92ZTogYXJyYXlNb3ZlLFxcbiAgICAgIGFycmF5UG9wOiBhcnJheVBvcCxcXG4gICAgICBhcnJheVB1c2g6IGFycmF5UHVzaCxcXG4gICAgICBhcnJheVJlbW92ZTogYXJyYXlSZW1vdmUsXFxuICAgICAgYXJyYXlSZW1vdmVBbGw6IGFycmF5UmVtb3ZlQWxsLFxcbiAgICAgIGFycmF5U2hpZnQ6IGFycmF5U2hpZnQsXFxuICAgICAgYXJyYXlTcGxpY2U6IGFycmF5U3BsaWNlLFxcbiAgICAgIGFycmF5U3dhcDogYXJyYXlTd2FwLFxcbiAgICAgIGFycmF5VW5zaGlmdDogYXJyYXlVbnNoaWZ0XFxuICAgIH0sIGZ1bmN0aW9uIChhY3Rpb25DcmVhdG9yKSB7XFxuICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYWN0aW9uQ3JlYXRvci5iaW5kKG51bGwsIG5hbWUpLCBkaXNwYXRjaCk7XFxuICAgIH0pO1xcbiAgfSwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICByZXR1cm4gY29ubmVjdG9yKENvbm5lY3RlZEZpZWxkQXJyYXkpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdGVkRmllbGRBcnJheSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG52YXIgY3JlYXRlRmllbGRBcnJheVByb3BzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRBcnJheVByb3BzKGdldEluLCBuYW1lLCBmb3JtLCBzZWN0aW9uUHJlZml4LCBnZXRWYWx1ZSwgX3JlZikge1xcbiAgdmFyIGFycmF5SW5zZXJ0ID0gX3JlZi5hcnJheUluc2VydCxcXG4gICAgICBhcnJheU1vdmUgPSBfcmVmLmFycmF5TW92ZSxcXG4gICAgICBhcnJheVBvcCA9IF9yZWYuYXJyYXlQb3AsXFxuICAgICAgYXJyYXlQdXNoID0gX3JlZi5hcnJheVB1c2gsXFxuICAgICAgYXJyYXlSZW1vdmUgPSBfcmVmLmFycmF5UmVtb3ZlLFxcbiAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3JlZi5hcnJheVJlbW92ZUFsbCxcXG4gICAgICBhcnJheVNoaWZ0ID0gX3JlZi5hcnJheVNoaWZ0LFxcbiAgICAgIGFycmF5U3BsaWNlID0gX3JlZi5hcnJheVNwbGljZSxcXG4gICAgICBhcnJheVN3YXAgPSBfcmVmLmFycmF5U3dhcCxcXG4gICAgICBhcnJheVVuc2hpZnQgPSBfcmVmLmFycmF5VW5zaGlmdCxcXG4gICAgICBhc3luY0Vycm9yID0gX3JlZi5hc3luY0Vycm9yLFxcbiAgICAgIGRpcnR5ID0gX3JlZi5kaXJ0eSxcXG4gICAgICBsZW5ndGggPSBfcmVmLmxlbmd0aCxcXG4gICAgICBwcmlzdGluZSA9IF9yZWYucHJpc3RpbmUsXFxuICAgICAgc3VibWl0RXJyb3IgPSBfcmVmLnN1Ym1pdEVycm9yLFxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcXG4gICAgICBzdWJtaXRGYWlsZWQgPSBfcmVmLnN1Ym1pdEZhaWxlZCxcXG4gICAgICBzdWJtaXR0aW5nID0gX3JlZi5zdWJtaXR0aW5nLFxcbiAgICAgIHN5bmNFcnJvciA9IF9yZWYuc3luY0Vycm9yLFxcbiAgICAgIHN5bmNXYXJuaW5nID0gX3JlZi5zeW5jV2FybmluZyxcXG4gICAgICB2YWx1ZSA9IF9yZWYudmFsdWUsXFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWydhcnJheUluc2VydCcsICdhcnJheU1vdmUnLCAnYXJyYXlQb3AnLCAnYXJyYXlQdXNoJywgJ2FycmF5UmVtb3ZlJywgJ2FycmF5UmVtb3ZlQWxsJywgJ2FycmF5U2hpZnQnLCAnYXJyYXlTcGxpY2UnLCAnYXJyYXlTd2FwJywgJ2FycmF5VW5zaGlmdCcsICdhc3luY0Vycm9yJywgJ2RpcnR5JywgJ2xlbmd0aCcsICdwcmlzdGluZScsICdzdWJtaXRFcnJvcicsICdzdGF0ZScsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0dGluZycsICdzeW5jRXJyb3InLCAnc3luY1dhcm5pbmcnLCAndmFsdWUnLCAncHJvcHMnXSk7XFxuXFxuICB2YXIgZXJyb3IgPSBzeW5jRXJyb3IgfHwgYXN5bmNFcnJvciB8fCBzdWJtaXRFcnJvcjtcXG4gIHZhciB3YXJuaW5nID0gc3luY1dhcm5pbmc7XFxuICB2YXIgZmllbGROYW1lID0gc2VjdGlvblByZWZpeCA/IG5hbWUucmVwbGFjZShzZWN0aW9uUHJlZml4ICsgJy4nLCAnJykgOiBuYW1lO1xcbiAgdmFyIGZpbmFsUHJvcHMgPSBfZXh0ZW5kcyh7XFxuICAgIGZpZWxkczoge1xcbiAgICAgIF9pc0ZpZWxkQXJyYXk6IHRydWUsXFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFjaykge1xcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGZpZWxkTmFtZSArICdbJyArIGluZGV4ICsgJ10nLCBpbmRleCwgZmluYWxQcm9wcy5maWVsZHMpO1xcbiAgICAgICAgfSk7XFxuICAgICAgfSxcXG4gICAgICBnZXQ6IGdldFZhbHVlLFxcbiAgICAgIGdldEFsbDogZnVuY3Rpb24gZ2V0QWxsKCkge1xcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICAgIH0sXFxuICAgICAgaW5zZXJ0OiBhcnJheUluc2VydCxcXG4gICAgICBsZW5ndGg6IGxlbmd0aCxcXG4gICAgICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFjaykge1xcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCBbXSkubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZmllbGROYW1lICsgJ1snICsgaW5kZXggKyAnXScsIGluZGV4LCBmaW5hbFByb3BzLmZpZWxkcyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9LFxcbiAgICAgIG1vdmU6IGFycmF5TW92ZSxcXG4gICAgICBuYW1lOiBuYW1lLFxcbiAgICAgIHBvcDogZnVuY3Rpb24gcG9wKCkge1xcbiAgICAgICAgYXJyYXlQb3AoKTtcXG4gICAgICAgIHJldHVybiBnZXRJbih2YWx1ZSwgbGVuZ3RoIC0gMSk7XFxuICAgICAgfSxcXG4gICAgICBwdXNoOiBhcnJheVB1c2gsXFxuICAgICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2ssIGluaXRpYWwpIHtcXG4gICAgICAgIHJldHVybiAodmFsdWUgfHwgW10pLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIGl0ZW0sIGluZGV4KSB7XFxuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhhY2N1bXVsYXRvciwgZmllbGROYW1lICsgJ1snICsgaW5kZXggKyAnXScsIGluZGV4LCBmaW5hbFByb3BzLmZpZWxkcyk7XFxuICAgICAgICB9LCBpbml0aWFsKTtcXG4gICAgICB9LFxcbiAgICAgIHJlbW92ZTogYXJyYXlSZW1vdmUsXFxuICAgICAgcmVtb3ZlQWxsOiBhcnJheVJlbW92ZUFsbCxcXG4gICAgICBzaGlmdDogZnVuY3Rpb24gc2hpZnQoKSB7XFxuICAgICAgICBhcnJheVNoaWZ0KCk7XFxuICAgICAgICByZXR1cm4gZ2V0SW4odmFsdWUsIDApO1xcbiAgICAgIH0sXFxuICAgICAgc3dhcDogYXJyYXlTd2FwLFxcbiAgICAgIHVuc2hpZnQ6IGFycmF5VW5zaGlmdFxcbiAgICB9LFxcbiAgICBtZXRhOiB7XFxuICAgICAgZGlydHk6IGRpcnR5LFxcbiAgICAgIGVycm9yOiBlcnJvcixcXG4gICAgICBmb3JtOiBmb3JtLFxcbiAgICAgIHdhcm5pbmc6IHdhcm5pbmcsXFxuICAgICAgaW52YWxpZDogISFlcnJvcixcXG4gICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IHN1Ym1pdEZhaWxlZCxcXG4gICAgICB0b3VjaGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3RvdWNoZWQnKSksXFxuICAgICAgdmFsaWQ6ICFlcnJvclxcbiAgICB9XFxuICB9LCBwcm9wcywgcmVzdCk7XFxuICByZXR1cm4gZmluYWxQcm9wcztcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUZpZWxkQXJyYXlQcm9wcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcblxcbnZhciBjcmVhdGVGb3JtVmFsdWVTZWxlY3RvciA9IGZ1bmN0aW9uIGNyZWF0ZUZvcm1WYWx1ZVNlbGVjdG9yKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcblxcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaW52YXJpYW50X19fZGVmYXVsdCgpKGZvcm0sICdGb3JtIHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkJyk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICAgICAgZmllbGRzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gICAgICB9XFxuXFxuICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fX2RlZmF1bHQoKShmaWVsZHMubGVuZ3RoLCAnTm8gZmllbGRzIHNwZWNpZmllZCcpO1xcbiAgICAgIHJldHVybiBmaWVsZHMubGVuZ3RoID09PSAxID9cXG4gICAgICAvLyBvbmx5IHNlbGVjdGluZyBvbmUgZmllbGQsIHNvIHJldHVybiBpdHMgdmFsdWVcXG4gICAgICBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMuJyArIGZpZWxkc1swXSkgOlxcbiAgICAgIC8vIHNlbGVjdGluZyBtYW55IGZpZWxkcywgc28gcmV0dXJuIGFuIG9iamVjdCBvZiBmaWVsZCB2YWx1ZXNcXG4gICAgICBmaWVsZHMucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgZmllbGQpIHtcXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLnZhbHVlcy4nICsgZmllbGQpO1xcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBhY2N1bXVsYXRvciA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBmaWVsZCwgdmFsdWUpO1xcbiAgICAgIH0sIHt9KTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGb3JtVmFsdWVTZWxlY3Rvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuXFxuXFxudmFyIGNyZWF0ZVZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZVZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChjb25maWcpIHtcXG4gICAgdmFyIF9wcm9wJGdldEZvcm1TdGF0ZSRjbyA9IF9leHRlbmRzKHtcXG4gICAgICBwcm9wOiAndmFsdWVzJyxcXG4gICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICAgIH1cXG4gICAgfSwgY29uZmlnKSxcXG4gICAgICAgIGZvcm0gPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28uZm9ybSxcXG4gICAgICAgIHByb3AgPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28ucHJvcCxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9wcm9wJGdldEZvcm1TdGF0ZSRjby5nZXRGb3JtU3RhdGU7XFxuXFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X3JlZHV4X19bXFxcImFcXFwiIC8qIGNvbm5lY3QgKi9dKShmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wLCBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMnKSk7XFxuICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICByZXR1cm4ge307XFxuICAgIH0gLy8gaWdub3JlIGRpc3BhdGNoXFxuICAgICk7XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlVmFsdWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtTmFtZXMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtTmFtZXMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBrZXlzID0gX3JlZi5rZXlzO1xcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGtleXMoZ2V0Rm9ybVN0YXRlKHN0YXRlKSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybU5hbWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtVmFsdWVzID0gZnVuY3Rpb24gY3JlYXRlR2V0Rm9ybVZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtVmFsdWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1Jbml0aWFsVmFsdWVzKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLmluaXRpYWwnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtU3luY0Vycm9ycyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5zeW5jRXJyb3JzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5hc3luY0Vycm9ycycpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN5bmNXYXJuaW5ncyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1TeW5jV2FybmluZ3MoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3luY1dhcm5pbmdzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN5bmNXYXJuaW5ncyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN1Ym1pdEVycm9ycyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1TdWJtaXRFcnJvcnMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3VibWl0RXJyb3JzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN1Ym1pdEVycm9ycyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ByaXN0aW5lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNEaXJ0eSA9IGZ1bmN0aW9uIGNyZWF0ZUlzRGlydHkoc3RydWN0dXJlKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0sIGdldEZvcm1TdGF0ZSkge1xcbiAgICB2YXIgaXNQcmlzdGluZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzUHJpc3RpbmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSkoZm9ybSwgZ2V0Rm9ybVN0YXRlKTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiAhaXNQcmlzdGluZShzdGF0ZSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSXNEaXJ0eSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ZhbGlkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNJbnZhbGlkID0gZnVuY3Rpb24gY3JlYXRlSXNJbnZhbGlkKHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtLCBnZXRGb3JtU3RhdGUpIHtcXG4gICAgdmFyIGlzVmFsaWQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpKGZvcm0sIGdldEZvcm1TdGF0ZSk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gIWlzVmFsaWQoc3RhdGUpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzSW52YWxpZCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSXNTdWJtaXR0aW5nID0gZnVuY3Rpb24gY3JlYXRlSXNTdWJtaXR0aW5nKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0dGluZycpIHx8IGZhbHNlO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzU3VibWl0dGluZyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkID0gZnVuY3Rpb24gY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0U3VjY2VlZGVkJykgfHwgZmFsc2U7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVIYXNTdWJtaXRGYWlsZWQgPSBmdW5jdGlvbiBjcmVhdGVIYXNTdWJtaXRGYWlsZWQoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgICByZXR1cm4gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5zdWJtaXRGYWlsZWQnKSB8fCBmYWxzZTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVIYXNTdWJtaXRGYWlsZWQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI1MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG52YXIgRm9ybSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICBfaW5oZXJpdHMoRm9ybSwgX0NvbXBvbmVudCk7XFxuXFxuICBmdW5jdGlvbiBGb3JtKHByb3BzLCBjb250ZXh0KSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtKTtcXG5cXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZvcm0uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybSBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICB9XFxuICAgIHJldHVybiBfdGhpcztcXG4gIH1cXG5cXG4gIF9jcmVhdGVDbGFzcyhGb3JtLCBbe1xcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVySW5uZXJPblN1Ym1pdCh0aGlzLnByb3BzLm9uU3VibWl0KTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6ICdyZW5kZXInLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgnZm9ybScsIHRoaXMucHJvcHMpO1xcbiAgICB9XFxuICB9XSk7XFxuXFxuICByZXR1cm4gRm9ybTtcXG59KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuRm9ybS5wcm9wVHlwZXMgPSB7XFxuICBvblN1Ym1pdDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMuaXNSZXF1aXJlZFxcbn07XFxuRm9ybS5jb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChGb3JtKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG52YXIgRm9ybVNlY3Rpb24gPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgX2luaGVyaXRzKEZvcm1TZWN0aW9uLCBfQ29tcG9uZW50KTtcXG5cXG4gIGZ1bmN0aW9uIEZvcm1TZWN0aW9uKHByb3BzLCBjb250ZXh0KSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtU2VjdGlvbik7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGb3JtU2VjdGlvbi5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZvcm1TZWN0aW9uKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybVNlY3Rpb24gbXVzdCBiZSBpbnNpZGUgYSBjb21wb25lbnQgZGVjb3JhdGVkIHdpdGggcmVkdXhGb3JtKCknKTtcXG4gICAgfVxcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICBfY3JlYXRlQ2xhc3MoRm9ybVNlY3Rpb24sIFt7XFxuICAgIGtleTogJ2dldENoaWxkQ29udGV4dCcsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQsXFxuICAgICAgICAgIG5hbWUgPSB0aGlzLnByb3BzLm5hbWU7XFxuXFxuICAgICAgcmV0dXJuIHtcXG4gICAgICAgIF9yZWR1eEZvcm06IF9leHRlbmRzKHt9LCBjb250ZXh0Ll9yZWR1eEZvcm0sIHtcXG4gICAgICAgICAgc2VjdGlvblByZWZpeDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKVxcbiAgICAgICAgfSlcXG4gICAgICB9O1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogJ3JlbmRlcicsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgIGNoaWxkcmVuID0gX3Byb3BzLmNoaWxkcmVuLFxcbiAgICAgICAgICBuYW1lID0gX3Byb3BzLm5hbWUsXFxuICAgICAgICAgIGNvbXBvbmVudCA9IF9wcm9wcy5jb21wb25lbnQsXFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzLCBbJ2NoaWxkcmVuJywgJ25hbWUnLCAnY29tcG9uZW50J10pO1xcblxcbiAgICAgIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XFxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XFxuICAgICAgfVxcblxcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXFxuICAgICAgfSkpO1xcbiAgICB9XFxuICB9XSk7XFxuXFxuICByZXR1cm4gRm9ybVNlY3Rpb247XFxufShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbkZvcm1TZWN0aW9uLnByb3BUeXBlcyA9IHtcXG4gIG5hbWU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKVxcbn07XFxuXFxuRm9ybVNlY3Rpb24uZGVmYXVsdFByb3BzID0ge1xcbiAgY29tcG9uZW50OiAnZGl2J1xcbn07XFxuXFxuRm9ybVNlY3Rpb24uY2hpbGRDb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LmlzUmVxdWlyZWRcXG59O1xcblxcbkZvcm1TZWN0aW9uLmNvbnRleHRUeXBlcyA9IHtcXG4gIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKEZvcm1TZWN0aW9uKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcblxcbnZhciBhbnkgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYW55LFxcbiAgICBib29sID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgIGZ1bmMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgc2hhcGUgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc2hhcGUsXFxuICAgIHN0cmluZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcsXFxuICAgIG9uZU9mVHlwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUsXFxuICAgIG9iamVjdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3Q7XFxuXFxuXFxudmFyIHByb3BUeXBlcyA9IHtcXG4gIC8vIFN0YXRlOlxcbiAgYW55VG91Y2hlZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFueSBvZiB0aGUgZmllbGRzIGhhdmUgYmVlbiBtYXJrZWQgYXMgdG91Y2hlZFxcbiAgYXN5bmNWYWxpZGF0aW5nOiBvbmVPZlR5cGUoW2Jvb2wsIHN0cmluZ10pLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgYXN5bmMgdmFsaWRhdGlvbiBpcyBydW5uaW5nLCBhIHN0cmluZyBpZiBhIGZpZWxkIHRyaWdnZXJlZCBhc3luYyB2YWxpZGF0aW9uXFxuICBkaXJ0eTogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFueSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIGluaXRpYWxWYWx1ZXNcXG4gIGVycm9yOiBhbnksIC8vIGZvcm0td2lkZSBlcnJvciBmcm9tICdfZXJyb3InIGtleSBpbiB2YWxpZGF0aW9uIHJlc3VsdFxcbiAgZm9ybTogc3RyaW5nLmlzUmVxdWlyZWQsIC8vIHRoZSBuYW1lIG9mIHRoZSBmb3JtXFxuICBpbnZhbGlkOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlcmUgYXJlIGFueSB2YWxpZGF0aW9uIGVycm9yc1xcbiAgaW5pdGlhbGl6ZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSBoYXMgYmVlbiBpbml0aWFsaXplZFxcbiAgaW5pdGlhbFZhbHVlczogb2JqZWN0LCAvLyB0aGUgaW5pdGlhbFZhbHVlcyBvYmplY3QgcGFzc2VkIHRvIHJlZHV4Rm9ybVxcbiAgcHJpc3RpbmU6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyBpbml0aWFsVmFsdWVzXFxuICBwdXJlOiBib29sLmlzUmVxdWlyZWQsIC8vIGlmIHRydWUsIGltcGxlbWVudHMgc2hvdWxkQ29tcG9uZW50VXBkYXRlXFxuICBzdWJtaXR0aW5nOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlIGZvcm0gaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3VibWl0dGVkXFxuICBzdWJtaXRGYWlsZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSB3YXMgc3VibWl0dGVkIGFuZCBmYWlsZWQgZm9yIGFueSByZWFzb25cXG4gIHN1Ym1pdFN1Y2NlZWRlZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZSBmb3JtIHdhcyBzdWNjZXNzZnVsbHkgc3VibWl0dGVkXFxuICB2YWxpZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZXJlIGFyZSBubyB2YWxpZGF0aW9uIGVycm9yc1xcbiAgd2FybmluZzogYW55LCAvLyBmb3JtLXdpZGUgd2FybmluZyBmcm9tICdfd2FybmluZycga2V5IGluIHZhbGlkYXRpb24gcmVzdWx0XFxuICAvLyBBY3Rpb25zOlxcbiAgYXJyYXk6IHNoYXBlKHtcXG4gICAgaW5zZXJ0OiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIGluc2VydCBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gICAgbW92ZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBtb3ZlIGEgdmFsdWUgd2l0aGluIGFuIGFycmF5IGZpZWxkXFxuICAgIHBvcDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBwb3AgYSB2YWx1ZSBvZmYgb2YgYW4gYXJyYXkgZmllbGRcXG4gICAgcHVzaDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBwdXNoIGEgdmFsdWUgb250byBhbiBhcnJheSBmaWVsZFxcbiAgICByZW1vdmU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGEgdmFsdWUgZnJvbSBhbiBhcnJheSBmaWVsZFxcbiAgICByZW1vdmVBbGw6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGFsbCB0aGUgdmFsdWVzIGZyb20gYW4gYXJyYXkgZmllbGRcXG4gICAgc2hpZnQ6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gc2hpZnQgYSB2YWx1ZSBvdXQgb2YgYW4gYXJyYXkgZmllbGRcXG4gICAgc3BsaWNlOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIHNwbGljZSBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gICAgc3dhcDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzd2FwIHZhbHVlcyBpbiBhbiBhcnJheSBmaWVsZFxcbiAgICB1bnNoaWZ0OiBmdW5jLmlzUmVxdWlyZWQgLy8gZnVuY3Rpb24gdG8gdW5zaGlmdCBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gIH0pLFxcbiAgYXN5bmNWYWxpZGF0ZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byB0cmlnZ2VyIGFzeW5jIHZhbGlkYXRpb25cXG4gIGF1dG9maWxsOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBzZXQgYSB2YWx1ZSBvZiBhIGZpZWxkIGFuZCBtYXJrIGl0IGFzIGF1dG9maWxsZWRcXG4gIGJsdXI6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIG1hcmsgYSBmaWVsZCBhcyBibHVycmVkXFxuICBjaGFuZ2U6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBmaWVsZFxcbiAgY2xlYXJBc3luY0Vycm9yOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBjbGVhciB0aGUgYXN5bmMgZXJyb3Igb2YgYSBmaWVsZFxcbiAgZGVzdHJveTogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gZGVzdHJveSB0aGUgZm9ybSdzIGRhdGEgaW4gUmVkdXhcXG4gIGRpc3BhdGNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIHRoZSBSZWR1eCBkaXNwYXRjaCBhY3Rpb25cXG4gIGhhbmRsZVN1Ym1pdDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzdWJtaXQgdGhlIGZvcm1cXG4gIGluaXRpYWxpemU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGluaXRpYWxpemUgZm9ybSBkYXRhXFxuICByZXNldDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gcmVzZXQgdGhlIGZvcm0gZGF0YSB0byBwcmV2aW91c2x5IGluaXRpYWxpemVkIHZhbHVlc1xcbiAgdG91Y2g6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIG1hcmsgZmllbGRzIGFzIHRvdWNoZWRcXG4gIHN1Ym1pdDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gdHJpZ2dlciBhIHN1Ym1pc3Npb24gb2YgdGhlIHNwZWNpZmllZCBmb3JtXFxuICB1bnRvdWNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBtYXJrIGZpZWxkcyBhcyB1bnRvdWNoZWRcXG5cXG4gIC8vIHRyaWdnZXJTdWJtaXRcXG4gIHRyaWdnZXJTdWJtaXQ6IGJvb2wsIC8vIGlmIHRydWUsIHN1Ym1pdHMgdGhlIGZvcm0gb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1xcbiAgY2xlYXJTdWJtaXQ6IGZ1bmMuaXNSZXF1aXJlZCAvLyBjYWxsZWQgYmVmb3JlIGEgdHJpZ2dlcmVkIHN1Ym1pdCwgYnkgZGVmYXVsdCBjbGVhcnMgdHJpZ2dlclN1Ym1pdFxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAocHJvcFR5cGVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBwbGF0Zm9ybTY7XFxuXFxuLyoqKi8gfSksXFxuLyogMjU1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XFxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxcbiAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xcbiAgICB9XFxuICAgIHJldHVybiB0O1xcbn07XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciB1dWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTYpO1xcbnZhciByZWR1eF9mb3JtXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcXG52YXIgaGVscF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgVGV4dElucHV0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFRleHRJbnB1dCwgX3N1cGVyKTtcXG4gICAgZnVuY3Rpb24gVGV4dElucHV0KHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnJlbmRlclRleHQgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5wcm9wcywgbGFiZWwgPSBfYS5sYWJlbCwgZGlzYWJsZWQgPSBfYS5kaXNhYmxlZCwgYXV0b2ZvY3VzID0gX2EuYXV0b2ZvY3VzLCBoZWxwID0gX2EuaGVscCwgY29udGFpbmVyQ2xhc3MgPSBfYS5jb250YWluZXJDbGFzcywgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3MsIHR5cGUgPSBfYS50eXBlLCBzdGVwID0gX2Euc3RlcCwgcmFuZG9tR2VuZXJhdG9yID0gX2EucmFuZG9tR2VuZXJhdG9yLCBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLCBjb2xsYXBzZUVycm9yU3BhY2UgPSBfYS5jb2xsYXBzZUVycm9yU3BhY2U7XFxuICAgICAgICAgICAgdmFyIGlucHV0ID0gZmllbGQuaW5wdXQsIG1ldGEgPSBmaWVsZC5tZXRhO1xcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQnOiBtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yXFxuICAgICAgICAgICAgICAgIH0pIH0sXFxuICAgICAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgICAgICBoZWxwICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoaGVscF8xLmRlZmF1bHQsIHsgdGV4dDogaGVscCB9KSkgOiBudWxsLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJpbnB1dFxcXCIsIF9fYXNzaWduKHt9LCBpbnB1dCwgeyBrZXk6IGlucHV0Lm5hbWUsIHR5cGU6IHR5cGUgfHwgJ3RleHQnLCBzdGVwOiAhdHlwZSB8fCB0eXBlICE9PSAnbnVtYmVyJyA/IHVuZGVmaW5lZCA6IHN0ZXAsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgZGlzYWJsZWQ6IGRpc2FibGVkLCBhdXRvRm9jdXM6IGF1dG9mb2N1cywgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWNvbnRyb2wgaW5wdXQtYmxvY2snLCBpbnB1dENsYXNzLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2J0bi1wcmVmaXgnOiByYW5kb21HZW5lcmF0b3JcXG4gICAgICAgICAgICAgICAgICAgIH0pIH0pKSxcXG4gICAgICAgICAgICAgICAgcmFuZG9tR2VuZXJhdG9yID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogXFxcImJ0biBidG4taW5mbyBpbnB1dC1zdWZmaXhcXFwiLCBvbkNsaWNrOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gX3RoaXMuZ2VuZXJhdGVDbGllbnRTZWNyZXQoZmllbGQpOyB9IH0sXFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJmYXMgZmEtcmFuZG9tXFxcIiB9KSkpIDogbnVsbCxcXG4gICAgICAgICAgICAgICAgKG1ldGEudG91Y2hlZCAmJiAhIW1ldGEuZXJyb3IpID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwicFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidmFsaWRhdGlvbi1lcnJvci1tZXNzYWdlXFxcIiB9LCBtZXRhLmVycm9yKSA6IChjb2xsYXBzZUVycm9yU3BhY2UgPyBudWxsIDogUmVhY3QuY3JlYXRlRWxlbWVudChcXFwicFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidmFsaWRhdGlvbi1lcnJvci1tZXNzYWdlXFxcIiB9LCBcXFwiXFxcXHUwMEEwXFxcIikpKSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuZ2VuZXJhdGVDbGllbnRTZWNyZXQgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICBmaWVsZC5pbnB1dC5vbkNoYW5nZSh1dWlkLnYxKCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5zdGF0ZSA9IHt9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFRleHRJbnB1dC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgbmFtZSA9IF9hLm5hbWUsIGxhYmVsID0gX2EubGFiZWwsIGZvcm1hdCA9IF9hLmZvcm1hdCwgbm9ybWFsaXplID0gX2Eubm9ybWFsaXplLCBwYXJzZSA9IF9hLnBhcnNlLCB2YWxpZGF0ZSA9IF9hLnZhbGlkYXRlLCB3YXJuID0gX2Eud2FybjtcXG4gICAgICAgIHZhciBiYXNlRmllbGRQcm9wcyA9IHtcXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxcbiAgICAgICAgICAgIGZvcm1hdDogZm9ybWF0LFxcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogbm9ybWFsaXplLFxcbiAgICAgICAgICAgIHBhcnNlOiBwYXJzZSxcXG4gICAgICAgICAgICB2YWxpZGF0ZTogdmFsaWRhdGUsXFxuICAgICAgICAgICAgd2Fybjogd2FyblxcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZCwgX19hc3NpZ24oe30sIGJhc2VGaWVsZFByb3BzLCB7IGNvbXBvbmVudDogdGhpcy5yZW5kZXJUZXh0IH0pKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIFRleHRJbnB1dDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFRleHRJbnB1dDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHYxID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTcpO1xcbnZhciB2NCA9IF9fd2VicGFja19yZXF1aXJlX18oMjU4KTtcXG5cXG52YXIgdXVpZCA9IHY0O1xcbnV1aWQudjEgPSB2MTtcXG51dWlkLnY0ID0gdjQ7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB1dWlkO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI1NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG52YXIgcm5nID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nik7XFxudmFyIGJ5dGVzVG9VdWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nyk7XFxuXFxuLy8gKipgdjEoKWAgLSBHZW5lcmF0ZSB0aW1lLWJhc2VkIFVVSUQqKlxcbi8vXFxuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcXG4vLyBhbmQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3V1aWQuaHRtbFxcblxcbnZhciBfbm9kZUlkO1xcbnZhciBfY2xvY2tzZXE7XFxuXFxuLy8gUHJldmlvdXMgdXVpZCBjcmVhdGlvbiB0aW1lXFxudmFyIF9sYXN0TVNlY3MgPSAwO1xcbnZhciBfbGFzdE5TZWNzID0gMDtcXG5cXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Jyb29mYS9ub2RlLXV1aWQgZm9yIEFQSSBkZXRhaWxzXFxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcXG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xcbiAgdmFyIGIgPSBidWYgfHwgW107XFxuXFxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcXG4gIHZhciBub2RlID0gb3B0aW9ucy5ub2RlIHx8IF9ub2RlSWQ7XFxuICB2YXIgY2xvY2tzZXEgPSBvcHRpb25zLmNsb2Nrc2VxICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmNsb2Nrc2VxIDogX2Nsb2Nrc2VxO1xcblxcbiAgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XFxuICAvLyBzcGVjaWZpZWQuICBXZSBkbyB0aGlzIGxhemlseSB0byBtaW5pbWl6ZSBpc3N1ZXMgcmVsYXRlZCB0byBpbnN1ZmZpY2llbnRcXG4gIC8vIHN5c3RlbSBlbnRyb3B5LiAgU2VlICMxODlcXG4gIGlmIChub2RlID09IG51bGwgfHwgY2xvY2tzZXEgPT0gbnVsbCkge1xcbiAgICB2YXIgc2VlZEJ5dGVzID0gcm5nKCk7XFxuICAgIGlmIChub2RlID09IG51bGwpIHtcXG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcXG4gICAgICBub2RlID0gX25vZGVJZCA9IFtcXG4gICAgICAgIHNlZWRCeXRlc1swXSB8IDB4MDEsXFxuICAgICAgICBzZWVkQnl0ZXNbMV0sIHNlZWRCeXRlc1syXSwgc2VlZEJ5dGVzWzNdLCBzZWVkQnl0ZXNbNF0sIHNlZWRCeXRlc1s1XVxcbiAgICAgIF07XFxuICAgIH1cXG4gICAgaWYgKGNsb2Nrc2VxID09IG51bGwpIHtcXG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcXG4gICAgfVxcbiAgfVxcblxcbiAgLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcXG4gIC8vICgxNTgyLTEwLTE1IDAwOjAwKS4gIEpTTnVtYmVycyBhcmVuJ3QgcHJlY2lzZSBlbm91Z2ggZm9yIHRoaXMsIHNvXFxuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXFxuICB2YXIgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogbmV3IERhdGUoKS5nZXRUaW1lKCk7XFxuXFxuICAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXFxuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xcbiAgdmFyIG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxO1xcblxcbiAgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxcbiAgdmFyIGR0ID0gKG1zZWNzIC0gX2xhc3RNU2VjcykgKyAobnNlY3MgLSBfbGFzdE5TZWNzKS8xMDAwMDtcXG5cXG4gIC8vIFBlciA0LjIuMS4yLCBCdW1wIGNsb2Nrc2VxIG9uIGNsb2NrIHJlZ3Jlc3Npb25cXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XFxuICAgIGNsb2Nrc2VxID0gY2xvY2tzZXEgKyAxICYgMHgzZmZmO1xcbiAgfVxcblxcbiAgLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcXG4gIC8vIHRpbWUgaW50ZXJ2YWxcXG4gIGlmICgoZHQgPCAwIHx8IG1zZWNzID4gX2xhc3RNU2VjcykgJiYgb3B0aW9ucy5uc2VjcyA9PT0gdW5kZWZpbmVkKSB7XFxuICAgIG5zZWNzID0gMDtcXG4gIH1cXG5cXG4gIC8vIFBlciA0LjIuMS4yIFRocm93IGVycm9yIGlmIHRvbyBtYW55IHV1aWRzIGFyZSByZXF1ZXN0ZWRcXG4gIGlmIChuc2VjcyA+PSAxMDAwMCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3V1aWQudjEoKTogQ2FuXFxcXCd0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlYycpO1xcbiAgfVxcblxcbiAgX2xhc3RNU2VjcyA9IG1zZWNzO1xcbiAgX2xhc3ROU2VjcyA9IG5zZWNzO1xcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7XFxuXFxuICAvLyBQZXIgNC4xLjQgLSBDb252ZXJ0IGZyb20gdW5peCBlcG9jaCB0byBHcmVnb3JpYW4gZXBvY2hcXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwO1xcblxcbiAgLy8gYHRpbWVfbG93YFxcbiAgdmFyIHRsID0gKChtc2VjcyAmIDB4ZmZmZmZmZikgKiAxMDAwMCArIG5zZWNzKSAlIDB4MTAwMDAwMDAwO1xcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcXG4gIGJbaSsrXSA9IHRsID4+PiAxNiAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCA+Pj4gOCAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCAmIDB4ZmY7XFxuXFxuICAvLyBgdGltZV9taWRgXFxuICB2YXIgdG1oID0gKG1zZWNzIC8gMHgxMDAwMDAwMDAgKiAxMDAwMCkgJiAweGZmZmZmZmY7XFxuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xcbiAgYltpKytdID0gdG1oICYgMHhmZjtcXG5cXG4gIC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXFxuICBiW2krK10gPSB0bWggPj4+IDI0ICYgMHhmIHwgMHgxMDsgLy8gaW5jbHVkZSB2ZXJzaW9uXFxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjtcXG5cXG4gIC8vIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYCAoUGVyIDQuMi4yIC0gaW5jbHVkZSB2YXJpYW50KVxcbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwO1xcblxcbiAgLy8gYGNsb2NrX3NlcV9sb3dgXFxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7XFxuXFxuICAvLyBgbm9kZWBcXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgNjsgKytuKSB7XFxuICAgIGJbaSArIG5dID0gbm9kZVtuXTtcXG4gIH1cXG5cXG4gIHJldHVybiBidWYgPyBidWYgOiBieXRlc1RvVXVpZChiKTtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB2MTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHJuZyA9IF9fd2VicGFja19yZXF1aXJlX18oODYpO1xcbnZhciBieXRlc1RvVXVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oODcpO1xcblxcbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcXG5cXG4gIGlmICh0eXBlb2Yob3B0aW9ucykgPT0gJ3N0cmluZycpIHtcXG4gICAgYnVmID0gb3B0aW9ucyA9PT0gJ2JpbmFyeScgPyBuZXcgQXJyYXkoMTYpIDogbnVsbDtcXG4gICAgb3B0aW9ucyA9IG51bGw7XFxuICB9XFxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcXG5cXG4gIHZhciBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcXG5cXG4gIC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcXG4gIHJuZHNbNl0gPSAocm5kc1s2XSAmIDB4MGYpIHwgMHg0MDtcXG4gIHJuZHNbOF0gPSAocm5kc1s4XSAmIDB4M2YpIHwgMHg4MDtcXG5cXG4gIC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxcbiAgaWYgKGJ1Zikge1xcbiAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgMTY7ICsraWkpIHtcXG4gICAgICBidWZbaSArIGlpXSA9IHJuZHNbaWldO1xcbiAgICB9XFxuICB9XFxuXFxuICByZXR1cm4gYnVmIHx8IGJ5dGVzVG9VdWlkKHJuZHMpO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IHY0O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI1OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XFxuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcXG4gICAgICAgICAgICB0W3BdID0gc1twXTtcXG4gICAgfVxcbiAgICByZXR1cm4gdDtcXG59O1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgcmVkdXhfZm9ybV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgaGVscF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XFxudmFyIFNlbGVjdElucHV0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFNlbGVjdElucHV0LCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBTZWxlY3RJbnB1dChwcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5yZW5kZXJTZWxlY3QgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5wcm9wcywgbGFiZWwgPSBfYS5sYWJlbCwgb3B0aW9ucyA9IF9hLm9wdGlvbnMsIGRpc2FibGVkID0gX2EuZGlzYWJsZWQsIGhlbHAgPSBfYS5oZWxwLCBjb250YWluZXJDbGFzcyA9IF9hLmNvbnRhaW5lckNsYXNzLCBpbnB1dENsYXNzID0gX2EuaW5wdXRDbGFzcywgaGlkZUVtcHR5T3B0aW9uID0gX2EuaGlkZUVtcHR5T3B0aW9uLCBjb2xsYXBzZUVycm9yU3BhY2UgPSBfYS5jb2xsYXBzZUVycm9yU3BhY2U7XFxuICAgICAgICAgICAgdmFyIGlucHV0ID0gZmllbGQuaW5wdXQsIG1ldGEgPSBmaWVsZC5tZXRhO1xcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQnOiBtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yXFxuICAgICAgICAgICAgICAgIH0pIH0sXFxuICAgICAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgICAgICBoZWxwICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoaGVscF8xLmRlZmF1bHQsIHsgdGV4dDogaGVscCB9KSkgOiBudWxsLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzZWxlY3RcXFwiLCBfX2Fzc2lnbih7fSwgaW5wdXQsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWNvbnRyb2wnLCBpbnB1dENsYXNzKSwgZGlzYWJsZWQ6IGRpc2FibGVkIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgaGlkZUVtcHR5T3B0aW9uID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcIm9wdGlvblxcXCIsIHsgdmFsdWU6IFxcXCJcXFwiIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdCwgaWR4KSB7IHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJvcHRpb25cXFwiLCB7IGtleTogaWR4LCB2YWx1ZTogb3B0LnZhbHVlLCBkaXNhYmxlZDogb3B0LmRpc2FibGVkIH0sIG9wdC5sYWJlbCB8fCBvcHQudmFsdWUpOyB9KSksXFxuICAgICAgICAgICAgICAgIChtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yKSA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgbWV0YS5lcnJvcikgOiAoY29sbGFwc2VFcnJvclNwYWNlID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgXFxcIlxcXFx1MDBBMFxcXCIpKSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0ge307XFxuICAgICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG4gICAgU2VsZWN0SW5wdXQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgIHZhciBfYSA9IHRoaXMucHJvcHMsIG9wdGlvbnMgPSBfYS5vcHRpb25zLCBuYW1lID0gX2EubmFtZSwgZm9ybWF0ID0gX2EuZm9ybWF0LCBub3JtYWxpemUgPSBfYS5ub3JtYWxpemUsIHBhcnNlID0gX2EucGFyc2UsIHZhbGlkYXRlID0gX2EudmFsaWRhdGUsIHdhcm4gPSBfYS53YXJuLCBjb250YWluZXJDbGFzcyA9IF9hLmNvbnRhaW5lckNsYXNzLCBoZWxwID0gX2EuaGVscCwgbGFiZWwgPSBfYS5sYWJlbCwgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3M7XFxuICAgICAgICB2YXIgYmFzZUZpZWxkUHJvcHMgPSB7XFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcXG4gICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcXG4gICAgICAgICAgICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBwYXJzZTogcGFyc2UsXFxuICAgICAgICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlLFxcbiAgICAgICAgICAgIHdhcm46IHdhcm5cXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZCwgX19hc3NpZ24oe30sIGJhc2VGaWVsZFByb3BzLCB7IGNvbXBvbmVudDogdGhpcy5yZW5kZXJTZWxlY3QgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1ncm91cCcsIGNvbnRhaW5lckNsYXNzKSB9LFxcbiAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICBsYWJlbCxcXG4gICAgICAgICAgICAgICAgaGVscCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KGhlbHBfMS5kZWZhdWx0LCB7IHRleHQ6IGhlbHAgfSkpIDogbnVsbCxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzZWxlY3RcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1jb250cm9sJywgaW5wdXRDbGFzcyksIGRpc2FibGVkOiB0cnVlIH0pKSk7XFxuICAgIH07XFxuICAgIHJldHVybiBTZWxlY3RJbnB1dDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFNlbGVjdElucHV0O1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI2MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciBjbGFzc05hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XFxudmFyIHNwaW5uZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYxKTtcXG52YXIgVG9nZ2xlUGFuZWwgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xcbiAgICBfX2V4dGVuZHMoVG9nZ2xlUGFuZWwsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFRvZ2dsZVBhbmVsKHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnRvZ2dsZVBhbmVsQ29udGVudCA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy50b2dnbGFibGUgIT09IGZhbHNlKSB7XFxuICAgICAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcXG4gICAgICAgICAgICAgICAgICAgIG9wZW5lZDogIV90aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMudG9nZ2xlQ2FsbGJhY2spIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcm9wcy50b2dnbGVDYWxsYmFjayhfdGhpcy5zdGF0ZS5vcGVuZWQpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7XFxuICAgICAgICAgICAgb3BlbmVkOiBfdGhpcy5wcm9wcy5kZWZhdWx0T3BlbmVkXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFRvZ2dsZVBhbmVsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgdGl0bGVTcGlubmVyID0gdGhpcy5wcm9wcy5zaG93U3Bpbm5lciA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInNwaW5uZXItY29udGFpbmVyXFxcIiB9LFxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoc3Bpbm5lcl8xLmRlZmF1bHQsIG51bGwpKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIGxDdXN0b21Db250cm9scyA9IHRoaXMucHJvcHMubGVmdEN1c3RvbUNvbnRyb2xzID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtaGVhZGluZy1jb250cm9sc1xcXCIgfSwgdGhpcy5wcm9wcy5sZWZ0Q3VzdG9tQ29udHJvbHMpKSA6IG51bGw7XFxuICAgICAgICB2YXIgckN1c3RvbUNvbnRyb2xzID0gdGhpcy5wcm9wcy5yaWdodEN1c3RvbUNvbnRyb2xzID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtaGVhZGluZy1jb250cm9sc1xcXCIsIHN0eWxlOiB7IHJpZ2h0OiAwIH0gfSwgdGhpcy5wcm9wcy5yaWdodEN1c3RvbUNvbnRyb2xzKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIGNhbmNlbEJ0biA9ICh0aGlzLnByb3BzLmNhbmNlbEJ0biAmJiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5sYWJlbCAmJiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5hY3Rpb24pID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnYnRuJywgdGhpcy5wcm9wcy5jYW5jZWxCdG4uY3NzQ2xhc3MsIHtcXG4gICAgICAgICAgICAgICAgJ2J0bi1mb250IGJ0bi10cmFucyc6ICF0aGlzLnByb3BzLmNhbmNlbEJ0bi5jc3NDbGFzc1xcbiAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5hY3Rpb24gfSwgdGhpcy5wcm9wcy5jYW5jZWxCdG4ubGFiZWwpKSA6IG51bGw7XFxuICAgICAgICB2YXIgc3VibWl0QnRuID0gKHRoaXMucHJvcHMuc3VibWl0QnRuICYmIHRoaXMucHJvcHMuc3VibWl0QnRuLmxhYmVsICYmIHRoaXMucHJvcHMuc3VibWl0QnRuLmFjdGlvbikgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiYnV0dG9uXFxcIiwgeyB0eXBlOiBcXFwiYnV0dG9uXFxcIiwgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdidG4gcHVsbC1yaWdodCcsIHRoaXMucHJvcHMuc3VibWl0QnRuLmNzc0NsYXNzLCB7XFxuICAgICAgICAgICAgICAgICdidG4tc3VjY2Vzcyc6ICF0aGlzLnByb3BzLnN1Ym1pdEJ0bi5jc3NDbGFzc1xcbiAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnByb3BzLnN1Ym1pdEJ0bi5hY3Rpb24gfSwgdGhpcy5wcm9wcy5zdWJtaXRCdG4ubGFiZWwpKSA6IG51bGw7XFxuICAgICAgICB2YXIgcGFuZWxGb290ZXIgPSAoY2FuY2VsQnRuIHx8IHN1Ym1pdEJ0bikgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJwYW5lbC1mb290ZXJcXFwiIH0sXFxuICAgICAgICAgICAgY2FuY2VsQnRuLFxcbiAgICAgICAgICAgIHN1Ym1pdEJ0bikpIDogbnVsbDtcXG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0XFxcIiwgc3R5bGU6IHRoaXMucHJvcHMuY3VzdG9tU3R5bGUgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcyhcXFwicGFuZWwtaGVhZGluZyBcXFwiICsgdGhpcy5wcm9wcy5oZWFkZXJDdXN0b21DU1MsIHtcXG4gICAgICAgICAgICAgICAgICAgICdjbGljay1wb2ludGVyJzogdGhpcy5wcm9wcy50b2dnbGFibGUgIT09IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgJ2hpZGRlbic6ICEhdGhpcy5wcm9wcy5oaWRlVGl0bGVcXG4gICAgICAgICAgICAgICAgfSksIG9uQ2xpY2s6IHRoaXMudG9nZ2xlUGFuZWxDb250ZW50IH0sXFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImgzXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ3BhbmVsLXRpdGxlJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdoYXMtc3Bpbm5lcic6IHRoaXMucHJvcHMuc2hvd1NwaW5uZXJcXG4gICAgICAgICAgICAgICAgICAgIH0pIH0sIHRoaXMucHJvcHMucGFuZWxUaXRsZSksXFxuICAgICAgICAgICAgICAgIHRpdGxlU3Bpbm5lcixcXG4gICAgICAgICAgICAgICAgbEN1c3RvbUNvbnRyb2xzLFxcbiAgICAgICAgICAgICAgICByQ3VzdG9tQ29udHJvbHMsXFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdhY3Rpb25zJywgeyAnaGlkZGVuJzogdGhpcy5wcm9wcy50b2dnbGFibGUgPT09IGZhbHNlIH0pIH0sXFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2ZhcycsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZXZyb24tZG93bic6ICF0aGlzLnN0YXRlLm9wZW5lZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZXZyb24tdXAnOiB0aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIH0pKSksXFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ3BhbmVsLWJvZHknLCB7XFxuICAgICAgICAgICAgICAgICAgICAnaGlkZGVuJzogIXRoaXMuc3RhdGUub3BlbmVkXFxuICAgICAgICAgICAgICAgIH0pIH0sIHRoaXMucHJvcHMuY2hpbGRyZW4pLFxcbiAgICAgICAgICAgIHBhbmVsRm9vdGVyKSk7XFxuICAgIH07XFxuICAgIFRvZ2dsZVBhbmVsLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gKG5leHRQcm9wcykge1xcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVmYXVsdE9wZW5lZCAhPT0gbmV4dFByb3BzLmRlZmF1bHRPcGVuZWQpIHtcXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcXG4gICAgICAgICAgICAgICAgb3BlbmVkOiBuZXh0UHJvcHMuZGVmYXVsdE9wZW5lZFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9O1xcbiAgICByZXR1cm4gVG9nZ2xlUGFuZWw7XFxufShSZWFjdC5Db21wb25lbnQpKTtcXG5leHBvcnRzLmRlZmF1bHQgPSBUb2dnbGVQYW5lbDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XFxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcXG4gICAgfTtcXG59KSgpO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgc3Bpbm5lcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjIpO1xcbnZhciBTcGlubmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFNwaW5uZXIsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFNwaW5uZXIocHJvcHMpIHtcXG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgfVxcbiAgICBTcGlubmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX2EgPSB0aGlzLnByb3BzLCB0b3AgPSBfYS50b3AsIGJvdHRvbSA9IF9hLmJvdHRvbSwgcmlnaHQgPSBfYS5yaWdodCwgbGVmdCA9IF9hLmxlZnQsIHNpemUgPSBfYS5zaXplO1xcbiAgICAgICAgdmFyIHNwaW5uZXJTdHlsZSA9IHtcXG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcXG4gICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxcbiAgICAgICAgICAgIG1hcmdpbjogJ2F1dG8nLFxcbiAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXFxuICAgICAgICAgICAgdG9wOiB0b3AsXFxuICAgICAgICAgICAgYm90dG9tOiBib3R0b20sXFxuICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0LFxcbiAgICAgICAgICAgIGxlZnQ6IGxlZnRcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiAnc3Bpbm5lcicsIHN0eWxlOiBzcGlubmVyU3R5bGUgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJpbWdcXFwiLCB7IHNyYzogc3Bpbm5lcl8xLnNwaW5uZXIsIGFsdDogJ0xvYWRpbmcuLi4nLCB3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IDMyLCBoZWlnaHQ6IHRoaXMucHJvcHMuc2l6ZSB8fCAzMiB9KSkpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gU3Bpbm5lcjtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFNwaW5uZXI7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbmV4cG9ydHMuc3Bpbm5lciA9ICdkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhRQUJBQVBJQUFQeWxiZjJtYnYyNmovM09yLzdpMFA3dDR2MjdrQUFBQUNIL0MwNUZWRk5EUVZCRk1pNHdBd0VBQUFBaC9ob2lRM0psWVhSbFpDQjNhWFJvSUVOb2FXMXdiSGt1WTI5dElnQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NrbXF2Zmlxd2J2L25pS01aR21XUzZabUcraCs0aW1iNldvVDdhdkhjMS9mcXB6T3hldkpma0NNY0FnREdIMktaQkRBZkJXZnFLaFVTYTJDcnRnUmNvdnJla1BPTUUxTHJpelA0UEI0Ky9iR3NYTnB2WHAvNXBON1RIMUdmMENCUTROUUFHMFdoenRwYWlTRk40NVdrSkVDa3phVlJKZVJtaXVjWDU1cW9GTm5UWmlTYkcyaXFhcVpFN0t6dExXMnQ3aTBCYnU4dmI2OXVRd0J3OFRGeHNVTHY4cS93UXZIejhmSnk5TUZ6UXJRMk1QUzFNcldBTm5ZMjl5KzN1RFE0dU84NWViUkN1bk0xdXp0QU8vazhmTEk3dlhxOS9qYSt2dXE5Zk9IN3QwNmZ3RUtwanRJRU9BK2h2Z1Vqb01vVHlJM2l1d3NVc05vVG5yak5JN2dQQzREbVUxa3Q0RVJ2YWxjeWJKbGc0QzdITmFUYVpEbVFub3diVTdVZVJGblFKNGJnWDcwK1pEb1RLRWpqZGFFS1ZEcFRhWklUenJkQ1hWcVQ2dEJxMWJGT2xScnpxand2UDRFYTA5c1VhNUp6UjVGZTFKdFRiWmh2MjUxKy9RcjNMSnk3ZEtscWpmdjJMbCtpMjUxU2JpdzRRZ0pBQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTbG1xdmZncXdydi9uaktNWkdtV1M2Wm1HK2grNGltYjZXb1g3YXZIYzEvZnFwek94ZXZKZmtDTWNBZ0RHSDJLWkJEQWZCV2ZxS2hVU2EyQ3J0Z1Jjb3ZyZWtQT01FMUxyaXpQNFBCNCsvYkdzWE5wdlhwLzVwTjdUSDFHZjBDQlE0TlFBRzBXaHp0cGFpU0ZONDVXa0pFRGt6YVZSSmVSbWl1Y1g1NXFvRk5uVFppU2JHMmlxYXFaRTdLenRMVzJ0N2kwakc2NUN3Sy93TUhDd2FZc3ZRckR5Y1BGWE1mS3o3L01Hc2NBME0vU2pkVFd5dGk4enR2THJHVFUxZURDM1dYZjVzRG81T3ZFNG5UYTc5SHhldlAwN2Zqdit1cjg5b0QycmV2WGkxNjlSYnZjR1NTWXk2QUFocmdjUXJ3bGtaekZpeGd6TnRoVmhuR2pnZ0FnUTRvY0tWS2ZSd0FrVTVJMG1SQ2x5cGNCV0RMNkNGT2x6Rll1YTY0RWFBamh6Snc2Uy9LazVCTm4wSjFGeHlXVmQzVGtUYVZOaFM2OWR6SnF5S2RNcmNZY3VtbHFRSzFidmZhc3FoWHJQYkJtdjVibEdrb3NVYlJzcDVDMW1yWW5YTGRkNTBiVnlMZXZYMWtKQUFBaCtRUUpDZ0FBQUN3QUFBQUFRQUJBQUFBRC93aTYzUDR3U2xtcXZmaXF6TE1pWUNpTzR0S2QxWVoySCttTzVzcXBNdGErZUZ4cndHNER1S0RPVjZBUmIwSFMwR2RrQXBPdTVhNDVmVUpoMUZwV2hyeUNwTm9lTVdYMWZyY3JOS3JyQlhQRlkvYlZuWVlmeTJiNjJ1NDBsOVFuZ0N4NGJZSXpmRlYrSVhxQmlHR0taNDV2WTJTUUJJeURsRVdFYzRZZWtuV1dFNk9rcGFhbnFLbW1tcW9NQTYrd3NiS3htSWV0QUxPNXM3V2Z0N3Evcjd3L3ZzQzZ3anpFeGJ1ZXc2M0t1Y2NXdHdyUHk2Qjd5ZFhCek1qTzJyRFJaTm5hNFp2ajFlWFR1Ti9iMTQzbnorblQ3TzJzOC9UeThNcjUzdXo4cXZRRy9Fc1ZVSjNCZ3dnVE9yQVhvS0hEaHhBZktqQkFzYUxGaXhibFJkd1ljWE1peG84WE5YSWNHY0FqeUpNaVNXNDBlZkpqU3BVUVdiWU15VTBhQUpnckFjd0UrUkpuUTVrN0tmYjBDVFRvVUp4RmR4NkZtWFRtVXBWTld6NGxHUlZsVFRJK1krb01TdFBkb0t3U3QzS3RPSFZrVlo1WE40RjFlTlpsV2dWcmY0b2RhNkFzeDdZWTdlYWtTMWFoMzcrQUp5UUFBQ0g1QkFrS0FBQUFMQUFBQUFCQUFFQUFBQVAvQ0xyYy9qQktXYXE5K0tyTTgrNWdzWVRnUjNyQXlZMHFacmJWQzdOd25OWTJidCs0M1BvcVdnMTRJcEtFTTk1UW1XVCtuRUZvMFJpaWxxUkhhMGU3d2xhNUtKM0lleVZ2elYweDhxbEdvOXd1dUVadVdVZmJiWHBPQjQ3cngzaDhmWE9CUFlOMWY0YzdFNHlOam8rUWtaS01lWk1BQkppWm1wdWFkbE9XbDV5aW01NVpvS09vbUtWZnA2bWpxMldXcnErS1k2MnpwTFdnQ3JpY3NHZTN2YXE2dThLZHhNSEN2MTNKdmN0dnNzYkRpY1hTQk05KzBkTFljODI0M0lqZXMrQ0xrOWJYeU5yRzVMYnF5cnZ3OGZMekVnSDI5L2o1K0FvQy9mNy9BUDhwR0VDd29NR0RCaGZvVzZpUFg4Q0hBQWNpbkhoUUljT0xBUnhDM0NpUmlxSkhpeGdYYXR6NHNLUEhpU0JENWh0Sk1pS0FreDhWcUJRSm9DVkVrekFUeXB5NXNxYk5nRGh6RWt6Sk02UFBud0pmQ3EyNHM2Zzlsa2lEQ2lYS0UrcFBxVG1wenJScUV5dE1yU3E1dHZSNkVteElzU1RKeGdUZzlCNWFqa3FYRmpTTDhlM051SElIMEwxb3R5UmV1WHNaOWdYNmQybGdta2hkNXAzYjFPbGd4WXYxMHB0TXVmS2pCQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTbG1xdmZpcXpQUHVZTEdFNEVkNndNbU5LbWEyMVF1emNKeldObTdmdU56Nktsb05lQ0tTaERQZVVKbGsvcHhCYU5FWW9wYWtSMnRIdThKV3VTaWR5SHNsYjgxZE1mS3BScVBjTHJoR2JsbEgyMjE2VGdlTzY4ZDRmSDF6Z1QyRGRYK0hPeE9Nalk2UGtKR1NqQUdWbHBlWWw1TU1lWm1lbVp0MlV3Q2ZwWldoaW1Pa3BwK29pUXFzcmFpZHNhQ3pncXUxbXJlR3VicW52RXUrdjY2MHY4Q2h4c2ZGdU1lV3pMM095SnZLeE1GTjBnSFF3dG5iMk5MZVQ4TzY0VkhqdGVXanJ1dnM3ZTRMQXZIeTgvVHpDZ1A0K2ZyNytnb0Uvd0FEQ2d3SXI1NUJldmY0S2R6bmI2QkRnUVVQU2t5NHNHTERoeGdqU2pSSXNZYWl3b3NZSFdyY2lCQ0FSNHNBUW1aVVFQSmd4NVA5VXFvVXliSmx2WmN3OFlHY0NYQ2tUUUU0Yys3a1NjQ256YUF3aC9JMDJoTHBTYVV6bVpKMDZoR3FTcWticWFJa0NySG1UM2xhRjFvTmlYV2l5WndNWlhMOVY5YmxXYlQ1eHE0RThOWGVXN2dENUQ1c3kvRXVYTDAwNmRhTkYvYWoyclY4Yi9wRkMzamd1OGVRSXpOS0FBQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NobXF2Zmlxd3J2LzNnYU8zNUtkbVVpdTZqcWFhQnkwYmduVUpDeWZOTTcxUHQwT0E4UVZhOEtoNWVoaXNoVEsxTTFubzlvQVVlTFUrdHR5azFGbnptc0ZLOFV2TXRVOFJJUGMxNnhHSGFRYm9mSUtQR1JINHZON0hZRmRXSGt6ZlUySVQ0V0FpbU5jZ245eWd3V1ViRHVXam1tTWs1cHZubGNUb3FPa3BhYW5xS0lDcTZ5dHJxMnBESkNFcjdXdnNRdXpsUXEydmF1NG1RQyt2Y0NnZk1MRHRjVzZDOG5Ld015OHpxN0xzODNUc05EVzB0aS8ycERYM1FMVjROemQ1Ri9tMk9obDZ0UHNhKzdPOEhYSTR2UjM5dWZmNmZyci9PMzh2UU1ZVCtBOGd2V0tLVnpJc09HQ0FSQWpTcHdvVVFHQml4Z3phc3dZakh1aVI0b1dONHJVMlBHanlRRWhSNm9zZWRKalNwVWlXYmFjK0JJbVNXT1JBTXgwQ2NEbVNKazdJZGIwZVJGbzBLRkVqZTVFNmxQcFRLWTJuYmFFQ2xQcVNhb3JjUklLU3JNbjBadlJkSEtOaVBXbjFsMWl4NkwwK2hXalZaTmxZNTU5cUhadFc0NXpGZFMxZTdkbzNyUmo0MjRNNXJDdzRjTVJFZ0FBSWZrRUNRb0FBQUFzQUFBQUFFQUFRQUFBQS84SXV0eitNRW9wcXIzNHFzQzcvNTVTakdScGxrdW1aaHZvZnVJcG0rbHFDKzJyeDNOZjM2cWN6c1hyeVg1QWpIQUlBeGg5aW1RUXdId1ZuNmlvVkVtdGdxN1lFWEtMNjNwRHpqQk5TNjRzeitEd2VQdjJ4ckZ6YWIxNmYrYVRlMHg5Um45QWdVT0RVQUJ0Rm9jN2FXb2toVGVPVnBDUkJaTTJsVVNYa1pvcm5GK2VhcUJUWjAyWWtteHRvcW1xbVJPeXM3UzF0cmU0dEFPN3ZMMit2YmtNc0xFQXY4YS93UXZEQzhmTnU4bUpNOHpPeDlDa2NnclUxZERMMmRySTNMRFQzOERocXVQa3orYVk2T25XM2NYcHZPL2kzdklEOU9mMjh2bnMrKzdyUHYwajEwOWd2SHNGU3czOGxoRGJRWDRCRlQ0RW1BemVQWFVWNjFuYnlMRjNvMGNHQkVLS0hFbHlaTFFqMS9Bb0tNbXk1TWtUTDljQWFFa3paTXdzOEdyU3ZMa3FwMDZXUE1XazlMUHlwOHVoaEpBcU1ucTBtMCttSW9QR2VncVZnTlNyUmF0YVZTcU5LOHFaV3JjNjFSaFdiRDJxVUxHaVphcVdiTmkyK3NCcWhldFBibFc2QnN2aWxhalhLMHkvTWo4S0hrdzRRZ0lBSWZrRUNRb0FBQUFzQUFBQUFFQUFRQUFBQS84SXV0eitNRW81cXIzNEtzRzcvNTRTakdScGxrdW1aaHZvZnVJcG0rbHFEKzJyeDNOZjM2cWN6c1hyeVg1QWpIQUlBeGg5aW1RUXdId1ZuNmlvVkVtdGdxN1lFWEtMNjNwRHpqQk5TNjRzeitEd2VQdjJ4ckZ6YWIxNmYrYVRlMHg5Um45QWdVT0RVQUJ0Rm9jN2FXb2toVGVPVnBDUkFaTTJsVVNYa1pvcm5GK2VhcUJUWjAyWWtteHRvcW1xbVJPeXM3UzF0cmU0dEFTN3ZMMit2YmtNQmNQRXhjYkZDNy9LdjhFTHg4L0h5Y3ZUQk0wSzBOakQwdFRLMWdEWjJOdmN2dDdnME9ManZPWG0wUXJwek5iczdRRHY1UEh5eU83MTZ2ZjQydnI3cXZYemgrN2RPbjhGQ3FZN1NCRGdQb2I0Rkk2REtFOGlONHJzTEZMRGFFNTM0elNPNER3dUE1bE5aTGVCRWIycFhNbXlaUU9FLzJBbS9BYlRXVTJhQ0svZHhObFFwczZjUDN2ZTlCazBKVkdpUEkwTzNYbDBLZENrRmFGbWxOcXhhTlNtVDdFS3plcDBhME9xSWNHV0ZCdk82bFN0S2NtZVUvdk1iRlcyN2RCR2hXdk1iVmlrY3M4eTdhcVVLOUM4YjEwS0hrdzRRZ0lBT3c9PSc7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Bpbm5lci5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIG1kNV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjQpO1xcbnZhciBiYXNlNjQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2Nyk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgd29yZGluZ3NfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjY5KTtcXG52YXIgQ29uZmlnXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3MCk7XFxudmFyIERhdGFfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjcxKTtcXG5leHBvcnRzLkVNQUlMX1JFR0VYID0gL15cXFxcUytAXFxcXFMrXFxcXC5cXFxcUyskLztcXG5leHBvcnRzLkNPTE9SX0NPREVfUkVHRVggPSAvXiMoW0EtRmEtZjAtOV17Nn18W0EtRmEtZjAtOV17M30pJC87XFxuZXhwb3J0cy5TQ09QRV9LRVlXT1JEX1JFR0VYID0gL15bYS16QS1aMC05LV9+QCTCo3zigqzCpcKnJl0rJC87XFxuZXhwb3J0cy5NQVBfUFJPUEVSVFlfS0VZX1JFR0VYID0gL15bYS16QS1aMC05LV9dKyQvO1xcbmV4cG9ydHMuWE1MX1RBR19SRUdFWCA9IC9eW2EtekEtWl86XVthLXpBLVowLTlfOlxcXFwtXFxcXC5dKiQvO1xcbmV4cG9ydHMuSFRUUFNfVVJMX1JFR0VYID0gL2h0dHBzOlxcXFwvXFxcXC8od3d3XFxcXC4pP1stYS16QS1aMC05QDolLl9cXFxcK34jPV17MiwyNTZ9XFxcXC5bYS16XXsyLDZ9XFxcXGIoWy1hLXpBLVowLTlAOiVfXFxcXCsufiM/JlxcXFwvPV0qKS87XFxuZnVuY3Rpb24gZ2V0V29yZGluZ3Mod29yZGluZ3MsIGxvY2FsZSkge1xcbiAgICB2YXIgY29tYmluZWRXb3JkaW5ncyA9IGRlZXBDb3B5KHdvcmRpbmdzXzEuTVVMVElMQU5HVUFHRV9XT1JESU5HUywgd29yZGluZ3MpO1xcbiAgICB2YXIgcmVzID0gT2JqZWN0LmtleXMoY29tYmluZWRXb3JkaW5ncykucmVkdWNlKGZ1bmN0aW9uIChkaWMsIGtleSkge1xcbiAgICAgICAgZGljW2tleV0gPSBjb21iaW5lZFdvcmRpbmdzW2tleV1bbG9jYWxlXTtcXG4gICAgICAgIHJldHVybiBkaWM7XFxuICAgIH0sIHt9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRXb3JkaW5ncyA9IGdldFdvcmRpbmdzO1xcbmZ1bmN0aW9uIGNvbXBpbGVXb3JkaW5ncyh3b3JkaW5ncywgbG9jYWxlKSB7XFxuICAgIGxvY2FsZSA9IGxvY2FsZSB8fCBcXFwiZW4tVVNcXFwiO1xcbiAgICB2YXIgcmVzID0gT2JqZWN0LmtleXMod29yZGluZ3MpLnJlZHVjZShmdW5jdGlvbiAoZGljLCBrZXkpIHtcXG4gICAgICAgIGRpY1trZXldID0gd29yZGluZ3Nba2V5XVtsb2NhbGVdO1xcbiAgICAgICAgcmV0dXJuIGRpYztcXG4gICAgfSwge30pO1xcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmNvbXBpbGVXb3JkaW5ncyA9IGNvbXBpbGVXb3JkaW5ncztcXG5mdW5jdGlvbiBnZXRHcmF2YXRhclVybChlbWFpbCkge1xcbiAgICB2YXIgYmFzZVVybCA9ICdodHRwczovL3NlY3VyZS5ncmF2YXRhci5jb20vYXZhdGFyLyc7XFxuICAgIHZhciBxdWVyeVBhcmFtcyA9ICc/cz0yMDAmZD1tbSc7XFxuICAgIHJldHVybiBiYXNlVXJsICsgbWQ1XzEuZGVmYXVsdChlbWFpbC50cmltKCkudG9Mb3dlckNhc2UoKSkgKyBxdWVyeVBhcmFtcztcXG59XFxuZXhwb3J0cy5nZXRHcmF2YXRhclVybCA9IGdldEdyYXZhdGFyVXJsO1xcbmZ1bmN0aW9uIGlzVmFsaWRQYXNzd29yZChwYXNzd29yZCkge1xcbiAgICB2YXIgbWluTWF4TGVuZ3RoID0gL15bXFxcXHNcXFxcU117OCwzMn0kLywgdXBwZXIgPSAvW0EtWl0vLCBsb3dlciA9IC9bYS16XS8sIG51bWJlciA9IC9bMC05XS8sIGNvdW50ID0gMDtcXG4gICAgaWYgKG1pbk1heExlbmd0aC50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgaWYgKHVwcGVyLnRlc3QocGFzc3dvcmQpKSB7XFxuICAgICAgICAgICAgY291bnQrKztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChsb3dlci50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgICAgIGNvdW50Kys7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobnVtYmVyLnRlc3QocGFzc3dvcmQpKSB7XFxuICAgICAgICAgICAgY291bnQrKztcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gY291bnQgPj0gMjtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkUGFzc3dvcmQgPSBpc1ZhbGlkUGFzc3dvcmQ7XFxuZnVuY3Rpb24gaXNWYWxpZEVtYWlsKGVtYWlsKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkVNQUlMX1JFR0VYLnRlc3QoZW1haWwpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRFbWFpbCA9IGlzVmFsaWRFbWFpbDtcXG5mdW5jdGlvbiBpc1ZhbGlkQ29sb3JDb2RlKGNvbG9yKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkNPTE9SX0NPREVfUkVHRVgudGVzdChjb2xvcik7XFxufVxcbmV4cG9ydHMuaXNWYWxpZENvbG9yQ29kZSA9IGlzVmFsaWRDb2xvckNvZGU7XFxuZnVuY3Rpb24gaXNOb3RFbXB0eSh2YWx1ZSkge1xcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID4gMDtcXG59XFxuZXhwb3J0cy5pc05vdEVtcHR5ID0gaXNOb3RFbXB0eTtcXG5mdW5jdGlvbiBpc1ZhbGlkU2NvcGVLZXl3b3JkKHZhbHVlKSB7XFxuICAgIHJldHVybiBleHBvcnRzLlNDT1BFX0tFWVdPUkRfUkVHRVgudGVzdCh2YWx1ZSk7XFxufVxcbmV4cG9ydHMuaXNWYWxpZFNjb3BlS2V5d29yZCA9IGlzVmFsaWRTY29wZUtleXdvcmQ7XFxuZnVuY3Rpb24gaXNWYWxpZEtleUNoYXIodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuTUFQX1BST1BFUlRZX0tFWV9SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkS2V5Q2hhciA9IGlzVmFsaWRLZXlDaGFyO1xcbmZ1bmN0aW9uIGlzVmFsaWRYTUxUYWcodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuWE1MX1RBR19SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkWE1MVGFnID0gaXNWYWxpZFhNTFRhZztcXG5mdW5jdGlvbiBpc1ZhbGlkSHR0cHNVcmwodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuSFRUUFNfVVJMX1JFR0VYLnRlc3QodmFsdWUpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRIdHRwc1VybCA9IGlzVmFsaWRIdHRwc1VybDtcXG5mdW5jdGlvbiBlc2NhcGVYbWwoeG1sKSB7XFxuICAgIHJldHVybiB4bWwucmVwbGFjZSgvWzw+JidcXFwiXS9nLCBmdW5jdGlvbiAoYykge1xcbiAgICAgICAgc3dpdGNoIChjKSB7XFxuICAgICAgICAgICAgY2FzZSAnPCc6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJmx0JztcXG4gICAgICAgICAgICBjYXNlICc+JzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmZ3QnO1xcbiAgICAgICAgICAgIGNhc2UgJyYnOlxcbiAgICAgICAgICAgICAgICByZXR1cm4gJyZhbXAnO1xcbiAgICAgICAgICAgIGNhc2UgJ1xcXFwnJzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmYXBvcyc7XFxuICAgICAgICAgICAgY2FzZSAnXFxcIic6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJnF1b3QnO1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuZXhwb3J0cy5lc2NhcGVYbWwgPSBlc2NhcGVYbWw7XFxuZnVuY3Rpb24gdXRmOEpTT05fdG9fYjY0VVJJKGpzb24pIHtcXG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChiYXNlNjQuZW5jb2RlKGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoanNvbikpKSkpO1xcbn1cXG5leHBvcnRzLnV0ZjhKU09OX3RvX2I2NFVSSSA9IHV0ZjhKU09OX3RvX2I2NFVSSTtcXG5mdW5jdGlvbiBVUkliNjRfdG9fdXRmOEpTT04oc3RyKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGJhc2U2NC5kZWNvZGUoZGVjb2RlVVJJQ29tcG9uZW50KHN0cikpKSkpO1xcbiAgICB9XFxuICAgIGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgY29uc29sZS5sb2coJ0pTT04gcGFyc2luZyBlcnJvcjogJywgZXJyb3IpO1xcbiAgICAgICAgcmV0dXJuIHt9O1xcbiAgICB9XFxufVxcbmV4cG9ydHMuVVJJYjY0X3RvX3V0ZjhKU09OID0gVVJJYjY0X3RvX3V0ZjhKU09OO1xcbmZ1bmN0aW9uIGFycmF5TWluKGFycikge1xcbiAgICByZXR1cm4gYXJyLnJlZHVjZShmdW5jdGlvbiAocHJldiwgbmV4dCkge1xcbiAgICAgICAgcmV0dXJuIChwcmV2IDwgbmV4dCA/IHByZXYgOiBuZXh0KTtcXG4gICAgfSk7XFxufVxcbmV4cG9ydHMuYXJyYXlNaW4gPSBhcnJheU1pbjtcXG5mdW5jdGlvbiBhcnJheU1heChhcnIpIHtcXG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIG5leHQpIHtcXG4gICAgICAgIHJldHVybiAocHJldiA+IG5leHQgPyBwcmV2IDogbmV4dCk7XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmFycmF5TWF4ID0gYXJyYXlNYXg7XFxuZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xcbiAgICBpZiAoIXNpemUpIHtcXG4gICAgICAgIHJldHVybiAnMCBCJztcXG4gICAgfVxcbiAgICB2YXIgayA9IDEwMDA7XFxuICAgIHZhciBzaXplcyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQiddO1xcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZyhrKSk7XFxuICAgIHZhciB1bml0ID0gaSA8IDUgPyBzaXplc1tpXSA6IHNpemVzWzRdO1xcbiAgICByZXR1cm4gKHNpemUgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgxKSArICcgJyArIHVuaXQ7XFxufVxcbmV4cG9ydHMuZm9ybWF0RmlsZVNpemUgPSBmb3JtYXRGaWxlU2l6ZTtcXG5mdW5jdGlvbiBnZXRRdWVyeVBhcmFtcyhzZWFyY2hTdHJpbmcpIHtcXG4gICAgaWYgKCFzZWFyY2hTdHJpbmcpIHtcXG4gICAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbiAgICB2YXIgcXVlcnlTdHJpbmdQYXJhbXMgPSBzZWFyY2hTdHJpbmcuc3Vic3RyKDEpLnNwbGl0KCcmJyk7XFxuICAgIHZhciBxdWVyeVBhcmFtcyA9IHF1ZXJ5U3RyaW5nUGFyYW1zLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBxdWVyeVN0clBhcmFtKSB7XFxuICAgICAgICB2YXIga2V5VmFsdWUgPSBxdWVyeVN0clBhcmFtLnNwbGl0KCc9Jyk7XFxuICAgICAgICBpZiAoa2V5VmFsdWUubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICAgICAgYWNjW2tleVZhbHVlWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlWYWx1ZVsxXSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICB9LCB7fSk7XFxuICAgIHJldHVybiBxdWVyeVBhcmFtcztcXG59XFxuZXhwb3J0cy5nZXRRdWVyeVBhcmFtcyA9IGdldFF1ZXJ5UGFyYW1zO1xcbmZ1bmN0aW9uIGFkZFF1ZXJ5UGFyYW0odXJpLCBrZXksIHZhbHVlKSB7XFxuICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xcbiAgICBsaW5rLmhyZWYgPSB1cmk7XFxuICAgIGlmIChsaW5rLnNlYXJjaCkge1xcbiAgICAgICAgbGluay5zZWFyY2ggKz0gKCcmJyArIGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgICBsaW5rLnNlYXJjaCA9ICgnPycgKyBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xcbiAgICB9XFxuICAgIHJldHVybiBsaW5rO1xcbn1cXG5leHBvcnRzLmFkZFF1ZXJ5UGFyYW0gPSBhZGRRdWVyeVBhcmFtO1xcbmZ1bmN0aW9uIG9yZGVyQXNjKG9iamVjdCkge1xcbiAgICB2YXIgcmVzdWx0ID0ge307XFxuICAgIE9iamVjdC5rZXlzKG9iamVjdCkuc29ydCgpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcXG4gICAgfSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcbmV4cG9ydHMub3JkZXJBc2MgPSBvcmRlckFzYztcXG5mdW5jdGlvbiBvcmRlckRlc2Mob2JqZWN0KSB7XFxuICAgIHZhciByZXN1bHQgPSB7fTtcXG4gICAgT2JqZWN0LmtleXMob2JqZWN0KS5zb3J0KCkucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcXG4gICAgfSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcbmV4cG9ydHMub3JkZXJEZXNjID0gb3JkZXJEZXNjO1xcbmZ1bmN0aW9uIHNhdmVEYXRhQXNKU09ORmlsZShkYXRhLCBmaWxlTmFtZSwgZXh0ZW5zaW9uKSB7XFxuICAgIHZhciBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgJ1xcXFx0Jyk7XFxuICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2pzb25dLCB7XFxuICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vanNvbidcXG4gICAgfSk7XFxuICAgIHRyaWdnZXJEYXRhRG93bmxvYWQoYmxvYiwgZmlsZU5hbWUgKyBcXFwiX1xcXCIgKyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3Vic3RyKDAsIDE5KSArIChleHRlbnNpb24gfHwgJy5qc29uJykpO1xcbn1cXG5leHBvcnRzLnNhdmVEYXRhQXNKU09ORmlsZSA9IHNhdmVEYXRhQXNKU09ORmlsZTtcXG5mdW5jdGlvbiBkb3dubG9hZERhdGFGaWxlKGJhc2U2NERhdGFTdHJpbmcsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkge1xcbiAgICB2YXIgYjY0U3RyaW5nID0gJ2RhdGE6JyArIGNvbnRlbnRUeXBlICsgJztiYXNlNjQsJyArIGJhc2U2NERhdGFTdHJpbmc7XFxuICAgIHRyaWdnZXJEYXRhRG93bmxvYWQoYjY0U3RyaW5nLCBmaWxlTmFtZSwgdHJ1ZSk7XFxufVxcbmV4cG9ydHMuZG93bmxvYWREYXRhRmlsZSA9IGRvd25sb2FkRGF0YUZpbGU7XFxuZnVuY3Rpb24gdHJpZ2dlckRhdGFEb3dubG9hZChkYXRhLCBmaWxlTmFtZSwgZGF0YVVybCkge1xcbiAgICB2YXIgdXJsID0gZGF0YVVybCA/IGRhdGEgOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGRhdGEpO1xcbiAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcXG4gICAgbGluay5ocmVmID0gdXJsO1xcbiAgICBsaW5rWydkb3dubG9hZCddID0gZmlsZU5hbWU7XFxuICAgIGxpbmsuY2xpY2soKTtcXG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xcbn1cXG5mdW5jdGlvbiBoYXNSZXF1aXJlZFJlc291cmNlKGFwcEVuZHBvaW50cywgYXBwSW5zdGFuY2VOYW1lLCBmZWF0dXJlSWQpIHtcXG4gICAgaWYgKGFwcEVuZHBvaW50cyAmJiBhcHBFbmRwb2ludHNbYXBwSW5zdGFuY2VOYW1lXSkge1xcbiAgICAgICAgaWYgKGFwcEVuZHBvaW50c1thcHBJbnN0YW5jZU5hbWVdW2ZlYXR1cmVJZF0pIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZmFsc2U7XFxufVxcbmV4cG9ydHMuaGFzUmVxdWlyZWRSZXNvdXJjZSA9IGhhc1JlcXVpcmVkUmVzb3VyY2U7XFxuZnVuY3Rpb24gcmVwbGFjZVRlbXBsYXRlVmlld05hbWUodGVtcGxhdGVkSHRtbCwgdmlld05hbWUpIHtcXG4gICAgcmV0dXJuIHRlbXBsYXRlZEh0bWwucmVwbGFjZSgve3tWSUVXTkFNRX19L2csIHZpZXdOYW1lKTtcXG59XFxuZXhwb3J0cy5yZXBsYWNlVGVtcGxhdGVWaWV3TmFtZSA9IHJlcGxhY2VUZW1wbGF0ZVZpZXdOYW1lO1xcbmZ1bmN0aW9uIHJlcGxhY2VUZW1wbGF0ZUZsYWdzKHRlbXBsYXRlZEh0bWwsIGxvY2FsZSkge1xcbiAgICB2YXIgZmxhZ3NSZWdleCA9IC97e0ZMQUdTXFxcXD0oLiopfX0vZztcXG4gICAgdmFyIG1hdGNoUmVzID0gZmxhZ3NSZWdleC5leGVjKHRlbXBsYXRlZEh0bWwpO1xcbiAgICBpZiAobWF0Y2hSZXMgJiYgbWF0Y2hSZXMubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICB2YXIgZmxhZ3MgPSBtYXRjaFJlc1sxXS5zcGxpdCgnLCcpO1xcbiAgICAgICAgdmFyIGZsYWdzSHRtbCA9ICcnO1xcbiAgICAgICAgZm9yICh2YXIgZmxhZ05hbWUgaW4gRGF0YV8xLmZsYWdzRGVmKSB7XFxuICAgICAgICAgICAgdmFyIGZsYWdEZWYgPSBEYXRhXzEuZmxhZ3NEZWZbZmxhZ05hbWVdO1xcbiAgICAgICAgICAgIGlmIChmbGFnTmFtZSAhPT0gJ2V1bnJlYWQnKSB7XFxuICAgICAgICAgICAgICAgIGlmICgoZmxhZ0RlZi5pbnZlcnNlZCAmJiBmbGFncy5pbmRleE9mKGZsYWdOYW1lKSA9PT0gLTEpIHx8ICghZmxhZ0RlZi5pbnZlcnNlZCAmJiBmbGFncy5pbmRleE9mKGZsYWdOYW1lKSAhPT0gLTEpKSB7XFxuICAgICAgICAgICAgICAgICAgICBmbGFnc0h0bWwgKz0gJzxzcGFuIGNsYXNzPVxcXCJmYS1mdyByaWdodC1zcGFjZWQgdGV4dC14bGFyZ2UgJyArIGZsYWdEZWYuaWNvbkNvbG9yICsgJyAnICsgZmxhZ0RlZi5pY29uU2hhcGUgKyAnXFxcIiB0aXRsZT1cXFwiJyArIGZsYWdEZWYuZmxhZ0xhYmVsW2xvY2FsZV0gKyAnXFxcIj48L3NwYW4+JztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sLnJlcGxhY2UoZmxhZ3NSZWdleCwgZmxhZ3NIdG1sKTtcXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sO1xcbiAgICB9XFxufVxcbmV4cG9ydHMucmVwbGFjZVRlbXBsYXRlRmxhZ3MgPSByZXBsYWNlVGVtcGxhdGVGbGFncztcXG5mdW5jdGlvbiBnZXRTdHlsZURlZihzdHlsZUNvbmYpIHtcXG4gICAgdmFyIHN0eWxlcyA9IHN0eWxlQ29uZi5zcGxpdCgnLCcpO1xcbiAgICB2YXIgcmVzID0ge1xcbiAgICAgICAgaWNvbjogbnVsbCxcXG4gICAgICAgIGJ0bjogbnVsbCxcXG4gICAgICAgIGNvbG9yOiBudWxsXFxuICAgIH07XFxuICAgIHN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdHlsZSkge1xcbiAgICAgICAgaWYgKHN0eWxlLmluZGV4T2YoJ2ljb246JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmljb24gPSBzdHlsZS5yZXBsYWNlKCdpY29uOicsICcnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChzdHlsZS5pbmRleE9mKCdidG46JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmJ0biA9IHN0eWxlLnJlcGxhY2UoJ2J0bjonLCAnJyk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoc3R5bGUuaW5kZXhPZignY29sb3I6JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmNvbG9yID0gc3R5bGUucmVwbGFjZSgnY29sb3I6JywgJycpO1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRTdHlsZURlZiA9IGdldFN0eWxlRGVmO1xcbmZ1bmN0aW9uIGdldEFjY2VwdExhbmd1YWdlSGVhZGVyKGxvY2FsZSkge1xcbiAgICB2YXIgbm90U2VsZWN0ZWQgPSBDb25maWdfMS5BVkFJTEFCTEVfTEFOR1VBR0VTLmZpbHRlcihmdW5jdGlvbiAobGFuZ3VhZ2UsIGlkeCkge1xcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlLmxvY2FsZSAhPT0gbG9jYWxlICYmIGlkeCA8IDM7XFxuICAgIH0pLm1hcChmdW5jdGlvbiAobGFuZ3VhZ2UsIGlkeCkge1xcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlLmxvY2FsZS5zdWJzdHIoMCwgMikudG9Mb3dlckNhc2UoKSArICc7cT0nICsgKDAuOCAtIChpZHggLyAxMCkpLnRvU3RyaW5nKCk7XFxuICAgIH0pO1xcbiAgICByZXR1cm4gbG9jYWxlLnN1YnN0cigwLCAyKS50b0xvd2VyQ2FzZSgpICsgJywnICsgbm90U2VsZWN0ZWQuam9pbignLCcpO1xcbn1cXG5leHBvcnRzLmdldEFjY2VwdExhbmd1YWdlSGVhZGVyID0gZ2V0QWNjZXB0TGFuZ3VhZ2VIZWFkZXI7XFxuZnVuY3Rpb24gZ2V0STE4bkxhYmVsKGxvY2FsZSwgbGFiZWxNYXAsIG5vUmVnaW9uLCB1cHBlcikge1xcbiAgICB2YXIgcmVzID0gbnVsbDtcXG4gICAgdmFyIGxhbmd1YWdlID0gbG9jYWxlO1xcbiAgICBpZiAobm9SZWdpb24pIHtcXG4gICAgICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3Vic3RyKDAsIDIpO1xcbiAgICB9XFxuICAgIGlmICh1cHBlcikge1xcbiAgICAgICAgbGFuZ3VhZ2UgPSBsYW5ndWFnZS50b1VwcGVyQ2FzZSgpO1xcbiAgICB9XFxuICAgIGlmIChsYWJlbE1hcCkge1xcbiAgICAgICAgaWYgKGxhYmVsTWFwW2xhbmd1YWdlXSkge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwW2xhbmd1YWdlXTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghcmVzICYmIGxhbmd1YWdlICE9PSAnRU4nKSB7XFxuICAgICAgICAgICAgcmVzID0gbGFiZWxNYXBbJ0VOJ107XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXJlcyAmJiBsYW5ndWFnZSAhPT0gJ2VuJykge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwWydlbiddO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFyZXMgJiYgbGFuZ3VhZ2UgIT09ICdlbi1VUycpIHtcXG4gICAgICAgICAgICByZXMgPSBsYWJlbE1hcFsnZW4tVVMnXTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmdldEkxOG5MYWJlbCA9IGdldEkxOG5MYWJlbDtcXG5mdW5jdGlvbiBnZXRKU1RyZWVEYXRhKG9yZ1RyZWVEYXRhLCBvcGVuZWROb2Rlcykge1xcbiAgICByZXR1cm4gb3JnVHJlZURhdGEgPyB7XFxuICAgICAgICBpZDogb3JnVHJlZURhdGEuaWQsXFxuICAgICAgICB0ZXh0OiBvcmdUcmVlRGF0YS5pZCA9PT0gJzAnID8gJycgOiBvcmdUcmVlRGF0YS5lbGVtZW50TmFtZSxcXG4gICAgICAgIGRhdGE6IHtcXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogb3JnVHJlZURhdGEuZGVzY3JpcHRpb24sXFxuICAgICAgICAgICAgcHJvcGVydGllc01hcDogb3JnVHJlZURhdGEucHJvcGVydGllc01hcCxcXG4gICAgICAgICAgICBwYXJlbnRJZDogb3JnVHJlZURhdGEucGFyZW50SWQsXFxuICAgICAgICAgICAgY2hpbGROYW1lczogb3JnVHJlZURhdGEuY2hpbGRyZW4gPyBvcmdUcmVlRGF0YS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiBjaGlsZC5lbGVtZW50TmFtZTsgfSkgOiBbXVxcbiAgICAgICAgfSxcXG4gICAgICAgIGNoaWxkcmVuOiBvcmdUcmVlRGF0YS5jaGlsZHJlbiA/IG9yZ1RyZWVEYXRhLmNoaWxkcmVuLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcXG4gICAgICAgICAgICByZXR1cm4gZ2V0SlNUcmVlRGF0YShjaGlsZCwgb3BlbmVkTm9kZXMpO1xcbiAgICAgICAgfSkgOiBudWxsLFxcbiAgICAgICAgaWNvbjogY2xhc3NOYW1lcygnZmFzIGZhLWZ3Jywge1xcbiAgICAgICAgICAgICdmYS10aC1sYXJnZSBmb250LWNvbG9yLWxpZ2h0ZXInOiBvcmdUcmVlRGF0YS5pZCAhPT0gJzAnLFxcbiAgICAgICAgICAgICdmYS10ZXJtaW5hbCBibGFjay1jb2xvcic6IG9yZ1RyZWVEYXRhLmlkID09PSAnMCcsXFxuICAgICAgICB9KSxcXG4gICAgICAgIHN0YXRlOiB7XFxuICAgICAgICAgICAgb3BlbmVkOiBvcGVuZWROb2RlcyA/IG9wZW5lZE5vZGVzLmluZGV4T2Yob3JnVHJlZURhdGEuaWQpICE9PSAtMSA6IGZhbHNlLFxcbiAgICAgICAgICAgIGRpc2FibGVkOiBvcmdUcmVlRGF0YS5pZCA9PT0gJy0xJ1xcbiAgICAgICAgfVxcbiAgICB9IDogbnVsbDtcXG59XFxuZXhwb3J0cy5nZXRKU1RyZWVEYXRhID0gZ2V0SlNUcmVlRGF0YTtcXG5mdW5jdGlvbiBsb2FkVG9vbHRpcHMoZWxlbWVudCkge1xcbiAgICBpZiAoIU1vZGVybml6ci50b3VjaGV2ZW50cykge1xcbiAgICAgICAgdmFyICRlbGVtZW50VG9vbHRpcHNfMSA9ICQoZWxlbWVudCkuZmluZCgnW2RhdGEtdG9nZ2xlPVxcXCJ0b29sdGlwXFxcIl0nKTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHNfMS50b29sdGlwKHtcXG4gICAgICAgICAgICBjb250YWluZXI6ICdib2R5JyxcXG4gICAgICAgICAgICBwbGFjZW1lbnQ6ICdhdXRvIHRvcCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgJGVsZW1lbnRUb29sdGlwc18xLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICAkZWxlbWVudFRvb2x0aXBzXzEudG9vbHRpcCgnaGlkZScpO1xcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuZXhwb3J0cy5sb2FkVG9vbHRpcHMgPSBsb2FkVG9vbHRpcHM7XFxuZnVuY3Rpb24gdW5sb2FkVG9vbHRpcHMoZWxlbWVudCkge1xcbiAgICBpZiAoIU1vZGVybml6ci50b3VjaGV2ZW50cykge1xcbiAgICAgICAgdmFyICRlbGVtZW50VG9vbHRpcHMgPSAkKGVsZW1lbnQpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cXFwidG9vbHRpcFxcXCJdJyk7XFxuICAgICAgICAkZWxlbWVudFRvb2x0aXBzLnRvb2x0aXAoJ2hpZGUnKTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHMudG9vbHRpcCgnZGVzdHJveScpO1xcbiAgICAgICAgJCgnZGl2LnRvb2x0aXAnKS5yZW1vdmUoKTtcXG4gICAgfVxcbn1cXG5leHBvcnRzLnVubG9hZFRvb2x0aXBzID0gdW5sb2FkVG9vbHRpcHM7XFxuZnVuY3Rpb24gZ3JvdXBCeVByb3BlcnR5KGxpc3QsIHByb3BlcnR5TmFtZSkge1xcbiAgICByZXR1cm4gbGlzdC5yZWR1Y2UoZnVuY3Rpb24gKGdyb3VwZWQsIGl0ZW0pIHtcXG4gICAgICAgIHZhciBrZXkgPSBpdGVtW3Byb3BlcnR5TmFtZV07XFxuICAgICAgICBncm91cGVkW2tleV0gPSBncm91cGVkW2tleV0gfHwgW107XFxuICAgICAgICBncm91cGVkW2tleV0ucHVzaChpdGVtKTtcXG4gICAgICAgIHJldHVybiBncm91cGVkO1xcbiAgICB9LCB7fSk7XFxufVxcbmV4cG9ydHMuZ3JvdXBCeVByb3BlcnR5ID0gZ3JvdXBCeVByb3BlcnR5O1xcbmZ1bmN0aW9uIGFkZFZhbFRvQXJyYXlOb0R1cChhcnJheSwgdmFsdWUpIHtcXG4gICAgaWYgKGFycmF5LmluZGV4T2YodmFsdWUpID09PSAtMSkge1xcbiAgICAgICAgcmV0dXJuIGFycmF5LmNvbmNhdCh2YWx1ZSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGFycmF5LnNsaWNlKCk7XFxufVxcbmV4cG9ydHMuYWRkVmFsVG9BcnJheU5vRHVwID0gYWRkVmFsVG9BcnJheU5vRHVwO1xcbmZ1bmN0aW9uIHJlbW92ZVZhbEZyb21BcnJheU5vRHVwKGFycmF5LCB2YWx1ZSkge1xcbiAgICByZXR1cm4gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBlbGVtZW50ICE9PSB2YWx1ZTsgfSk7XFxufVxcbmV4cG9ydHMucmVtb3ZlVmFsRnJvbUFycmF5Tm9EdXAgPSByZW1vdmVWYWxGcm9tQXJyYXlOb0R1cDtcXG5mdW5jdGlvbiBnZXROZXN0ZWRWYWx1ZShvYmosIGtleVBhdGgpIHtcXG4gICAgaWYgKCFvYmopIHtcXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICAgIH1cXG4gICAgdmFyIHByb3BzID0ga2V5UGF0aC5zcGxpdCgnLicpO1xcbiAgICBpZiAocHJvcHMubGVuZ3RoID09PSAxKSB7XFxuICAgICAgICByZXR1cm4gb2JqW3Byb3BzWzBdXTtcXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICAgIHJldHVybiBnZXROZXN0ZWRWYWx1ZShvYmpbcHJvcHNbMF1dLCBwcm9wcy5zbGljZSgxKS5qb2luKCcuJykpO1xcbiAgICB9XFxufVxcbmV4cG9ydHMuZ2V0TmVzdGVkVmFsdWUgPSBnZXROZXN0ZWRWYWx1ZTtcXG5mdW5jdGlvbiBmaWx0ZXJDb2xsZWN0aW9uKGNvbGxlY3Rpb24sIHByb3BlcnRpZXMsIHNlYXJjaFN0cmluZykge1xcbiAgICB2YXIgc2VhcmNoRWxlbWVudHMgPSBzZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpO1xcbiAgICB2YXIgZmlsdGVyZWRDb2xsZWN0aW9uID0gc2VhcmNoU3RyaW5nID8gY29sbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcXG4gICAgICAgIHZhciBkYXRhID0gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XFxuICAgICAgICAgICAgaWYgKHByb3BlcnR5LnNwbGl0KCcuJykubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TmVzdGVkVmFsdWUoaXRlbSwgcHJvcGVydHkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bcHJvcGVydHldO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLmpvaW4oKS50b0xvd2VyQ2FzZSgpO1xcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBzZWFyY2hFbGVtZW50cy5tYXAoZnVuY3Rpb24gKHNlYXJjaCkgeyByZXR1cm4gZGF0YS5pbmRleE9mKHNlYXJjaCkgIT09IC0xOyB9KTtcXG4gICAgICAgIHJldHVybiBtYXRjaGVzLmZpbHRlcihmdW5jdGlvbiAobWF0Y2hlZCkgeyByZXR1cm4gIW1hdGNoZWQ7IH0pLmxlbmd0aCA9PT0gMDtcXG4gICAgfSkgOiBjb2xsZWN0aW9uO1xcbiAgICByZXR1cm4gZmlsdGVyZWRDb2xsZWN0aW9uO1xcbn1cXG5leHBvcnRzLmZpbHRlckNvbGxlY3Rpb24gPSBmaWx0ZXJDb2xsZWN0aW9uO1xcbmZ1bmN0aW9uIGJhc2U2NERlY29kZShlbmNvZGVkRGF0YSkge1xcbiAgICByZXR1cm4gYmFzZTY0LmRlY29kZShlbmNvZGVkRGF0YSk7XFxufVxcbmV4cG9ydHMuYmFzZTY0RGVjb2RlID0gYmFzZTY0RGVjb2RlO1xcbmZ1bmN0aW9uIGRlZXBDb3B5KGRhdGEsIGV4dGVuc2lvbnMpIHtcXG4gICAgcmV0dXJuICFleHRlbnNpb25zID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhIHx8IHt9KSkgOiAkLmV4dGVuZCh7fSwgZGF0YSwgZXh0ZW5zaW9ucyk7XFxufVxcbmV4cG9ydHMuZGVlcENvcHkgPSBkZWVwQ29weTtcXG5mdW5jdGlvbiBoYW5kbGVEdXBsaWNhdGVOYW1lRnJvbUFycmF5KG5hbWUsIGNvbnRhaW5lcikge1xcbiAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcXG4gICAgdmFyIHJlcyA9IG5hbWU7XFxuICAgIHZhciBpZHggPSAxO1xcbiAgICB3aGlsZSAoY29udGFpbmVyLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIHJlcyA9PT0gYzsgfSkpIHtcXG4gICAgICAgIGlmIChmaXJzdFRpbWUpIHtcXG4gICAgICAgICAgICByZXMgPSByZXMuY29uY2F0KFxcXCJfXFxcIiArIGlkeCk7XFxuICAgICAgICB9XFxuICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICByZXMgPSByZXMucmVwbGFjZSgvX1tcXFxcZF0rJC8sIFxcXCJfXFxcIiArIGlkeCk7XFxuICAgICAgICB9XFxuICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcXG4gICAgICAgIGlkeCsrO1xcbiAgICB9XFxuICAgIHJldHVybiByZXM7XFxufVxcbmV4cG9ydHMuaGFuZGxlRHVwbGljYXRlTmFtZUZyb21BcnJheSA9IGhhbmRsZUR1cGxpY2F0ZU5hbWVGcm9tQXJyYXk7XFxuZnVuY3Rpb24gZGF0ZUJ5TG9jYWxUb1N0cmluZyhsb2NhbGUsIGRhdGUsIG9wdGlvbnMpIHtcXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgZGVlcENvcHkoe1xcbiAgICAgICAgbW9udGg6ICdudW1lcmljJyxcXG4gICAgICAgIGRheTogJ251bWVyaWMnLFxcbiAgICAgICAgeWVhcjogJ251bWVyaWMnLFxcbiAgICAgICAgaG91cjogJ251bWVyaWMnLFxcbiAgICAgICAgbWludXRlOiAnbnVtZXJpYydcXG4gICAgfSwgb3B0aW9ucykpO1xcbn1cXG5leHBvcnRzLmRhdGVCeUxvY2FsVG9TdHJpbmcgPSBkYXRlQnlMb2NhbFRvU3RyaW5nO1xcbmZ1bmN0aW9uIGdldEl0ZW1zQnlJZHgoY29sbGVjdGlvbiwgaW5kZXhlcykge1xcbiAgICByZXR1cm4gaW5kZXhlcy5tYXAoZnVuY3Rpb24gKGlkeCkgeyByZXR1cm4gY29sbGVjdGlvbltpZHhdOyB9KTtcXG59XFxuZXhwb3J0cy5nZXRJdGVtc0J5SWR4ID0gZ2V0SXRlbXNCeUlkeDtcXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAodGV4dCkge1xcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bLVtcXFxcXXt9KCkqKz8uLFxcXFxcXFxcXiR8I10vZywgJ1xcXFxcXFxcJCYnKTtcXG59XFxuZXhwb3J0cy5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjY0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbihmdW5jdGlvbigpe1xcbiAgdmFyIGNyeXB0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjUpLFxcbiAgICAgIHV0ZjggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg5KS51dGY4LFxcbiAgICAgIGlzQnVmZmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjYpLFxcbiAgICAgIGJpbiA9IF9fd2VicGFja19yZXF1aXJlX18oODkpLmJpbixcXG5cXG4gIC8vIFRoZSBjb3JlXFxuICBtZDUgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xcbiAgICAvLyBDb252ZXJ0IHRvIGJ5dGUgYXJyYXlcXG4gICAgaWYgKG1lc3NhZ2UuY29uc3RydWN0b3IgPT0gU3RyaW5nKVxcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RpbmcgPT09ICdiaW5hcnknKVxcbiAgICAgICAgbWVzc2FnZSA9IGJpbi5zdHJpbmdUb0J5dGVzKG1lc3NhZ2UpO1xcbiAgICAgIGVsc2VcXG4gICAgICAgIG1lc3NhZ2UgPSB1dGY4LnN0cmluZ1RvQnl0ZXMobWVzc2FnZSk7XFxuICAgIGVsc2UgaWYgKGlzQnVmZmVyKG1lc3NhZ2UpKVxcbiAgICAgIG1lc3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtZXNzYWdlLCAwKTtcXG4gICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZSkpXFxuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9TdHJpbmcoKTtcXG4gICAgLy8gZWxzZSwgYXNzdW1lIGJ5dGUgYXJyYXkgYWxyZWFkeVxcblxcbiAgICB2YXIgbSA9IGNyeXB0LmJ5dGVzVG9Xb3JkcyhtZXNzYWdlKSxcXG4gICAgICAgIGwgPSBtZXNzYWdlLmxlbmd0aCAqIDgsXFxuICAgICAgICBhID0gIDE3MzI1ODQxOTMsXFxuICAgICAgICBiID0gLTI3MTczMzg3OSxcXG4gICAgICAgIGMgPSAtMTczMjU4NDE5NCxcXG4gICAgICAgIGQgPSAgMjcxNzMzODc4O1xcblxcbiAgICAvLyBTd2FwIGVuZGlhblxcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcXG4gICAgICBtW2ldID0gKChtW2ldIDw8ICA4KSB8IChtW2ldID4+PiAyNCkpICYgMHgwMEZGMDBGRiB8XFxuICAgICAgICAgICAgICgobVtpXSA8PCAyNCkgfCAobVtpXSA+Pj4gIDgpKSAmIDB4RkYwMEZGMDA7XFxuICAgIH1cXG5cXG4gICAgLy8gUGFkZGluZ1xcbiAgICBtW2wgPj4+IDVdIHw9IDB4ODAgPDwgKGwgJSAzMik7XFxuICAgIG1bKCgobCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBsO1xcblxcbiAgICAvLyBNZXRob2Qgc2hvcnRjdXRzXFxuICAgIHZhciBGRiA9IG1kNS5fZmYsXFxuICAgICAgICBHRyA9IG1kNS5fZ2csXFxuICAgICAgICBISCA9IG1kNS5faGgsXFxuICAgICAgICBJSSA9IG1kNS5faWk7XFxuXFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkgKz0gMTYpIHtcXG5cXG4gICAgICB2YXIgYWEgPSBhLFxcbiAgICAgICAgICBiYiA9IGIsXFxuICAgICAgICAgIGNjID0gYyxcXG4gICAgICAgICAgZGQgPSBkO1xcblxcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDBdLCAgNywgLTY4MDg3NjkzNik7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcXG4gICAgICBjID0gRkYoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTcsICA2MDYxMDU4MTkpO1xcbiAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBtW2krIDNdLCAyMiwgLTEwNDQ1MjUzMzApO1xcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDRdLCAgNywgLTE3NjQxODg5Nyk7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgNV0sIDEyLCAgMTIwMDA4MDQyNik7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsgN10sIDIyLCAtNDU3MDU5ODMpO1xcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDhdLCAgNywgIDE3NzAwMzU0MTYpO1xcbiAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW2krIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xcbiAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBtW2krMTBdLCAxNywgLTQyMDYzKTtcXG4gICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtpKzExXSwgMjIsIC0xOTkwNDA0MTYyKTtcXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKzEyXSwgIDcsICAxODA0NjAzNjgyKTtcXG4gICAgICBkID0gRkYoZCwgYSwgYiwgYywgbVtpKzEzXSwgMTIsIC00MDM0MTEwMSk7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsxNV0sIDIyLCAgMTIzNjUzNTMyOSk7XFxuXFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgMV0sICA1LCAtMTY1Nzk2NTEwKTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyA2XSwgIDksIC0xMDY5NTAxNjMyKTtcXG4gICAgICBjID0gR0coYywgZCwgYSwgYiwgbVtpKzExXSwgMTQsICA2NDM3MTc3MTMpO1xcbiAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBtW2krIDBdLCAyMCwgLTM3Mzg5NzMwMik7XFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgNV0sICA1LCAtNzAxNTU4NjkxKTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKzEwXSwgIDksICAzODAxNjA4Myk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsxNV0sIDE0LCAtNjYwNDc4MzM1KTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyA0XSwgMjAsIC00MDU1Mzc4NDgpO1xcbiAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBtW2krIDldLCAgNSwgIDU2ODQ0NjQzOCk7XFxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsxNF0sICA5LCAtMTAxOTgwMzY5MCk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsgM10sIDE0LCAtMTg3MzYzOTYxKTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyA4XSwgMjAsICAxMTYzNTMxNTAxKTtcXG4gICAgICBhID0gR0coYSwgYiwgYywgZCwgbVtpKzEzXSwgIDUsIC0xNDQ0NjgxNDY3KTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyAyXSwgIDksIC01MTQwMzc4NCk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsgN10sIDE0LCAgMTczNTMyODQ3Myk7XFxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsxMl0sIDIwLCAtMTkyNjYwNzczNCk7XFxuXFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgNV0sICA0LCAtMzc4NTU4KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcXG4gICAgICBjID0gSEgoYywgZCwgYSwgYiwgbVtpKzExXSwgMTYsICAxODM5MDMwNTYyKTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzE0XSwgMjMsIC0zNTMwOTU1Nik7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgMV0sICA0LCAtMTUzMDk5MjA2MCk7XFxuICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1baSsgNF0sIDExLCAgMTI3Mjg5MzM1Myk7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgN10sIDE2LCAtMTU1NDk3NjMyKTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcXG4gICAgICBhID0gSEgoYSwgYiwgYywgZCwgbVtpKzEzXSwgIDQsICA2ODEyNzkxNzQpO1xcbiAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBtW2krIDBdLCAxMSwgLTM1ODUzNzIyMik7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgM10sIDE2LCAtNzIyNTIxOTc5KTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKyA2XSwgMjMsICA3NjAyOTE4OSk7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgOV0sICA0LCAtNjQwMzY0NDg3KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKzEyXSwgMTEsIC00MjE4MTU4MzUpO1xcbiAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBtW2krMTVdLCAxNiwgIDUzMDc0MjUyMCk7XFxuICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1baSsgMl0sIDIzLCAtOTk1MzM4NjUxKTtcXG5cXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyAwXSwgIDYsIC0xOTg2MzA4NDQpO1xcbiAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBtW2krIDddLCAxMCwgIDExMjY4OTE0MTUpO1xcbiAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBtW2krMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDVdLCAyMSwgLTU3NDM0MDU1KTtcXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKzEyXSwgIDYsICAxNzAwNDg1NTcxKTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKzEwXSwgMTUsIC0xMDUxNTIzKTtcXG4gICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtpKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyA4XSwgIDYsICAxODczMzEzMzU5KTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKzE1XSwgMTAsIC0zMDYxMTc0NCk7XFxuICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIG1baSsgNl0sIDE1LCAtMTU2MDE5ODM4MCk7XFxuICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIG1baSsxM10sIDIxLCAgMTMwOTE1MTY0OSk7XFxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsgNF0sICA2LCAtMTQ1NTIzMDcwKTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKzExXSwgMTAsIC0xMTIwMjEwMzc5KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTUsICA3MTg3ODcyNTkpO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDldLCAyMSwgLTM0MzQ4NTU1MSk7XFxuXFxuICAgICAgYSA9IChhICsgYWEpID4+PiAwO1xcbiAgICAgIGIgPSAoYiArIGJiKSA+Pj4gMDtcXG4gICAgICBjID0gKGMgKyBjYykgPj4+IDA7XFxuICAgICAgZCA9IChkICsgZGQpID4+PiAwO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBjcnlwdC5lbmRpYW4oW2EsIGIsIGMsIGRdKTtcXG4gIH07XFxuXFxuICAvLyBBdXhpbGlhcnkgZnVuY3Rpb25zXFxuICBtZDUuX2ZmICA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XFxuICAgIHZhciBuID0gYSArIChiICYgYyB8IH5iICYgZCkgKyAoeCA+Pj4gMCkgKyB0O1xcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xcbiAgfTtcXG4gIG1kNS5fZ2cgID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcXG4gICAgdmFyIG4gPSBhICsgKGIgJiBkIHwgYyAmIH5kKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcbiAgbWQ1Ll9oaCAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYiBeIGMgXiBkKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcbiAgbWQ1Ll9paSAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYyBeIChiIHwgfmQpKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcblxcbiAgLy8gUGFja2FnZSBwcml2YXRlIGJsb2Nrc2l6ZVxcbiAgbWQ1Ll9ibG9ja3NpemUgPSAxNjtcXG4gIG1kNS5fZGlnZXN0c2l6ZSA9IDE2O1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xcbiAgICBpZiAobWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2UgPT09IG51bGwpXFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50ICcgKyBtZXNzYWdlKTtcXG5cXG4gICAgdmFyIGRpZ2VzdGJ5dGVzID0gY3J5cHQud29yZHNUb0J5dGVzKG1kNShtZXNzYWdlLCBvcHRpb25zKSk7XFxuICAgIHJldHVybiBvcHRpb25zICYmIG9wdGlvbnMuYXNCeXRlcyA/IGRpZ2VzdGJ5dGVzIDpcXG4gICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5hc1N0cmluZyA/IGJpbi5ieXRlc1RvU3RyaW5nKGRpZ2VzdGJ5dGVzKSA6XFxuICAgICAgICBjcnlwdC5ieXRlc1RvSGV4KGRpZ2VzdGJ5dGVzKTtcXG4gIH07XFxuXFxufSkoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuKGZ1bmN0aW9uKCkge1xcbiAgdmFyIGJhc2U2NG1hcFxcbiAgICAgID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLFxcblxcbiAgY3J5cHQgPSB7XFxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIGxlZnRcXG4gICAgcm90bDogZnVuY3Rpb24obiwgYikge1xcbiAgICAgIHJldHVybiAobiA8PCBiKSB8IChuID4+PiAoMzIgLSBiKSk7XFxuICAgIH0sXFxuXFxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIHJpZ2h0XFxuICAgIHJvdHI6IGZ1bmN0aW9uKG4sIGIpIHtcXG4gICAgICByZXR1cm4gKG4gPDwgKDMyIC0gYikpIHwgKG4gPj4+IGIpO1xcbiAgICB9LFxcblxcbiAgICAvLyBTd2FwIGJpZy1lbmRpYW4gdG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYVxcbiAgICBlbmRpYW46IGZ1bmN0aW9uKG4pIHtcXG4gICAgICAvLyBJZiBudW1iZXIgZ2l2ZW4sIHN3YXAgZW5kaWFuXFxuICAgICAgaWYgKG4uY29uc3RydWN0b3IgPT0gTnVtYmVyKSB7XFxuICAgICAgICByZXR1cm4gY3J5cHQucm90bChuLCA4KSAmIDB4MDBGRjAwRkYgfCBjcnlwdC5yb3RsKG4sIDI0KSAmIDB4RkYwMEZGMDA7XFxuICAgICAgfVxcblxcbiAgICAgIC8vIEVsc2UsIGFzc3VtZSBhcnJheSBhbmQgc3dhcCBhbGwgaXRlbXNcXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG4ubGVuZ3RoOyBpKyspXFxuICAgICAgICBuW2ldID0gY3J5cHQuZW5kaWFuKG5baV0pO1xcbiAgICAgIHJldHVybiBuO1xcbiAgICB9LFxcblxcbiAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBhbnkgbGVuZ3RoIG9mIHJhbmRvbSBieXRlc1xcbiAgICByYW5kb21CeXRlczogZnVuY3Rpb24obikge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW107IG4gPiAwOyBuLS0pXFxuICAgICAgICBieXRlcy5wdXNoKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NikpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYmlnLWVuZGlhbiAzMi1iaXQgd29yZHNcXG4gICAgYnl0ZXNUb1dvcmRzOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIHdvcmRzID0gW10sIGkgPSAwLCBiID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrLCBiICs9IDgpXFxuICAgICAgICB3b3Jkc1tiID4+PiA1XSB8PSBieXRlc1tpXSA8PCAoMjQgLSBiICUgMzIpO1xcbiAgICAgIHJldHVybiB3b3JkcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBiaWctZW5kaWFuIDMyLWJpdCB3b3JkcyB0byBhIGJ5dGUgYXJyYXlcXG4gICAgd29yZHNUb0J5dGVzOiBmdW5jdGlvbih3b3Jkcykge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW10sIGIgPSAwOyBiIDwgd29yZHMubGVuZ3RoICogMzI7IGIgKz0gOClcXG4gICAgICAgIGJ5dGVzLnB1c2goKHdvcmRzW2IgPj4+IDVdID4+PiAoMjQgLSBiICUgMzIpKSAmIDB4RkYpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBoZXggc3RyaW5nXFxuICAgIGJ5dGVzVG9IZXg6IGZ1bmN0aW9uKGJ5dGVzKSB7XFxuICAgICAgZm9yICh2YXIgaGV4ID0gW10sIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSA+Pj4gNCkudG9TdHJpbmcoMTYpKTtcXG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSAmIDB4RikudG9TdHJpbmcoMTYpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGhleC5qb2luKCcnKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGhleCBzdHJpbmcgdG8gYSBieXRlIGFycmF5XFxuICAgIGhleFRvQnl0ZXM6IGZ1bmN0aW9uKGhleCkge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW10sIGMgPSAwOyBjIDwgaGV4Lmxlbmd0aDsgYyArPSAyKVxcbiAgICAgICAgYnl0ZXMucHVzaChwYXJzZUludChoZXguc3Vic3RyKGMsIDIpLCAxNikpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBiYXNlLTY0IHN0cmluZ1xcbiAgICBieXRlc1RvQmFzZTY0OiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIGJhc2U2NCA9IFtdLCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAzKSB7XFxuICAgICAgICB2YXIgdHJpcGxldCA9IChieXRlc1tpXSA8PCAxNikgfCAoYnl0ZXNbaSArIDFdIDw8IDgpIHwgYnl0ZXNbaSArIDJdO1xcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspXFxuICAgICAgICAgIGlmIChpICogOCArIGogKiA2IDw9IGJ5dGVzLmxlbmd0aCAqIDgpXFxuICAgICAgICAgICAgYmFzZTY0LnB1c2goYmFzZTY0bWFwLmNoYXJBdCgodHJpcGxldCA+Pj4gNiAqICgzIC0gaikpICYgMHgzRikpO1xcbiAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgYmFzZTY0LnB1c2goJz0nKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJhc2U2NC5qb2luKCcnKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJhc2UtNjQgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBiYXNlNjRUb0J5dGVzOiBmdW5jdGlvbihiYXNlNjQpIHtcXG4gICAgICAvLyBSZW1vdmUgbm9uLWJhc2UtNjQgY2hhcmFjdGVyc1xcbiAgICAgIGJhc2U2NCA9IGJhc2U2NC5yZXBsYWNlKC9bXkEtWjAtOStcXFxcL10vaWcsICcnKTtcXG5cXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMCwgaW1vZDQgPSAwOyBpIDwgYmFzZTY0Lmxlbmd0aDtcXG4gICAgICAgICAgaW1vZDQgPSArK2kgJSA0KSB7XFxuICAgICAgICBpZiAoaW1vZDQgPT0gMCkgY29udGludWU7XFxuICAgICAgICBieXRlcy5wdXNoKCgoYmFzZTY0bWFwLmluZGV4T2YoYmFzZTY0LmNoYXJBdChpIC0gMSkpXFxuICAgICAgICAgICAgJiAoTWF0aC5wb3coMiwgLTIgKiBpbW9kNCArIDgpIC0gMSkpIDw8IChpbW9kNCAqIDIpKVxcbiAgICAgICAgICAgIHwgKGJhc2U2NG1hcC5pbmRleE9mKGJhc2U2NC5jaGFyQXQoaSkpID4+PiAoNiAtIGltb2Q0ICogMikpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJ5dGVzO1xcbiAgICB9XFxuICB9O1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBjcnlwdDtcXG59KSgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI2NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vKiFcXG4gKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyXFxuICpcXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxcbiAqIEBsaWNlbnNlICBNSVRcXG4gKi9cXG5cXG4vLyBUaGUgX2lzQnVmZmVyIGNoZWNrIGlzIGZvciBTYWZhcmkgNS03IHN1cHBvcnQsIGJlY2F1c2UgaXQncyBtaXNzaW5nXFxuLy8gT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseVxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIChpc0J1ZmZlcihvYmopIHx8IGlzU2xvd0J1ZmZlcihvYmopIHx8ICEhb2JqLl9pc0J1ZmZlcilcXG59XFxuXFxuZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xcbiAgcmV0dXJuICEhb2JqLmNvbnN0cnVjdG9yICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcXG59XFxuXFxuLy8gRm9yIE5vZGUgdjAuMTAgc3VwcG9ydC4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseS5cXG5mdW5jdGlvbiBpc1Nsb3dCdWZmZXIgKG9iaikge1xcbiAgcmV0dXJuIHR5cGVvZiBvYmoucmVhZEZsb2F0TEUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zbGljZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0J1ZmZlcihvYmouc2xpY2UoMCwgMCkpXFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDI2NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlLCBnbG9iYWwpIHt2YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyohIGh0dHA6Ly9tdGhzLmJlL2Jhc2U2NCB2MC4xLjAgYnkgQG1hdGhpYXMgfCBNSVQgbGljZW5zZSAqL1xcbjsoZnVuY3Rpb24ocm9vdCkge1xcblxcblxcdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlcyBgZXhwb3J0c2AuXFxuXFx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cztcXG5cXG5cXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC5cXG5cXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXFxuXFx0XFx0bW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMgJiYgbW9kdWxlO1xcblxcblxcdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgLCBmcm9tIE5vZGUuanMgb3IgQnJvd3NlcmlmaWVkIGNvZGUsIGFuZCB1c2VcXG5cXHQvLyBpdCBhcyBgcm9vdGAuXFxuXFx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcXG5cXHRpZiAoZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwpIHtcXG5cXHRcXHRyb290ID0gZnJlZUdsb2JhbDtcXG5cXHR9XFxuXFxuXFx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuXFxuXFx0dmFyIEludmFsaWRDaGFyYWN0ZXJFcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcXG5cXHRcXHR0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xcblxcdH07XFxuXFx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcjtcXG5cXHRJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcXG5cXG5cXHR2YXIgZXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XFxuXFx0XFx0Ly8gTm90ZTogdGhlIGVycm9yIG1lc3NhZ2VzIHVzZWQgdGhyb3VnaG91dCB0aGlzIGZpbGUgbWF0Y2ggdGhvc2UgdXNlZCBieVxcblxcdFxcdC8vIHRoZSBuYXRpdmUgYGF0b2JgL2BidG9hYCBpbXBsZW1lbnRhdGlvbiBpbiBDaHJvbWl1bS5cXG5cXHRcXHR0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yKG1lc3NhZ2UpO1xcblxcdH07XFxuXFxuXFx0dmFyIFRBQkxFID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xcblxcdC8vIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvY29tbW9uLW1pY3Jvc3ludGF4ZXMuaHRtbCNzcGFjZS1jaGFyYWN0ZXJcXG5cXHR2YXIgUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyA9IC9bXFxcXHRcXFxcblxcXFxmXFxcXHIgXS9nO1xcblxcblxcdC8vIGBkZWNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYXRvYmAgYXMgZGVzY3JpYmVkIGluIHRoZVxcblxcdC8vIEhUTUwgU3RhbmRhcmQuIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYXRvYlxcblxcdC8vIFRoZSBvcHRpbWl6ZWQgYmFzZTY0LWRlY29kaW5nIGFsZ29yaXRobSB1c2VkIGlzIGJhc2VkIG9uIEBhdGvigJlzIGV4Y2VsbGVudFxcblxcdC8vIGltcGxlbWVudGF0aW9uLiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9hdGsvMTAyMDM5NlxcblxcdHZhciBkZWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xcblxcdFxcdGlucHV0ID0gU3RyaW5nKGlucHV0KVxcblxcdFxcdFxcdC5yZXBsYWNlKFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMsICcnKTtcXG5cXHRcXHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xcblxcdFxcdGlmIChsZW5ndGggJSA0ID09IDApIHtcXG5cXHRcXHRcXHRpbnB1dCA9IGlucHV0LnJlcGxhY2UoLz09PyQvLCAnJyk7XFxuXFx0XFx0XFx0bGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xcblxcdFxcdH1cXG5cXHRcXHRpZiAoXFxuXFx0XFx0XFx0bGVuZ3RoICUgNCA9PSAxIHx8XFxuXFx0XFx0XFx0Ly8gaHR0cDovL3doYXR3Zy5vcmcvQyNhbHBoYW51bWVyaWMtYXNjaWktY2hhcmFjdGVyc1xcblxcdFxcdFxcdC9bXithLXpBLVowLTkvXS8udGVzdChpbnB1dClcXG5cXHRcXHQpIHtcXG5cXHRcXHRcXHRlcnJvcihcXG5cXHRcXHRcXHRcXHQnSW52YWxpZCBjaGFyYWN0ZXI6IHRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuJ1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBiaXRDb3VudGVyID0gMDtcXG5cXHRcXHR2YXIgYml0U3RvcmFnZTtcXG5cXHRcXHR2YXIgYnVmZmVyO1xcblxcdFxcdHZhciBvdXRwdXQgPSAnJztcXG5cXHRcXHR2YXIgcG9zaXRpb24gPSAtMTtcXG5cXHRcXHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xcblxcdFxcdFxcdGJ1ZmZlciA9IFRBQkxFLmluZGV4T2YoaW5wdXQuY2hhckF0KHBvc2l0aW9uKSk7XFxuXFx0XFx0XFx0Yml0U3RvcmFnZSA9IGJpdENvdW50ZXIgJSA0ID8gYml0U3RvcmFnZSAqIDY0ICsgYnVmZmVyIDogYnVmZmVyO1xcblxcdFxcdFxcdC8vIFVubGVzcyB0aGlzIGlzIHRoZSBmaXJzdCBvZiBhIGdyb3VwIG9mIDQgY2hhcmFjdGVyc+KAplxcblxcdFxcdFxcdGlmIChiaXRDb3VudGVyKysgJSA0KSB7XFxuXFx0XFx0XFx0XFx0Ly8g4oCmY29udmVydCB0aGUgZmlyc3QgOCBiaXRzIHRvIGEgc2luZ2xlIEFTQ0lJIGNoYXJhY3Rlci5cXG5cXHRcXHRcXHRcXHRvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShcXG5cXHRcXHRcXHRcXHRcXHQweEZGICYgYml0U3RvcmFnZSA+PiAoLTIgKiBiaXRDb3VudGVyICYgNilcXG5cXHRcXHRcXHRcXHQpO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0XFx0cmV0dXJuIG91dHB1dDtcXG5cXHR9O1xcblxcblxcdC8vIGBlbmNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYnRvYWAgYXMgZGVzY3JpYmVkIGluIHRoZVxcblxcdC8vIEhUTUwgU3RhbmRhcmQ6IGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYnRvYVxcblxcdHZhciBlbmNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xcblxcdFxcdGlucHV0ID0gU3RyaW5nKGlucHV0KTtcXG5cXHRcXHRpZiAoL1teXFxcXDAtXFxcXHhGRl0vLnRlc3QoaW5wdXQpKSB7XFxuXFx0XFx0XFx0Ly8gTm90ZTogbm8gbmVlZCB0byBzcGVjaWFsLWNhc2UgYXN0cmFsIHN5bWJvbHMgaGVyZSwgYXMgc3Vycm9nYXRlcyBhcmVcXG5cXHRcXHRcXHQvLyBtYXRjaGVkLCBhbmQgdGhlIGlucHV0IGlzIHN1cHBvc2VkIHRvIG9ubHkgY29udGFpbiBBU0NJSSBhbnl3YXkuXFxuXFx0XFx0XFx0ZXJyb3IoXFxuXFx0XFx0XFx0XFx0J1RoZSBzdHJpbmcgdG8gYmUgZW5jb2RlZCBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgb2YgdGhlICcgK1xcblxcdFxcdFxcdFxcdCdMYXRpbjEgcmFuZ2UuJ1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBwYWRkaW5nID0gaW5wdXQubGVuZ3RoICUgMztcXG5cXHRcXHR2YXIgb3V0cHV0ID0gJyc7XFxuXFx0XFx0dmFyIHBvc2l0aW9uID0gLTE7XFxuXFx0XFx0dmFyIGE7XFxuXFx0XFx0dmFyIGI7XFxuXFx0XFx0dmFyIGM7XFxuXFx0XFx0dmFyIGQ7XFxuXFx0XFx0dmFyIGJ1ZmZlcjtcXG5cXHRcXHQvLyBNYWtlIHN1cmUgYW55IHBhZGRpbmcgaXMgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBsb29wLlxcblxcdFxcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGggLSBwYWRkaW5nO1xcblxcblxcdFxcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XFxuXFx0XFx0XFx0Ly8gUmVhZCB0aHJlZSBieXRlcywgaS5lLiAyNCBiaXRzLlxcblxcdFxcdFxcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCAxNjtcXG5cXHRcXHRcXHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKSA8PCA4O1xcblxcdFxcdFxcdGMgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xcblxcdFxcdFxcdGJ1ZmZlciA9IGEgKyBiICsgYztcXG5cXHRcXHRcXHQvLyBUdXJuIHRoZSAyNCBiaXRzIGludG8gZm91ciBjaHVua3Mgb2YgNiBiaXRzIGVhY2gsIGFuZCBhcHBlbmQgdGhlXFxuXFx0XFx0XFx0Ly8gbWF0Y2hpbmcgY2hhcmFjdGVyIGZvciBlYWNoIG9mIHRoZW0gdG8gdGhlIG91dHB1dC5cXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTggJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMiAmIDB4M0YpICtcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDYgJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciAmIDB4M0YpXFxuXFx0XFx0XFx0KTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKHBhZGRpbmcgPT0gMikge1xcblxcdFxcdFxcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCA4O1xcblxcdFxcdFxcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xcblxcdFxcdFxcdGJ1ZmZlciA9IGEgKyBiO1xcblxcdFxcdFxcdG91dHB1dCArPSAoXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMCkgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyID4+IDQpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDIpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdCc9J1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fSBlbHNlIGlmIChwYWRkaW5nID09IDEpIHtcXG5cXHRcXHRcXHRidWZmZXIgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDQpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdCc9PSdcXG5cXHRcXHRcXHQpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRyZXR1cm4gb3V0cHV0O1xcblxcdH07XFxuXFxuXFx0dmFyIGJhc2U2NCA9IHtcXG5cXHRcXHQnZW5jb2RlJzogZW5jb2RlLFxcblxcdFxcdCdkZWNvZGUnOiBkZWNvZGUsXFxuXFx0XFx0J3ZlcnNpb24nOiAnMC4xLjAnXFxuXFx0fTtcXG5cXG5cXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcXG5cXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XFxuXFx0aWYgKFxcblxcdFxcdHRydWVcXG5cXHQpIHtcXG5cXHRcXHQhKF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gKGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdHJldHVybiBiYXNlNjQ7XFxuXFx0XFx0fSkuY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fLCBleHBvcnRzLCBtb2R1bGUpLFxcblxcdFxcdFxcdFxcdF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fICE9PSB1bmRlZmluZWQgJiYgKG1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18pKTtcXG5cXHR9XFx0ZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgIWZyZWVFeHBvcnRzLm5vZGVUeXBlKSB7XFxuXFx0XFx0aWYgKGZyZWVNb2R1bGUpIHsgLy8gaW4gTm9kZS5qcyBvciBSaW5nb0pTIHYwLjguMCtcXG5cXHRcXHRcXHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBiYXNlNjQ7XFxuXFx0XFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cXG5cXHRcXHRcXHRmb3IgKHZhciBrZXkgaW4gYmFzZTY0KSB7XFxuXFx0XFx0XFx0XFx0YmFzZTY0Lmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBiYXNlNjRba2V5XSk7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9IGVsc2UgeyAvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXFxuXFx0XFx0cm9vdC5iYXNlNjQgPSBiYXNlNjQ7XFxuXFx0fVxcblxcbn0odGhpcykpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2OCkobW9kdWxlKSwgX193ZWJwYWNrX3JlcXVpcmVfXygyOCkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDI2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xcblxcdGlmKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XFxuXFx0XFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XFxuXFx0XFx0bW9kdWxlLnBhdGhzID0gW107XFxuXFx0XFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XFxuXFx0XFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImxvYWRlZFxcXCIsIHtcXG5cXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcblxcdFxcdFxcdGdldDogZnVuY3Rpb24oKSB7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIG1vZHVsZS5sO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9KTtcXG5cXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcXFwiaWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUuaTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XFxuXFx0fVxcblxcdHJldHVybiBtb2R1bGU7XFxufTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5NVUxUSUxBTkdVQUdFX1dPUkRJTkdTID0ge1xcbiAgICBzYXZlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2F2ZScsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZXInXFxuICAgIH0sXFxuICAgIHNhdmVDaGFuZ2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2F2ZSBjaGFuZ2VzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnJlZ2lzdHJlciBtb2RpZmljYXRpb25zJ1xcbiAgICB9LFxcbiAgICBjYW5jZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYW5jZWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXInXFxuICAgIH0sXFxuICAgIGVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsJ1xcbiAgICB9LFxcbiAgICBzdWJtaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdWJtaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGlkZXInXFxuICAgIH0sXFxuICAgIGNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maXJtJyxcXG4gICAgICAgICdmci1GUic6ICdDb25maXJtZXInXFxuICAgIH0sXFxuICAgIGRlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RlbGV0ZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyJ1xcbiAgICB9LFxcbiAgICBlbmFibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW5hYmxlZCcsXFxuICAgICAgICAnZnItRlInOiAnQWN0aWYnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGVybWlzc2lvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Blcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBkZXNjcmlwdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rlc2NyaXB0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXNjcmlwdGlvbidcXG4gICAgfSxcXG4gICAgbmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSdcXG4gICAgfSxcXG4gICAgbm9EYXRhRm91bmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBkYXRhIGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUgZG9ubsOpZSdcXG4gICAgfSxcXG4gICAgZmlyc3RuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmlyc3QgbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqW5vbSdcXG4gICAgfSxcXG4gICAgbG9hZGluZ0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9hZGluZyBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyIGRlIGNoYXJnZW1lbnQnXFxuICAgIH0sXFxuICAgIGRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscydcXG4gICAgfSxcXG4gICAgbGFzdG5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IG5hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSdcXG4gICAgfSxcXG4gICAgZXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyJ1xcbiAgICB9LFxcbiAgICByZWdpc3Rlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZ2lzdGVyJyxcXG4gICAgICAgICdmci1GUic6ICdTXFxcXCdlbnJlZ2lzdHJlcidcXG4gICAgfSxcXG4gICAgaW5zdGFuY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnN0YW5jZScsXFxuICAgICAgICAnZnItRlInOiAnSW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICB0aXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RpdGxlJyxcXG4gICAgICAgICdmci1GUic6ICdUaXRyZSdcXG4gICAgfSxcXG4gICAgdXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyJ1xcbiAgICB9LFxcbiAgICBtcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01yLicsXFxuICAgICAgICAnZnItRlInOiAnTS4nXFxuICAgIH0sXFxuICAgIG1yczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01ycy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01tZSdcXG4gICAgfSxcXG4gICAgbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNcy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lbGxlJ1xcbiAgICB9LFxcbiAgICBwcm9mOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvZi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ByJ1xcbiAgICB9LFxcbiAgICBkcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RyLicsXFxuICAgICAgICAnZnItRlInOiAnRHInXFxuICAgIH0sXFxuICAgIHNhbHV0YXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTYWx1dGF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTYWx1dGF0aW9uJ1xcbiAgICB9LFxcbiAgICBjb21wYW55OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29tcGFueScsXFxuICAgICAgICAnZnItRlInOiAnU29jacOpdMOpJ1xcbiAgICB9LFxcbiAgICBjb21wYW55TmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbXBhbnkgbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnTm9tIGRlIGxhIHNvY2nDqXTDqSdcXG4gICAgfSxcXG4gICAgYWRkcmVzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZHJlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FkcmVzc2UnXFxuICAgIH0sXFxuICAgIGNpdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdWaWxsZSdcXG4gICAgfSxcXG4gICAgc3RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnw4l0YXQnXFxuICAgIH0sXFxuICAgIGNvdW50cnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb3VudHJ5JyxcXG4gICAgICAgICdmci1GUic6ICdQYXlzJ1xcbiAgICB9LFxcbiAgICB6aXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdaaXAnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvZGUgcG9zdGFsJ1xcbiAgICB9LFxcbiAgICBwaG9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bob25lJyxcXG4gICAgICAgICdmci1GUic6ICdUw6lsw6lwaG9uZSdcXG4gICAgfSxcXG4gICAgbW9iaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9iaWxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2JpbGUnXFxuICAgIH0sXFxuICAgIHdlYnNpdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXZWJzaXRlJyxcXG4gICAgICAgICdmci1GUic6ICdTaXRlIHdlYidcXG4gICAgfSxcXG4gICAgc3RhcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnRMOpbWFycmVyJ1xcbiAgICB9LFxcbiAgICBzdG9wOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RvcCcsXFxuICAgICAgICAnZnItRlInOiAnQXJyw6p0ZXInXFxuICAgIH0sXFxuICAgIHJlc2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1LDqWluaXRpYWxpc2VyJ1xcbiAgICB9LFxcbiAgICBlZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlcidcXG4gICAgfSxcXG4gICAgY3JlYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXInXFxuICAgIH0sXFxuICAgIGFjdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBY3Rpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdBY3Rpb25zJ1xcbiAgICB9LFxcbiAgICBpbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5mbycsXFxuICAgICAgICAnZnItRlInOiAnSW5mbydcXG4gICAgfSxcXG4gICAgc2VhcmNoUGxhY2Vob2xkZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWFyY2guLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hlcmNoZXIuLi4nXFxuICAgIH0sXFxuICAgIGtleToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0tleScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqSdcXG4gICAgfSxcXG4gICAgdmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWYWx1ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyJ1xcbiAgICB9LFxcbiAgICBmaWVsZFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVxdWlyZWQgZmllbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wIG9ibGlnYXRvaXJlJ1xcbiAgICB9LFxcbiAgICBzaG93RGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgZGV0YWlscycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIGNsb3NlRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlIGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Zlcm1lciBsZXMgZMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIHNlYXJjaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCcsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlcidcXG4gICAgfSxcXG4gICAgYWRtaW5pc3RyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZG1pbmlzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQWRtaW5pc3RyYXRpb24nXFxuICAgIH0sXFxuICAgIGl0ZW1DcmVhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBjcmVhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnQgY3LDqcOpJ1xcbiAgICB9LFxcbiAgICBpdGVtVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gdXBkYXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG1vZGlmacOpJ1xcbiAgICB9LFxcbiAgICBpdGVtUmVuYW1lZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVuYW1lZCcsXFxuICAgICAgICAnZnItRlInOiAnTm9tIGRlIGxcXFxcJ8OpbMOpbWVudCBtb2RpZmnDqSdcXG4gICAgfSxcXG4gICAgaXRlbURlbGV0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBzdXBwcmltw6knXFxuICAgIH0sXFxuICAgIGNvbmZpcm1EZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGl0ZW1zSW1wb3J0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtcyBpbXBvcnRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50cyBpbXBvcnTDqXMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1JdGVtc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlc2UgaXRlbXM/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgY2VzIMOpbMOpbWVudHMgPydcXG4gICAgfSxcXG4gICAgaXRlbXNEZWxldGVJbXBvc3NpYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGNhblxcXFwndCBkZWxldGUgdGhlc2UgaXRlbXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9zc2libGUgZGUgc3VwcHJpbWVyIGNlcyDDqWzDqW1lbnRzJ1xcbiAgICB9LFxcbiAgICB3YXJuaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2FybmluZycsXFxuICAgICAgICAnZnItRlInOiAnQXR0ZW50aW9uJ1xcbiAgICB9LFxcbiAgICBleHBvcnRKU09OOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IGFzIEpTT04nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4cG9ydGVyIChKU09OKSdcXG4gICAgfSxcXG4gICAgcHJvZmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Byb2ZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb2ZpbCdcXG4gICAgfSxcXG4gICAgdGFyZ2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGFyZ2V0JyxcXG4gICAgICAgICdmci1GUic6ICdDaWJsZSdcXG4gICAgfSxcXG4gICAgYnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdieScsXFxuICAgICAgICAnZnItRlInOiAncGFyJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkRW1haWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGVtYWlsJyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZE51bWJlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ011c3QgYmUgYSBudW1iZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RvaXQgw6p0cmUgdW4gbm9tYnJlJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBodHRwcyB1cmwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VybCBodHRwcyBpbnZhbGlkJ1xcbiAgICB9LFxcbiAgICBzdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2VzcycsXFxuICAgICAgICAnZnItRlInOiAnU3VjY8OocydcXG4gICAgfSxcXG4gICAgdGFiTGlzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xpc3QgKHt0b3RhbH0pJyxcXG4gICAgICAgICdmci1GUic6ICdMaXN0ZSAoe3RvdGFsfSknXFxuICAgIH0sXFxuICAgIHRhYkVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IC0ge25hbWV9JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICB0YWJBZGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgLSBOZXcgaXRlbScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciAtIE5vdXZlbCDDqWzDqW1lbnQnXFxuICAgIH0sXFxuICAgIHRhYlJ1bjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1biAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnRXjDqWN1dGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICB0YWJWaWV3OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgLSB7bmFtZX0nXFxuICAgIH0sXFxuICAgIHNlbGVjdEFsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdG91dCdcXG4gICAgfSxcXG4gICAgdW5zZWxlY3RBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVbnNlbGVjdCBhbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXPDqWxlY3Rpb25uZXIgdG91dCdcXG4gICAgfSxcXG4gICAgYWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyJ1xcbiAgICB9LFxcbiAgICBpbXBvcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbXBvcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyJ1xcbiAgICB9LFxcbiAgICBleHBvcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBvcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4cG9ydGVyJ1xcbiAgICB9LFxcbiAgICBleHBvcnRBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBvcnQgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciB0b3V0J1xcbiAgICB9LFxcbiAgICBkZWxldGVBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgdG91dCdcXG4gICAgfSxcXG4gICAgc2F2ZUFsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTYXV2ZWdhcmRlciB0b3V0J1xcbiAgICB9LFxcbiAgICBydW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdSdW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4w6ljdXRlcidcXG4gICAgfSxcXG4gICAgcmVuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVuYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdSZW5vbW1lcidcXG4gICAgfSxcXG4gICAgZHVwbGljYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHVwbGljYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEdXBsaXF1ZXInXFxuICAgIH0sXFxuICAgIHR5cGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1R5cGVzJ1xcbiAgICB9LFxcbiAgICBmdWxsc2NyZWVuOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnVsbC1zY3JlZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BsZWluIMOpY3JhbidcXG4gICAgfSxcXG4gICAgcmVkdWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVkdWNlJyxcXG4gICAgICAgICdmci1GUic6ICdSw6lkdWlyZSdcXG4gICAgfSxcXG4gICAgYXBwS2V5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwbGljYXRpb24ga2V5JyxcXG4gICAgICAgICdmci1GUic6ICdDbMOpIGRcXFxcJ2FwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBhcHBJbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwbGljYXRpb24gaW5mbycsXFxuICAgICAgICAnZnItRlInOiAnSW5mb3JtYXRpb24gc3VyIGxcXFxcJ2FwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0TW9kaWZpY2F0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFzdCBtb2RpZmljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlcm5pw6hyZSBtb2RpZmljYXRpb24nXFxuICAgIH0sXFxuICAgIGxhc3RNb2RpZmljYXRpb25CeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3QgbW9kaWZpY2F0aW9uIG1hZGUgYnkge25hbWV9IG9uIHtkYXRlfScsXFxuICAgICAgICAnZnItRlInOiAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBmYWl0ZSBwYXIge25hbWV9IGxlIHtkYXRlfSdcXG4gICAgfSxcXG4gICAga2V5RXhpc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXkgYWxyZWFkeSBleGlzdC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIGNsw6kgZXhpc3RlIGTDqWrDoC4nXFxuICAgIH0sXFxuICAgIHNpemU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaXplJyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUnXFxuICAgIH0sXFxuICAgIHRhYkNsb3NlVW5zYXZlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIHRoaXMgdGFiIGFuZCBsb3NlIHlvdXIgdXBkYXRlcz8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgYXZleiBlZmZlY3R1w6kgZGVzIG1vZGlmaWNhdGlvbnMgc2FucyBsZXMgZW5yZWdpc3RyZXIuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGZlcm1lciBjZXQgb25nbGV0IGV0IHBlcmRyZSBsZXMgZG9ubsOpZXMgbm9uIHNhdXZlZ2FyZMOpZXMgPydcXG4gICAgfSxcXG4gICAgbmFtZUFscmVhZHlUYWtlbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05hbWUgYWxyZWFkeSB0YWtlbi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSBkw6lqw6AgdXRpbGlzw6kuJ1xcbiAgICB9LFxcbiAgICBuYW1lTm9Eb3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBjYW5ub3QgY29udGFpbiBhIFxcXFwnLlxcXFwnJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gbmUgcGV1dCBwYXMgY29udGVuaXIgZGUgXFxcXCcuXFxcXCcnXFxuICAgIH0sXFxuICAgIHJlc291cmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzb3VyY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Jlc3NvdXJjZSdcXG4gICAgfSxcXG4gICAgdGFyZ2V0Um9vdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhcmdldCByb290JyxcXG4gICAgICAgICdmci1GUic6ICdSYWNpbmUgZGUgbGEgY2libGUnXFxuICAgIH0sXFxuICAgIHRhcmdldFBhdGg6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYXJnZXQgcGF0aCcsXFxuICAgICAgICAnZnItRlInOiAnQ2hlbWluIHZlcnMgbGEgY2libGUnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9wZXJ0aWVzJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXNFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhbnkgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgblxcXFwnYXZleiBhdWN1bmUgcHJvcHJpw6l0w6knXFxuICAgIH0sXFxuICAgIGtleVVuaXF1ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBrZXkgbXVzdCBiZSB1bmlxdWUuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSBjbMOpIGRvaXQgw6p0cmUgdW5pcXVlLidcXG4gICAgfSxcXG4gICAgcHJvcGVydHlBZGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIHByb3ByacOpdMOpJ1xcbiAgICB9LFxcbiAgICBtdWx0aWxhbmd1YWdlRmllbGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGlzIGEgbXVsdGlsaW5ndWFsIGZpZWxkLiBFbmdsaXNoIGlzIHJlcXVpcmVkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2VjaSBlc3QgdW4gY2hhbXAgbXVsdGlsaW5ndWUuIExcXFxcJ2FuZ2xhaXMgZXN0IG9ibGlnYXRvaXJlLidcXG4gICAgfSxcXG4gICAgZW5nbGlzaERlc2NyaXB0aW9uUmVxdWlyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbmdsaXNoIGRlc2NyaXB0aW9uIGlzIHJlcXVpcmVkLicsXFxuICAgICAgICAnZnItRlInOiAnTGEgZGVzY3JpcHRpb24gYW5nbGFpc2UgZXN0IG9ibGlnYXRvaXJlLidcXG4gICAgfSxcXG4gICAgbWF4U2l6ZTFHQjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01heGltdW0gc2l6ZSBhbGxvd2VkIGlzIDFHQi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIHRhaWxsZSBtYXhpbWFsZSBhdXRob3Jpc8OpZSBlc3QgZGUgMUdPLidcXG4gICAgfSxcXG4gICAgaW52YWxpZFNpemVNYXgxR0I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHRvbyBiaWcsIG1heGltdW0gc2l6ZSBhbGxvd2VkIGlzIDFHQi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgdHJvcCBsb3VyZCwgbGEgdGFpbGxlIG1heGltYWxlIGF1dGhvcmlzw6llIGVzdCBkZSAxR08uJ1xcbiAgICB9LFxcbiAgICBuYW1lQWxyZWFkeUV4aXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLicsXFxuICAgICAgICAnZnItRlInOiAnQ2Ugbm9tIGV4aXN0ZSBkw6lqw6AuJ1xcbiAgICB9LFxcbiAgICByZXNvdXJjZU5vdEZvdW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gcmVzb3VyY2UgaGFzIGJlZW4gZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSByZXNzb3VyY2UgblxcXFwnYSDDqXTDqSB0cm91dsOpZSdcXG4gICAgfSxcXG4gICAgcmVzb3VyY2VzQXR0YWNoZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNvdXJjZSBhdHRhY2hlZCcsXFxuICAgICAgICAnZnItRlInOiAnUmVzc291cmNlIGF0dGFjaMOpZSdcXG4gICAgfSxcXG4gICAgY29uZmlybVVwZGF0ZUZvckNvbnNpc3RhbmN5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXQgc2VlbXMgbGlrZSB5b3VyIGl0ZW1zIGFyZSBub3Qgc3luY2hyb25pemVkIHdpdGggdGhlIHNlcnZlciBhbnltb3JlLCB5b3Ugc2hvdWxkIHNhdmUgeW91ciB3b3JrIGFuZCB1cGRhdGUgdGhlIHNlcnZpY2UuJyxcXG4gICAgICAgICdmci1GUic6ICdJbCBzZW1ibGUgcXVlIHZvcyDDqWzDqW1lbnRzIG5lIHNvbnQgcGx1cyBzeW5jaHJvbmlzw6lzIGF2ZWMgbGUgc2VydmV1ciwgdm91cyBkZXZyaWV6IHNhdXZlZ2FyZGVyIHZvdHJlIHRyYXZhaWwgZXQgbWV0dHJlIMOgIGpvdXIgbGUgc2VydmljZS4nXFxuICAgIH0sXFxuICAgIGl0ZW1Ob3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gbm90IGZvdW5kLicsXFxuICAgICAgICAnZnItVVMnOiAnQXVjdW4gw6lsw6ltZW50IHRyb3V2w6kuJ1xcbiAgICB9LFxcbiAgICBzdGF0dXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0dXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N0YXR1dCdcXG4gICAgfSxcXG4gICAgbm9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vbmUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuJ1xcbiAgICB9LFxcbiAgICBpdGVtc1JlYWRvbmx5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlc2XigIJpdGVtcyBhcmUgb25seSByZWFkYWJsZS4gVGhleSBjYW4gbm90IGJlIGRlbGV0ZWQuJyxcXG4gICAgICAgICdmci1GUic6ICdDZXMgw6lsw6ltZW50cyBuZSBzb250IHBhcyBtb2RpZmlhYmxlcy4gSWxzIG5lIHBldXZlbnQgcGFzIMOqdHJlIHN1cHByaW3DqXMuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VucmVnaXN0cmVtZW50J1xcbiAgICB9LFxcbiAgICBiYWNrVG9Mb2dpbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2sgdG8gc2lnbiBpbiBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkZSBjb25uZXhpb24nXFxuICAgIH0sXFxuICAgIHJlZ2lzdHJhdGlvblN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdWNjZXNzZnVsIHJlZ2lzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZW1lbnQgcsOpdXNzaSdcXG4gICAgfSxcXG4gICAgc3VjY2Vzc1JlZ2lzdGVyTWFpbFNlbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3Ugd2lsbCByZWNlaXZlIGEgY29uZmlybWF0aW9uIGVtYWlsLicsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBhbGxleiByZWNldm9pciB1biBlbWFpbCBkZSBjb25maXJtYXRpb24uJ1xcbiAgICB9LFxcbiAgICBzdWNjZXNzUmVnaXN0cmF0aW9uTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lmIHlvdSBhbHJlYWR5IHNldCB5b3VyIHBhc3N3b3JkLCB5b3UgY2FuIG5vdyBzaWduIGluLiBPdGhlcndpc2UsIHBsZWFzZSBjbGljayBvbiB0aGUgbGluayBzZW50IHRvIHlvdSBieSBlbWFpbCB0byBhY3RpdmF0ZSB5b3VyIGFjY291bnQuJyxcXG4gICAgICAgICdmci1GUic6ICdTaSB2b3VzIGF2ZXogZMOpasOgIGNyw6nDqSB2b3RyZSBtb3QgZGUgcGFzc2UsIHZvdXMgcG91dmV6IHZvdXMgY29ubmVjdGVyIGTDqHMgbWFpbnRlbmFudC4gU2lub24sIHZvdXMgdHJvdXZlcmV6IHVuIGxpZW4gZGFucyBsXFxcXCdlbWFpbCBkZSBjb25maXJtYXRpb24gcXVpIHZvdXMgcGVtZXR0cmEgZFxcXFwnYWN0aXZlciB2b3RyZSBjb21wdGUuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb25FbWFpbEhlbHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYWtlIHN1cmUgdGhlIGVtYWlsIGlzIGNvcnJlY3QgdG8gcmVjZWl2ZSB0aGUgY29uZmlybWF0aW9uIGxpbmsnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHZvdXMgYXNzdXJlciBxdWUgdm90cmUgZW1haWwgZXN0IGNvcnJlY3QgcG91ciBwb3V2b2lyIGZpbmFsaXNlciBsXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgcGxlYXNlV2FpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSB3YWl0JyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBwYXRpZW50ZXInXFxuICAgIH0sXFxuICAgIGltcG9ydExvYWRpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3VyIGltcG9ydCBmaWxlIGlzIGJlaW5nIHByb2Nlc3NlZC4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgaW1wb3J0IGVzdCBlbiBjb3VycyBkZSB0cmFpdGVtZW50Li4uJ1xcbiAgICB9LFxcbiAgICBleHBvcnRMb2FkaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBleHBvcnQgZmlsZSBpcyBiZWluZyBwcmVwYXJlZC4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgZXhwb3J0IGVzdCBlbiBjb3VycyBkZSBjaGFyZ2VtZW50Li4uJ1xcbiAgICB9LFxcbiAgICBjbG9zZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlJyxcXG4gICAgICAgICdmci1GUic6ICdGZXJtZXInXFxuICAgIH0sXFxuICAgIHNlcnZpY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlJyxcXG4gICAgICAgICdmci1GUic6ICdTZXJ2aWNlJ1xcbiAgICB9LFxcbiAgICByZW5hbWVEaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBjbG9zZSBhbnkgdmlldyBvciBlZGl0IHRhYiBjb25jZXJuaW5nIHRoaXMgaXRlbSBpZiB5b3Ugd2FudCB0byByZW5hbWUgaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIGZlcm1lciB0b3V0IG9uZ2xldCBjb25jZXJuYW50IGNldCDDqWzDqW1lbnQgc2kgdm91cyBzb3VoYWl0ZXogbGUgcmVub21tZXInXFxuICAgIH0sXFxuICAgIGRlbGV0ZURpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGNsb3NlIGFueSB2aWV3IG9yIGVkaXQgdGFiIGNvbmNlcm5pbmcgdGhpcyBpdGVtIGlmIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgZmVybWVyIHRvdXQgb25nbGV0IGNvbmNlcm5hbnQgY2V0IMOpbMOpbWVudCBzaSB2b3VzIHNvdWhhaXRleiBsZSBzdXBwcmltZXInXFxuICAgIH0sXFxuICAgIHJlc3VsdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3Jlc3VsdCcsXFxuICAgICAgICAnZnItRlInOiAncsOpc3VsdGF0J1xcbiAgICB9LFxcbiAgICByZXN1bHRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAncmVzdWx0cycsXFxuICAgICAgICAnZnItRlInOiAncsOpc3VsdGF0cydcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlTGFiZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RyYXRpb24gdHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSBkXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25SZWdpc3RyYXRpb25UeXBlRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugc2VsZWN0IHRoZSB0eXBlIG9mIHJlZ2lzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc8OpbGVjdGlvbm5lciBsZSB0eXBlIGRcXFxcJ2VucmVnaXN0cmVtZW50J1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblR5cGVTdXBwbGllcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N1cHBsaWVyJyxcXG4gICAgICAgICdmci1GUic6ICdGb3Vybmlzc2V1cidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlQ2FwaXRhbFByb2plY3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYXBpdGFsIFByb2plY3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhcGl0YWwgUHJvamVjdCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlSW50ZXJuYWxVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW50ZXJuYWwgVXNlcicsXFxuICAgICAgICAnZnItRlInOiAnSW50ZXJuYWwgVXNlcidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25JbnRybzE6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIENvbW11bml0eSBlbmFibGVzIENoZXZyb24gU3VwcGxpZXJzLCBDaGV2cm9uIEludGVybmFsIFVzZXJzIGFuZCBDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdHMgdG8gcGVyZm9ybSBlbGVjdHJvbmljIHRyYW5zYWN0aW9ucyB3aXRoIENoZXZyb24gSVQgc3lzdGVtcyBpbiBhIGhpZ2hseSBzZWN1cmUgYnV0IHZlcnkgZWFzeSBtYW5uZXIuJyxcXG4gICAgICAgICdmci1GUic6ICdDZXR0ZSBjb21tdW5hdXTDqSBwZXJtZXQgYXV4IGZvdXJuaXNzZXVycywgXFxcIkludGVybmFsIFVzZXJcXFwiIGV0IFxcXCJDYXBpdGFsIFByb2plY3RcXFwiIENoZXZyb24gZGUgcsOpYWxpc2VyIGRlcyDDqWNoYW5nZXMgw6lsZWN0cm9uaXF1ZXMgYXZlYyBsZXMgc3lzdMOobWVzIGluZm9ybWF0aXF1ZXMgZGUgQ2hldnJvbiBkZSBmYcOnb24gc2ltcGxlIGV0IHPDqWN1cmlzw6llLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25TdXBwbGllckludHJvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8gYmUgcGFydCBvZiB0aGUgQ2hldnJvbiBDb21tdW5pdHksIHlvdSBtdXN0IGhhdmUgYmVlbiBpbnZpdGVkIGFuZC9vciBhdXRob3JpemVkIGJ5IENoZXZyb24uJyxcXG4gICAgICAgICdmci1GUic6ICdQb3VyIGZhaXJlIHBhcnRpZSBkZSBsYSBjb21tdW5hdXTDqSBDaGV2cm9uLCB2b3VzIGRldmV6IGF2b2lyIHJlw6d1IHVuZSBpbnZpdGF0aW9uIGV0L291IHVuZSBhdXRvcmlzYXRpb24gZGUgbGEgcGFydCBkZSBDaGV2cm9uLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25QaWR4aWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEJyxcXG4gICAgICAgICdmci1GUic6ICdQSURYIElEJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZEhlbHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgQ2hldnJvbiBQSURYIElEIGlzIGZvdW5kIGluIHRoZSBpbnZpdGF0aW9uIGVtYWlsIHNlbnQgYnkgQ2hldnJvbicsXFxuICAgICAgICAnZnItRlInOiAnTGUgXFxcIlBJRFggSURcXFwiIENoZXZyb24gc2UgdHJvdXZlIGRhbnMgbFxcXFwnZW1haWwgZFxcXFwnaW52aXRhdGlvbiBlbnZvecOpIHBhciBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGVudGVyIHRoZSBDaGV2cm9uIFBJRFggSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHNhaXNpciBsZSBcXFwiUElEWCBJRFxcXCIgQ2hldnJvbidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25WZW5kb3JpZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VSUCBWZW5kb3IgSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VSUCBWZW5kb3IgSUQnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gRVJQIFZlbmRvciBJRCBpcyBmb3VuZCBpbiB0aGUgaW52aXRhdGlvbiBlbWFpbCBzZW50IHRvIHlvdSBieSBDaGV2cm9uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBcXFwiRVJQIFZlbmRvciBJRFxcXCIgQ2hldnJvbiBzZSB0cm91dmUgZGFucyBsXFxcXCdlbWFpbCBkXFxcXCdpbnZpdGF0aW9uIGVudm95w6kgcGFyIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBFUlAgVmVuZG9yIElEJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgbGUgXFxcIkVSUCBWZW5kb3IgSURcXFwiIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uQWdyZWVtZW50SW50cm86IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxzcGFuPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlBsZWFzZSByZWFkIHRoZSZuYnNwOzwvc3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8YSB0YXJnZXQ9XFxcXFxcXCJfYmxhbmtcXFxcXFxcIiBocmVmPVxcXFxcXFwiaHR0cDovL3d3dy5iMmVlbi5jb20vX2NvbW11bml0eW1hdGVyaWFsL2NoZXZyb24vQWdyZWVtZW50X2IyZWVuX0NoZXZyb25fUHJvZC5wZGZcXFxcXFxcIj5jb250cmFjdHVhbCBhZ3JlZW1lbnQ8L2E+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7YW5kIGNvbmZpcm0gYmVsb3c8L3NwYW4+XFxcXG4gICAgICAgICAgICA8L3NwYW4+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8c3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5NZXJjaSBkZSBsaXJlJm5ic3A7PC9zcGFuPlxcXFxuICAgICAgICAgICAgICAgIDxhIHRhcmdldD1cXFxcXFxcIl9ibGFua1xcXFxcXFwiIGhyZWY9XFxcXFxcXCJodHRwOi8vd3d3LmIyZWVuLmNvbS9fY29tbXVuaXR5bWF0ZXJpYWwvY2hldnJvbi9BZ3JlZW1lbnRfYjJlZW5fQ2hldnJvbl9Qcm9kLnBkZlxcXFxcXFwiPmwnYWNjb3JkIGNvbnRyYWN0dWVsPC9hPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPiZuYnNwO2V0IGRlIHZhbGlkZXIgY2ktZGVzc291czwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvc3Bhbj5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudExhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSSBoYXZlIHJlYWQgYW5kIEkgYWNjZXB0IHRoZSBUZXJtcyBhbmQgQ29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCcsXFxuICAgICAgICAnZnItRlInOiAnSlxcXFwnYWkgbHUgZXQgYWNjZXB0ZSBsZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlcyBkZSBjZSBjb250cmF0J1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGFjY2VwdCB0aGUgVGVybXMgYW5kIENvbmRpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHZhbGlkZXIgbGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZXMnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uSW50ZXJuYWxVc2VySW50cm8yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8gZ2V0IHlvdXIgcmVnaXN0cmF0aW9uIGFjY2VwdGVkLCBwbGVhc2UgcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgUElEWCBJRCBhbmQgQ2hldnJvbiBwYXNzd29yZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BvdXIgcG91cnN1aXZyZSB2b3RyZSBlbnJlZ2lzdHJlbWVudCwgbWVyY2kgZFxcXFwnZW50cmVyIGxlIFxcXCJQSURYIElEXFxcIiBldCBtb3QgZGUgcGFzc2UgQ2hldnJvbiBwdWlzIHZhbGlkZXIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2hldnJvbiBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGFzc3dvcmRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gcGFzc3dvcmQgaXMgZm91bmQgaW4gdGhlIGludml0YXRpb24gZW1haWwgc2VudCBieSBDaGV2cm9uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtb3QgZGUgcGFzc2UgQ2hldnJvbiBzZSB0cm91dmUgZGFucyBsXFxcXCdlbWFpbCBkXFxcXCdpbnZpdGF0aW9uIGVudm95w6kgcGFyIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGFzc3dvcmRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc2Fpc2lyIGxlIG1vdCBkZSBwYXNzZSBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkNhcGl0YWxQcm9qZWN0SW50cm86IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3UgYXJlIGNyZWF0aW5nIHRoaXMgYWNjb3VudCBmb3IgYSBDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgY3LDqWV6IGNlIGNvbXB0ZSBwb3VyIHVuIFxcXCJDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdFxcXCIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZFZlbmRvcmlkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEIC8gRVJQIFZlbmRvciBJRCBhcmUgbm90IGNvcnJlY3QuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWVzIHlvdSBwcm92aWRlZCBhbmQgcmV0cnkuJyxcXG4gICAgICAgICdmci1GUic6ICdcXFwiUElEWCBJRFxcXCIgLyBcXFwiRVJQIFZlbmRvciBJRFxcXCIgaW5jb3JyZWN0cy4gTWVyY2kgZGUgdsOpcmlmaWVyIGxlcyB2YWxldXJzIHNhaXNpZXMgYXZhbnQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGlkeGlkUGFzc3dvcmRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BJRFggSUQgLyBDaGV2cm9uIFBhc3N3b3JkIGFyZSBub3QgY29ycmVjdC4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZXMgeW91IHByb3ZpZGVkIGFuZCByZXRyeS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1xcXCJQSURYIElEXFxcIiAvIE1vdCBkZSBwYXNzZSBpbmNvcnJlY3RzLiBNZXJjaSBkZSB2w6lyaWZpZXIgbGVzIHZhbGV1cnMgc2Fpc2llcyBhdmFudCBkZSByw6llc3NheWVyLidcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldFRvb2x0aXBEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZSBncm91cGUgZGUgcGVybWlzc2lvbnMnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRUb29sdGlwRWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VkaXQgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgY2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcENsb25lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIGEgbmV3IHBlcm1pc3Npb24gc2V0IHdpdGggcHJlZmlsbGVkIGRhdGEgZnJvbSB0aGlzIG9uZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuIG5vdXZlYXUgZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGF2ZWMgbGVzIGRvbm7DqWVzIGRlIGNlbHVpLWNpJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcENyb3NzSW5zdGFuY2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBpcyBhIGdsb2JhbCBwZXJtaXNzaW9uIHNldCcsXFxuICAgICAgICAnZnItRlInOiAnQ2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGVzdCBnbG9iYWwnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRBdExlYXN0T25lU2NvcGVSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F0IGxlYXN0IG9uZSBzY29wZSBzdHJpbmcgaXMgcmVxdWlyZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1IG1vaW5zIHVuIHNjb3BlIGRvaXQgw6p0cmUgcmVuc2VpZ27DqSdcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldHNEZWxldGVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHBlcm1pc3Npb24gc2V0PycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIGdyb3VwZSBkZSBwZXJtaXNzaW9ucyA/J1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYXNzb2NpYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzYXNzb2NpYXRlIHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXNhc3NvY2llciBjZXQgdXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIHJlYWxtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVhbG0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RvbWFpbmUnXFxuICAgIH0sXFxuICAgIGVtYWlsVmVyaWZpZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbWFpbCB2ZXJpZmllZCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgY29uZmlybcOpJ1xcbiAgICB9LFxcbiAgICBwb2xpY2llczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BvbGljaWVzJyxcXG4gICAgICAgICdmci1GUic6ICdEcm9pdHMgZFxcXFwnYWNjw6hzJ1xcbiAgICB9LFxcbiAgICBvcmdQb3NpdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcmdhbml6YXRpb24gcG9zaXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdQb3NpdGlvbnMgZFxcXFwnb3JnYW5pc2F0aW9uJ1xcbiAgICB9LFxcbiAgICB1c2VyUmVsb2FkT3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIHVzZXIgb3JnYW5pemF0aW9uIHBvc2l0aW9ucycsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgbGVzIHBvc2l0aW9ucyBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldCcsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICB1c2VyUmVzZW5kQWN0aXZhdGlvbkVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZW5kIGFjdGl2YXRpb24gZW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbnZveWVyIGxcXFxcJ2VtYWlsIGRcXFxcJ2FjdGl2YXRpb24nXFxuICAgIH0sXFxuICAgIHVzZXJTaG93T3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyB1c2VyIG9yZ2FuaXphdGlvbiBwb3NpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGVzIHBvc2l0aW9ucyBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRzRm9ySW5zdGFuY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldHMgZm9yIGluc3RhbmNlJyxcXG4gICAgICAgICdmci1GUic6ICdHcm91cGVzIGRlIHBlcm1pc3Npb25zIHBvdXIgbFxcXFwnaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIG90aGVyUHJvcGVydGllczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ090aGVyIHByb3BlcnRpZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1dHJlcyBwcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIHNldCBtdXN0IGJlIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdSBtb2lucyB1biBncm91cGUgZGUgcGVybWlzc2lvbnMgZG/DrnQgw6p0cmUgYXNzaWduw6kgw6AgbFxcXFwndXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIG9yZ1Bvc2l0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3JnYW5pemF0aW9uIHBvc2l0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdQb3NpdGlvbiBkYW5zIGxcXFxcJ29yZ2FuaXNhdGlvbidcXG4gICAgfSxcXG4gICAgdXNlcnNFbWFpbFBsYWNlaG9sZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsLi4uJ1xcbiAgICB9LFxcbiAgICBzZWFyY2hCeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCBieScsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlciBwYXInXFxuICAgIH0sXFxuICAgIHRvb2x0aXBBZGRVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZSB0aGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgbmV3IHVzZXIgeW91IHdhbnQgdG8gYXNzb2NpYXRlIHRvIHRoaXMgaW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VudHJlciBsXFxcXCdhZHJlc3NlIGVtYWlsIGR1IG5vdXZlbCB1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogYXNzb2NpZXIgw6AgY2V0dGUgaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIGFzc29jaWF0ZVVzZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBc3NvY2lhdGUgbmV3IHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fzc29jaWVyIG5vdXZlbCB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgdXNlckRlbGV0ZUNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgdXNlcj8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgdXRpbGlzYXRldXIgPydcXG4gICAgfSxcXG4gICAgdXNlckRpc2Fzc29jaWF0ZUNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGlzYXNzb2NpYXRlIHRoaXMgdXNlciBmcm9tIHRoZSBjdXJyZW50IGluc3RhbmNlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgZMOpc2Fzc29jaWVyIGNldCB1dGlsaXNhdGV1ciBkZSBsXFxcXCdpbnN0YW5jZSA/J1xcbiAgICB9LFxcbiAgICBzaG93QWxsVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHVzZXJzIG9mIGFsbCBpbnN0YW5jZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyB1dGlsaXNhdGV1cnMgZGUgdG91dGVzIGxlcyBpbnN0YW5jZXMnXFxuICAgIH0sXFxuICAgIHNob3dTY29wZWxlc3NVc2Vyczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ09ubHkgZGlzcGxheSB1c2VycyB3aXRob3V0IGFueSBwZXJtaXNzaW9uJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBzZXVsZW1lbnQgbGVzIHV0aWxpc2F0ZXVycyBzYW5zIGRyb2l0cyBkXFxcXCdhY2PDqHMnXFxuICAgIH0sXFxuICAgIHNob3dPcmdsZXNzVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmx5IGRpc3BsYXkgdXNlcnMgd2l0aG91dCBhbnkgYXNzb2NpYXRlZCBvcmcgbm9kZScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgc2V1bGVtZW50IGxlcyB1dGlsaXNhdGV1cnMgc2FucyBwb3NpdGlvbiBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIGRpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2Fzc29jaWF0ZScsXFxuICAgICAgICAnZnItRlInOiAnRMOpc2Fzc29jaWVyJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Blcm1pc3Npb24gc2V0cycsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlcyBkZSBwZXJtaXNzaW9ucydcXG4gICAgfSxcXG4gICAgdXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VycycsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXJzJ1xcbiAgICB9LFxcbiAgICBmaWVsZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWVsZHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wcydcXG4gICAgfSxcXG4gICAgaXNLZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXk/JyxcXG4gICAgICAgICdmci1GUic6ICdDbMOpID8nXFxuICAgIH0sXFxuICAgIGFkZEZpZWxkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgZmllbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gY2hhbXAnXFxuICAgIH0sXFxuICAgIGNyZWF0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIGEgbmV3IHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXIgdW5lIG5vdXZlbGxlIHRhYmxlJ1xcbiAgICB9LFxcbiAgICBlZGl0VGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVcGRhdGUgdGhlIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2RpZmllciBsYSB0YWJsZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZFhtbFRhZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgdmFsdWUuIEFsbG93ZWQgY2hhcnM6IGEteiBBLVogMC05IF8gOiAtIC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGV1ciBpbnZhbGlkZS4gQ2FyYWN0w6hyZXMgYXV0b3Jpc8OpcyA6IGEteiBBLVogMC05IF8gOiAtIC4nXFxuICAgIH0sXFxuICAgIHdpZHRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2lkdGgnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhcmdldXInXFxuICAgIH0sXFxuICAgIGhlaWdodDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hlaWdodCcsXFxuICAgICAgICAnZnItRlInOiAnSGF1dGV1cidcXG4gICAgfSxcXG4gICAgc21hbGxTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU21hbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BldGl0J1xcbiAgICB9LFxcbiAgICBtZWRpdW1TaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVkaXVtJyxcXG4gICAgICAgICdmci1GUic6ICdNb3llbidcXG4gICAgfSxcXG4gICAgbGFyZ2VTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFyZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dyYW5kJ1xcbiAgICB9LFxcbiAgICBmdWxsU2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Z1bGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BsZWluJ1xcbiAgICB9LFxcbiAgICBlZGl0RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICB2aWV3RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICByZXByb2Nlc3NEb2N1bWVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcHJvY2VzcyBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnUmVsYW5jZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHJlbG9hZERvY3VtZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICdSZWNoYXJnZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHByaW50RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmludCBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnSW1wcmltZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHZpZXdGb3JtSnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IHRoZSBmb3JtJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIGZvcm11bGFpcmUnXFxuICAgIH0sXFxuICAgIGVkaXRGb3JtSnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHVzaW5nIHRoZSBmb3JtJyxcXG4gICAgICAgICdmci1GUic6ICdFZGl0ZXIgw6AgbFxcXFwnYWlkZSBkdSBmb3JtdWxhaXJlJ1xcbiAgICB9LFxcbiAgICB2aWV3U291cmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyB0aGUgc291cmNlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxhIHNvdXJjZSdcXG4gICAgfSxcXG4gICAgZWRpdE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgdmlld01lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgcmVwcm9jZXNzTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcHJvY2VzcyBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZWxhbmNlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICByZWxvYWRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hhcmdlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBwcmludE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmludCBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdJbXByaW1lciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBsb2NrZWRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBtZXNzYWdlIGlzIGN1cnJlbnRseSBsb2NrZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIG1lc3NhZ2UgZXN0IHZlcnJvdWlsbMOpJ1xcbiAgICB9LFxcbiAgICBiYWNrVG9MaXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmV0dXJuIHRvIGxpc3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBsaXN0ZSdcXG4gICAgfSxcXG4gICAgZW1wdHlBcHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb25lJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUnXFxuICAgIH0sXFxuICAgIG5vQXBwU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBhcHBsaWNhdGlvbiBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIGFwcGxpY2F0aW9uIHPDqWxlY3Rpb25uw6llJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RBcHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYW4gYXBwbGljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdW5lIGFwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsb2dvdXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaWduIG91dCcsXFxuICAgICAgICAnZnItRlInOiAnRMOpY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0U3luY0RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IHN5bmNocm9uaXphdGlvbiBkYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEYXRlIGRlIGRlcm5pw6hyZSBzeW5jaHJvbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVDb25maWd1cmF0aW9uSW52YWxpZE5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlLiBBdXRob3JpemVkIGNoYXJhY3RlcnMgOiBhLXogQS1aIDAtOSBfIDogLSAuJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIgaW52YWxpZGUuIENhcmFjdMOocmVzIGF1dG9yaXPDqXMgOiBhLXogQS1aIDAtOSBfIDogLSAuJ1xcbiAgICB9LFxcbiAgICBob21lQ29uZmlndXJhdGlvbk5hbWVBbHJlYWR5VXNlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBuYW1lIGB7bmFtZX1gaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBjb25maWd1cmF0aW9uLCBjaG9vc2UgYW5vdGhlciBvbmUgcGxlYXNlJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gYHtuYW1lfWAgZXN0IGTDqWrDoCB1dGlsaXPDqSBwb3VyIHVuZSBhdXRyZSBjb25maWd1cmF0aW9uLCB2ZXVpbGxleiBlbiBjaG9pc2lyIHVuIGF1dHJlJ1xcbiAgICB9LFxcbiAgICBpbnN0YW5jZUNoYW5nZURpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5zdGFuY2UgY2hhbmdlIGlzblxcXFwndCBwb3NzaWJsZSB3aGVuIHlvdSBhcmUgZWRpdGluZyB1c2VycyBvciBwZXJtaXNzaW9uIHNldHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW5nZXIgZFxcXFwnaW5zdGFuY2UgZXN0IGltcG9zc2libGUgcGVuZGFudCBsXFxcXCfDqWRpdGlvbiBkXFxcXCd1dGlsaXNhdGV1cnMgb3UgZGUgZ3JvdXBlcyBkZSBwZXJtaXNzaW9ucy4nXFxuICAgIH0sXFxuICAgIHF1aXRFZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUXVpdCBlZGl0JyxcXG4gICAgICAgICdmci1GUic6ICdBbm51bGVyIMOpZGl0aW9uJ1xcbiAgICB9LFxcbiAgICByZWxvYWRJbnN0YW5jZXNMaXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIGluc3RhbmNlcyBsaXN0JyxcXG4gICAgICAgICdmci1GUic6ICdSYWZyYcOuY2hpciBsYSBsaXN0ZSBkZXMgaW5zdGFuY2VzJ1xcbiAgICB9LFxcbiAgICBpbnN0YW5jZUZldGNoV2FybmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FwcCBlbmRwb2ludHMgbm90IGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGVzIFxcXFwnZW5kcG9pbnRzXFxcXCcgbmUgc29udCBwYXMgY2hhcmfDqXMnXFxuICAgIH0sXFxuICAgIG1lbnU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZW51JyxcXG4gICAgICAgICdmci1GUic6ICdNZW51J1xcbiAgICB9LFxcbiAgICBob21lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG9tZScsXFxuICAgICAgICAnZnItRlInOiAnQWNjdWVpbCdcXG4gICAgfSxcXG4gICAgcmVwb3J0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcG9ydHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhcHBvcnRzJ1xcbiAgICB9LFxcbiAgICB3b3JrSXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXb3JrIEl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdUw6JjaGVzJ1xcbiAgICB9LFxcbiAgICB0YWJsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYWJsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1RhYmxlcydcXG4gICAgfSxcXG4gICAgZG9jdW1lbnRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRG9jdW1lbnRzJyxcXG4gICAgICAgICdmci1GUic6ICdEb2N1bWVudHMnXFxuICAgIH0sXFxuICAgIG9hdXRoU2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPQXV0aCBTZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZXMgT0F1dGgnXFxuICAgIH0sXFxuICAgIG9yZ2FuaXNhdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcmdhbml6YXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdPcmdhbmlzYXRpb25zJ1xcbiAgICB9LFxcbiAgICBsb2NhbFRlc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMb2NhbCB0ZXN0JyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0IGxvY2FsJ1xcbiAgICB9LFxcbiAgICByZXRyeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHJ5PycsXFxuICAgICAgICAnZnItRlInOiAnUsOpZXNzYXllciA/J1xcbiAgICB9LFxcbiAgICBub01lbnVFbnRyeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGVudHJ5IGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtZW51IGFjY2Vzc2libGUnXFxuICAgIH0sXFxuICAgIGNyZWF0ZWRNZXNzYWdlc0lkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZWQgbWVzc2FnZShzKSBJRChzKTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEKHMpIGR1L2RlcyBtZXNzYWdlKHMpIGNyw6nDqShzKSA6J1xcbiAgICB9LFxcbiAgICBmbGFnTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZsYWcgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnTWFycXVlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBmbGFnczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZsYWdzJyxcXG4gICAgICAgICdmci1GUic6ICdNYXJxdWV1cnMnXFxuICAgIH0sXFxuICAgIGF2YWlsYWJsZUZpZWxkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F2YWlsYWJsZSBmaWVsZHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wcyBkaXNwb25pYmxlcydcXG4gICAgfSxcXG4gICAgYWx3YXlzVmlzaWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fsd2F5cyB2aXNpYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdUb3Vqb3VycyB2aXNpYmxlJ1xcbiAgICB9LFxcbiAgICB2aXNpYmxlSWZPcGVuZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaXNpYmxlIGlmIG9wZW5lZCcsXFxuICAgICAgICAnZnItRlInOiAnVmlzaWJsZSBzaSBvdXZlcnQnXFxuICAgIH0sXFxuICAgIGJhY2tncm91bmRDb2xvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2tncm91bmQgY29sb3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvdWxldXIgZHUgZm9uZCdcXG4gICAgfSxcXG4gICAgZm9udENvbG9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVmYXVsdCBmb250IGNvbG9yJyxcXG4gICAgICAgICdmci1GUic6ICdDb3VsZXVyIGRlIGJhc2UgZHUgdGV4dGUnXFxuICAgIH0sXFxuICAgIGNyZWF0ZU1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDcmVhdGUgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuIG1lc3NhZ2UnXFxuICAgIH0sXFxuICAgIHVwbG9hZEZpbGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBsb2FkIGZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnZveWVyIGRlcyBmaWNoaWVycydcXG4gICAgfSxcXG4gICAgZW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2xvc2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlcm1pbmVyJ1xcbiAgICB9LFxcbiAgICBwcm9jZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvY2VzcycsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgZmlsZXNEcm9wcGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnZmlsZShzKSBkcm9wcGVkJyxcXG4gICAgICAgICdmci1GUic6ICdmaWNoaWVyKHMpIGTDqXBvc8OpKHMpJ1xcbiAgICB9LFxcbiAgICBmaWxlc1VwbG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnZmlsZShzKSB1cGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnZmljaGllcihzKSBlbnZvecOpKHMpJ1xcbiAgICB9LFxcbiAgICBzaG93UHJvY2Vzc2VkRmlsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgZmlsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBmaWNoaWVycyB0cmFpdMOpcyBhdmVjIHN1Y2PDqHMnXFxuICAgIH0sXFxuICAgIGhpZGVQcm9jZXNzZWRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGUgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnTWFzcXVlciBsZXMgZmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzJ1xcbiAgICB9LFxcbiAgICBmaWxlc1N1Ym1pdFN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzICEnXFxuICAgIH0sXFxuICAgIGhpZGRlbkNvbHVtbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIaWRkZW4gY29sdW1ucycsXFxuICAgICAgICAnZnItRlInOiAnQ29sb25uZXMgY2FjaMOpZXMnXFxuICAgIH0sXFxuICAgIGhpZGRlbkNvbHVtbnNUaXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICcoY2xpY2sgdG8gcmUtZGlzcGxheSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJyhjbGlxdWVyIHBvdXIgcsOpLWFmZmljaGVyKSdcXG4gICAgfSxcXG4gICAgYWxsQ29sdW1uc1Zpc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbGwgY29sdW1ucyBhcmUgY3VycmVudGx5IGRpc3BsYXllZC4gSGlkZGVucyBjb2x1bW5zIGNhbiBiZSBmb3VuZCBoZXJlIGFuZCByZS1kaXNwbGF5ZWQuJyxcXG4gICAgICAgICdmci1GUic6ICdUb3V0ZXMgbGVzIGNvbG9ubmVzIHNvbnQgYWN0dWVsbGVtZW50IHZpc2libGVzLiBMZXMgY29sb25uZXMgY2FjaMOpZXMgYXBwYXJhaXRyb250IGljaSBldCBwb3Vycm9udCDDqnRyZSByw6ktYWZmaWNow6llcy4nXFxuICAgIH0sXFxuICAgIGRhdGVGcm9tOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJvbScsXFxuICAgICAgICAnZnItRlInOiAnRMOpYnV0J1xcbiAgICB9LFxcbiAgICBkYXRlVG86IHtcXG4gICAgICAgICdlbi1VUyc6ICdUbycsXFxuICAgICAgICAnZnItRlInOiAnRmluJ1xcbiAgICB9LFxcbiAgICBkb2N1bWVudFR5cGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3JyxcXG4gICAgICAgICdmci1GUic6ICdWdWUnXFxuICAgIH0sXFxuICAgIGNvbGxhcHNlT3B0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29sbGFwc2UgYWZ0ZXIgc2VhcmNoJyxcXG4gICAgICAgICdmci1GUic6ICdSw6lkdWlyZSBhcHLDqHMgcmVjaGVyY2hlJ1xcbiAgICB9LFxcbiAgICByZXNldFNlYXJjaE9wdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhdW5jaCBzZWFyY2ggYWZ0ZXIgcmVzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmNlciBsYSByZWNoZXJjaGUgYXByw6hzIHLDqWluaXRpYWxpc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5TGFiZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IGxhYmVsJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsYWJlbCdcXG4gICAgfSxcXG4gICAgd29ya2Zsb3dJblByb2dyZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW4gYSB3b3JrZmxvdycsXFxuICAgICAgICAnZnItRlInOiAnRmx1eCBlbiBjb3VycydcXG4gICAgfSxcXG4gICAgYXNzaWduVXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fzc2lnbiB1c2VyJyxcXG4gICAgICAgICdmci1GUic6ICdBc3NpZ25lciB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgYXNzaWduZWRVc2Vyczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fzc2lnbmVkIHVzZXIocyknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyKHMpIGFzc2lnbsOpKHMpJ1xcbiAgICB9LFxcbiAgICBhc3NpZ25Vc2VyVG9Qb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCB0aGlzIHVzZXIgdG8gdGhpcyBwb3NpdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciBjZXQgdXRpbGlzYXRldXIgw6AgY2V0dGUgcG9zaXRpb24nXFxuICAgIH0sXFxuICAgIHJlbW92ZVVzZXJPcmdQb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbW92ZSB0aGlzIHVzZXIgZnJvbSB0aGlzIHBvc2l0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgY2V0IHV0aWxpc2F0ZXVyIGRlIGNldHRlIHBvc2l0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXlvdXRCdWlsZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGF5b3V0IGJ1aWxkZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BlcnNvbm5hbGlzYXRpb24gZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICB0aGVtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZW1lJyxcXG4gICAgICAgICdmci1GUic6ICdUaMOobWUnXFxuICAgIH0sXFxuICAgIGZvbnRTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRm9udCBzaXplJyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUgY2FyYWN0w6hyZXMnXFxuICAgIH0sXFxuICAgIHNob3dJbnZpc2libGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyBpbnZpc2libGVzJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsZXMgY2FyYWN0w6hyZXMgaW52aXNpYmxlcydcXG4gICAgfSxcXG4gICAgc2hvd0d1dHRlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgZ3V0dGVyJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsYSBtYXJnZSdcXG4gICAgfSxcXG4gICAgc2hvd0luZGVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaW5kZW50IGd1aWRlcycsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgbGVzIGd1aWRlcyBkXFxcXCdpbmRlbnRhdGlvbidcXG4gICAgfSxcXG4gICAgd3JhcDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dyYXAnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWJvcmRlbWVudCdcXG4gICAgfSxcXG4gICAgcHJldmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ByZXZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byw6l2aXN1YWxpc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBzaG93SGlkZGVuQ29sdW1uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaGlkZGVuIGNvbHVtbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBjb2xvbm5lcyBjYWNow6llcydcXG4gICAgfSxcXG4gICAgcmVzZXREaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBhbGwgZGlzcGxheSBzZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUsOpaW5pdGlhbGlzZXIgbGVzIHByw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5SGlkZGVuQ29sdW1uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGRlbiBjb2x1bW5zIChjbGljayB0byByZS1kaXNwbGF5KScsXFxuICAgICAgICAnZnItRlInOiAnQ29sb25uZXMgY2FjaMOpZXMgKGNsaXF1ZXIgcG91ciByw6ktYWZmaWNoZXIpJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3NDaGFuZ2VkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBzZXR0aW5ncyBjaGFuZ2VkIScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqWbDqXJlbmNlcyBkXFxcXCdhZmZpY2hhZ2UgbW9kaWZpw6llcyAhJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHNldHRpbmdzIScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqWbDqXJlbmNlcyBkXFxcXCdhZmZpY2hhZ2UnXFxuICAgIH0sXFxuICAgIGRhdGFncmlkU2F2ZURpc3BsYXlTZXR0aW5nczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIlxcXFxuICAgICAgICAgICAgPGRpdj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5EbyB5b3Ugd2FudCB0byBzYXZlIHlvdXIgbW9kaWZpY2F0aW9ucz88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPllvdXIgcHJlZmVyZW5jZXMgKHByZXNlbmNlLCB3aWR0aCBhbmQgb3JkZXIgb2YgY29sdW1ucy4uLikgd2lsbCBiZSBzYXZlZCBpbiB5b3VyIHVzZXIgcHJvZmlsZS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8ZGl2PlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlZvdWxlei12b3VzIHNhdXZlZ2FyZGVyIHZvcyBtb2RpZmljYXRpb25zID88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPlZvcyBwclxcXFx1MDBFOWZcXFxcdTAwRTlyZW5jZXMgZCdhZmZpY2hhZ2UgKHByXFxcXHUwMEU5c2VuY2UsIGxhcmdldXIgZXQgb3JkcmUgZGVzIGNvbG9ubmVzLi4uKSBzZXJvbnQgZW5yZWdpc3RyXFxcXHUwMEU5ZXMgZGFucyB2b3RyZSBwcm9maWwgdXRpbGlzYXRldXIuPC9lbT5cXFxcbiAgICAgICAgICAgIDwvZGl2PlxcXFxuICAgICAgICBcXFwiXFxuICAgIH0sXFxuICAgIGRpc3BsYXlTZXR0aW5nc1Jlc2V0Q29uZmlybToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXNldCBhbGwgeW91ciBkaXNwbGF5IHNldHRpbmdzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcsOpaW5pdGlhbGlzZXIgdm9zIHByw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlID8nXFxuICAgIH0sXFxuICAgIGRpc3BsYXlNb2RlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBtb2RlOicsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoYWdlIDonXFxuICAgIH0sXFxuICAgIGRpc3BsYXlMYXB0b3A6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZWRpdW0gc2NyZWVuIHNpemUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3JhbiBkZSB0YWlsbGUgbW95ZW5uZSdcXG4gICAgfSxcXG4gICAgZGlzcGxheURlc2t0b3A6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXJnZSBzY3JlZW4gc2l6ZScsXFxuICAgICAgICAnZnItRlInOiAnw4ljcmFuIGRlIGdyYW5kZSB0YWlsbGUnXFxuICAgIH0sXFxuICAgIHVuZXhwZWN0ZWRFcnJvckNoZWNrVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQW4gdW5leHBlY3RlZCBlcnJvciBoYXMgb2NjdXJlZC4gUGxlYXNlIHJldHJ5IGFuZCBjaGVjayBmb3IgdGhlIFVSTCB5b3UgcmVxdWVzdGVkIG9yIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvci4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VuZSBlcnJldXIgZXN0IHN1cnZlbnVlLiBNZXJjaSBkZSByw6llc3NheWVyIGVuIHbDqXJpZmlhbnQgbFxcXFwnVVJMIG91IGNvbnRhY3RleiB2b3RyZSBhZG1pbmlzdHJhdGV1ciBzeXN0w6htZS4nXFxuICAgIH0sXFxuICAgIHNlZUVycm9yRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlZSBlcnJvciBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlcyBkw6l0YWlscyBkZSBsXFxcXCdlcnJldXInXFxuICAgIH0sXFxuICAgIHNlY29uZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlY29uZCcsXFxuICAgICAgICAnZnItRlInOiAnU2Vjb25kZSdcXG4gICAgfSxcXG4gICAgbWludXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWludXRlJyxcXG4gICAgICAgICdmci1GUic6ICdNaW51dGUnXFxuICAgIH0sXFxuICAgIGhvdXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIb3VyJyxcXG4gICAgICAgICdmci1GUic6ICdIZXVyZSdcXG4gICAgfSxcXG4gICAgZGF5T2ZNb250aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RheSBvZiBtb250aCcsXFxuICAgICAgICAnZnItRlInOiAnSm91ciBkdSBtb2lzJ1xcbiAgICB9LFxcbiAgICBtb250aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vbnRoJyxcXG4gICAgICAgICdmci1GUic6ICdNb2lzJ1xcbiAgICB9LFxcbiAgICBkYXlPZldlZWs6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEYXkgb2Ygd2VlaycsXFxuICAgICAgICAnZnItRlInOiAnSm91ciBkZSBsYSBzZW1haW5lJ1xcbiAgICB9LFxcbiAgICB5ZWFyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWWVhcicsXFxuICAgICAgICAnZnItRlInOiAnQW5uw6llJ1xcbiAgICB9LFxcbiAgICBpbnB1dEludmFsaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGlucHV0JyxcXG4gICAgICAgICdmci1GUic6ICdDaGFtcCBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgaW1wb3J0RGF0YUZyb21GaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0IGRhdGEgZnJvbSBhIGZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyIGRlcyBkb25uw6llcyBkZXB1aXMgdW4gZmljaGllcidcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgZmlsZScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllciBzw6lsZWN0aW9ubsOpJ1xcbiAgICB9LFxcbiAgICBmaWxlVHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGUgdHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSBkdSBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBmaWVsZHNTZXBhcmF0b3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWVsZHMgc2VwYXJhdG9yJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lwYXJhdGV1ciBkZSBjb2xvbm5lcydcXG4gICAgfSxcXG4gICAgZW5jb2Rpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbmNvZGluZycsXFxuICAgICAgICAnZnItRlInOiAnRW5jb2RhZ2UnXFxuICAgIH0sXFxuICAgIHF1b3RlQ2hhcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1b3RlIGNoYXJhY3RlcicsXFxuICAgICAgICAnZnItRlInOiAnQ2FyYWN0w6hyZSBkZSBndWlsbGVtZXQnXFxuICAgIH0sXFxuICAgIGhlYWRlck9uRmlyc3RSb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIZWFkZXJzIG9uIGZpcnN0IHJvdycsXFxuICAgICAgICAnZnItRlInOiAnRW50w6p0ZXMgc3VyIGxhIHByZW1pw6hyZSBsaWduZSdcXG4gICAgfSxcXG4gICAgb3ZlcndyaXRlRXhpc3RpbmdEYXRhOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3ZlcndyaXRlIGV4aXN0aW5nIGRhdGEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3Jhc2VyIGxlcyBkb25uw6llcyBleGlzdGFudGVzJ1xcbiAgICB9LFxcbiAgICBkcm9wWm9uZVRpdGxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHJvcCBmaWxlcyBoZXJlIHRvIHVwbG9hZCB0aGVtJyxcXG4gICAgICAgICdmci1GUic6ICdEw6lwb3NlciBsZXMgZmljaGllcnMgw6AgZW52b3llciBpY2knXFxuICAgIH0sXFxuICAgIGRyb3Bab25lU3VidGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICcob3IgY2xpY2spJyxcXG4gICAgICAgICdmci1GUic6ICcob3UgY2xpcXVlciknXFxuICAgIH0sXFxuICAgIGludmFsaWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBmaWxlKHMpJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVyKHMpIGludmFsaWRlKHMpJ1xcbiAgICB9LFxcbiAgICBjb250ZW50VHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FjY2VwdGVkIENvbnRlbnQtdHlwZXM6JyxcXG4gICAgICAgICdmci1GUic6ICdDb250ZW50LXR5cGVzIGFjY2VwdMOpcyA6J1xcbiAgICB9LFxcbiAgICBtYXhTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWF4IHNpemU6JyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUgbWF4IDonXFxuICAgIH0sXFxuICAgIHVua25vd25Gb3JtYXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd1bmtub3duIGZvcm1hdCcsXFxuICAgICAgICAnZnItRlInOiAndW5rbm93biBzaXplJ1xcbiAgICB9LFxcbiAgICBhZGRUZXh0UHJvcGVydHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgYSB0ZXh0IHByb3BlcnR5JyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSB2YWxldXIgZGUgdHlwZSB0ZXh0ZSdcXG4gICAgfSxcXG4gICAgYWRkRmlsZVByb3BlcnR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgZmlsZSBwcm9wZXJ0eScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1biBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgZmlsZTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gZmljaGllciA6J1xcbiAgICB9LFxcbiAgICBkb3dubG9hZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rvd25sb2FkJyxcXG4gICAgICAgICdmci1GUic6ICdUw6lsw6ljaGFyZ2VyJ1xcbiAgICB9LFxcbiAgICB1cGxvYWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBsb2FkIGEgZmlsZScsXFxuICAgICAgICAnZnItRlInOiAnRW52b3llciB1biBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RlZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZSBzw6lsZWN0aW9ubsOpZSdcXG4gICAgfSxcXG4gICAgYWRkTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgYSBsYW5ndWFnZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICByZW1vdmVMYW5ndWFnZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVtb3ZlIHNlbGVjdGVkIGxhbmd1YWdlJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgbGEgbGFuZ3VlIHPDqWxlY3Rpb25uw6llJ1xcbiAgICB9LFxcbiAgICBjbG9zZUxhbmd1YWdlU2VsZWN0b3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDbG9zZSBsYW5ndWFnZSBzZWxlY3RvcicsXFxuICAgICAgICAnZnItRlInOiAnRmVybWVyIGxhIHPDqWxlY3Rpb24gZGUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICBzZWFyY2hMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCBsYW5ndWFnZS4uLicsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlciB1bmUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICBwYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUGFnZSdcXG4gICAgfSxcXG4gICAgb2Y6IHtcXG4gICAgICAgICdlbi1VUyc6ICdvZicsXFxuICAgICAgICAnZnItRlInOiAnc3VyJ1xcbiAgICB9LFxcbiAgICBwZGZMb2FkaW5nRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQREYgbG9hZGluZyBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyIGRlIGNoYXJnZW1lbnQgZHUgUERGJ1xcbiAgICB9LFxcbiAgICBub0ZpbGVDaG9zZW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBmaWxlIGNob3NlbicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gZmljaGllciBjaG9pc2knXFxuICAgIH0sXFxuICAgIGZpbGVVcGxvYWRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGUgdXBsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgdMOpbMOpY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgcHJldmlld0xvd2VyQ2FzZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3ByZXZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2FwZXLDp3UnXFxuICAgIH0sXFxuICAgIGZpbGVVcGxvYWRGYWlsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHVwbG9hZCBmYWlsZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY2hlYyBkdSB0w6lsw6ljaGFyZ2VtZW50IGR1IGZpY2hpZXInXFxuICAgIH0sXFxuICAgIHJlc3RhcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXN0YXJ0JyxcXG4gICAgICAgICdmci1GUic6ICdSZWTDqW1hcnJlcidcXG4gICAgfSxcXG4gICAgc2hvd1N0YXR1c0NvbnRyb2xzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyBzdGF0dXMgY29udHJvbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBjb250csO0bGVzIGRlIHN0YXR1dCdcXG4gICAgfSxcXG4gICAgaGlkZVN0YXR1c0NvbnRyb2xzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSGlkZSBzdGF0dXMgY29udHJvbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhY2hlciBsZXMgY29udHLDtGxlcyBkZSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIHJlZnJlc2hTdGF0dXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWZyZXNoIHN0YXR1cycsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgc3RhdHV0J1xcbiAgICB9LFxcbiAgICBydW5uaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVubmluZycsXFxuICAgICAgICAnZnItRlInOiAnRW4gY291cnMnXFxuICAgIH0sXFxuICAgIHN0b3BwZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdG9wcGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBcnLDqnTDqSdcXG4gICAgfSxcXG4gICAgc29ydEJ5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU29ydCBieScsXFxuICAgICAgICAnZnItRlInOiAnVHJpZXIgcGFyJ1xcbiAgICB9LFxcbiAgICBjcmVhdGVDaGlsZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZSBjaGlsZCcsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIGVuZmFudCdcXG4gICAgfSxcXG4gICAgdmFsaWRhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWYWxpZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgdHJlZVVwZGF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJRCcsXFxuICAgICAgICAnZnItRlInOiAnSUQnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXNLZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9wZXJ0aWVzIGtleShzKScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqShzKSBkZSBwcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIGludmFsaWRVbmlxdWVOb2RlTmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vZGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSBhbW9uZyBkaXJlY3QgY2hpbGRyZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG5vbSBkdSBub2V1ZCBkb2l0IMOqdHJlIHVuaXF1ZSBwYXJtaSBsZXMgZW5mYW50cyBkaXJlY3RzJ1xcbiAgICB9LFxcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZGl0aW9uYWwgcHJvcGVydGllcycsXFxuICAgICAgICAnZnItRlInOiAnUHJvcHJpw6l0w6lzIGFkZGl0aW9ubmVsbGVzJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RlZE5vZGVEZXRhaWxzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgbm9kZSBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscyBkdSBub2V1ZCBzw6lsZWN0aW9ubsOpJ1xcbiAgICB9LFxcbiAgICBleHBhbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBhbmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXBsaWVyJ1xcbiAgICB9LFxcbiAgICBjb2xsYXBzZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbGxhcHNlJyxcXG4gICAgICAgICdmci1GUic6ICdQbGllcidcXG4gICAgfSxcXG4gICAgdXNlckRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyIGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm9ybWF0aW9ucydcXG4gICAgfSxcXG4gICAgdmlld0J5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBieScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgcGFyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgdXNlcicsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1biB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgdXNlckVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBlbWFpbCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgZGUgbFxcXFwndXRpbHNhdGV1cidcXG4gICAgfSxcXG4gICAgc2VsZWN0VmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYSB2YWx1ZScsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1bmUgdmFsZXVyJ1xcbiAgICB9LFxcbiAgICBhZGRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciBkZXMgZmljaGllcnMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1Vc2Vyc0Rpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNhc3NvY2lhdGUgdGhlIHNlbGVjdGVkIHVzZXIocykgZnJvbSB0aGUgY3VycmVudCBpbnN0YW5jZT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGTDqXNhc3NvY2llciBsXFxcXCcobGVzKSB1dGlsaXNhdGV1cihzKSBzw6lsZWN0aW9ubsOpKHMpIGRlIGxcXFxcJ2luc3RhbmNlID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1Vc2Vyc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIHVzZXIocyk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbFxcXFwnKGxlcykgdXRpbGlzYXRldXIocykgc8OpbGVjdGlvbm7DqShzKSA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtUGVybXNldHNEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCBwZXJtaXNzaW9uIHNldChzKT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBsZShzKSBncm91cGUocykgZGUgcGVybWlzc2lvbnMgc8OpbGVjdGlvbm7DqShzKSA/J1xcbiAgICB9LFxcbiAgICBwZXJtc2V0c0RlbGV0ZVN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldChzKSBkZWxldGVkIScsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlKHMpIGRlIHBlcm1pc3Npb25zIHN1cHByaW3DqXMgISdcXG4gICAgfSxcXG4gICAgcGVybXNldHNEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAncGVybWlzc2lvbiBzZXQocykgbm90IGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2dyb3VwZShzKSBkZSBwZXJtaXNzaW9ucyBub24gc3VwcHJpbcOpKHMpJ1xcbiAgICB9LFxcbiAgICB1c2Vyc0RlbGV0ZVN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyKHMpIGRlbGV0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1cihzKSBzdXBwcmltw6kocykgISdcXG4gICAgfSxcXG4gICAgdXNlcnNEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAndXNlcihzKSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAndXRpbGlzYXRldXIocykgbm9uIHN1cHByaW3DqShzKSdcXG4gICAgfSxcXG4gICAgdXNlcnNEaXNhc3NvY2lhdGVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlcihzKSBkaXNhc3NvY2lhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIocykgZMOpc2Fzc29jacOpKHMpICEnXFxuICAgIH0sXFxuICAgIHVzZXJzRGlzYXNzb2NpYXRlRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3VzZXIocykgbm90IGRpc2Fzc29jaWF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3V0aWxpc2F0ZXVyKHMpIG5vbiBkw6lzYXNzb2Npw6kocyknXFxuICAgIH0sXFxuICAgIHJlY29yZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWNvcmRzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnRyw6llcydcXG4gICAgfSxcXG4gICAgbm9BdmFpbGFibGVUYWJsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyB0YWJsZXMgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIHRhYmxlIGRpc3BvbmlibGUuJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RUYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuZSB0YWJsZSdcXG4gICAgfSxcXG4gICAgZGVsZXRlVGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgdGhpcyB0YWJsZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIGNldHRlIHRhYmxlJ1xcbiAgICB9LFxcbiAgICBkZWxldGVBbGxSZWNvcmRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGFsbCByZWNvcmRzJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgdG91dCBsZSBjb250ZW51J1xcbiAgICB9LFxcbiAgICBleHBvcnRUb0V4Y2VsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IHRvIEV4Y2VsJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciB2ZXJzIEV4Y2VsJ1xcbiAgICB9LFxcbiAgICBpbXBvcnREYXRhOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0IGRhdGEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyIGRlcyBkb25uw6llcydcXG4gICAgfSxcXG4gICAgYWRkUmVjb3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgbmV3IHJlY29yZCcsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgZW50csOpZSdcXG4gICAgfSxcXG4gICAgdGFibGVOYW1lSW52YWxpZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhYmxlIG5hbWUgaXMgZW1wdHkgb3IgaW5jb3JyZWN0JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gZGUgbGEgdGFibGUgZXN0IHZpZGUgb3UgaW52YWxpZGUnXFxuICAgIH0sXFxuICAgIHRhYmxlRmllbGRzRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyB0YWJsZSBmaWVsZHMgYWRkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIGNoYW1wIHJlbnNlaWduw6knXFxuICAgIH0sXFxuICAgIHRhYmxlS2V5c0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8ga2V5IGZvdW5kIGZvciB0aGUgdGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBjbMOpIHJlbnNlaWduw6llJ1xcbiAgICB9LFxcbiAgICB0YWJsZUludmFsaWRWYWx1ZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlKHMpIHN1cHBsaWVkIGZvciB0aGUgdGFibGUgc3RydWN0dXJlJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIocykgaW52YWxpZGUocykgZm91cm5pZShzKSBwb3VyIGTDqWZpbmlyIGxhIHN0cnVjdHVyZSBkZSBsYSB0YWJsZSdcXG4gICAgfSxcXG4gICAgbm90aGluZ1RvU2F2ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vdGhpbmcgdG8gc2F2ZSBoZXJlIScsXFxuICAgICAgICAnZnItRlInOiAnUmllbiDDoCBlbnJlZ2lzdHJlciAhJ1xcbiAgICB9LFxcbiAgICBjb25maXJtUmVjb3JkRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXR0ZSBlbnRyw6llID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1BbGxSZWNvcmRzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBhbGwgcmVjb3JkcyBpbiB0aGlzIHRhYmxlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIHRvdXRlcyBsZXMgZG9ubsOpZXMgZGUgY2V0dGUgdGFibGUgPydcXG4gICAgfSxcXG4gICAgY29uZmlybURlbGV0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHRhYmxlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNldHRlIHRhYmxlID8nXFxuICAgIH0sXFxuICAgIGRvd25sb2FkV2lsbFN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIGRvd2xvYWQgd2lsbCBzdGFydCBhdXRvbWF0aWNhbGx5JyxcXG4gICAgICAgICdmci1GUic6ICdMZSB0w6lsw6ljaGFyZ2VtZW50IHZhIGTDqW1hcnJlciBhdXRvbWF0aXF1ZW1lbnQnXFxuICAgIH0sXFxuICAgIHJlY29yZHNQcm9jZXNzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd7bmJSZWNvcmRzfSByb3cocykgcHJvY2Vzc2VkLicsXFxuICAgICAgICAnZnItRlInOiAne25iUmVjb3Jkc30gZW5yZWdpc3RyZW1lbnQocykgdHJhaXTDqShzKS4nXFxuICAgIH0sXFxuICAgIG9rOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT0snLFxcbiAgICAgICAgJ2ZyLUZSJzogJ09LJ1xcbiAgICB9LFxcbiAgICBjb25maXJtQ2hhbmdlV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHZpZXcgYW5kIGxvb3NlIHRoZSBjaGFuZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnTGUgY29udGVudSBhIMOpdMOpIGNoYW5nw6kuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGNoYW5nZXIgZGUgdnVlIGV0IHBlcmRyZSBjZXMgY2hhbmdlbWVudHMgPydcXG4gICAgfSxcXG4gICAgY29uZmlybURlbGV0ZUl0ZW06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1SZWxvYWRXaXRob3V0U2F2aW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbG9hZCB0aGlzIGl0ZW0/JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBjb250ZW51IGEgw6l0w6kgY2hhbmfDqS4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVjaGFyZ2VyIGNldCDDqWzDqW1lbnQgPydcXG4gICAgfSxcXG4gICAgY29uZmlybVJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXByb2Nlc3MgdGhpcyBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVsYW5jZXIgY2V0IMOpbMOpbWVudCA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtU2F2ZUFuZFJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBoYXZlIG1hZGUgc29tZSBjaGFuZ2VzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc2F2ZSBBTkQgcmVwcm9jZXNzIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIGNvbnRlbnUgYSDDqXTDqSBjaGFuZ8OpLiDDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzYXV2ZWdhcmRlciBFVCByZWxhbmNlciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGl0ZW1SZXByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVwcm9jZXNzZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCByZWxhbmPDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlcHJvY2Vzc0ZhaWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCByZXByb2Nlc3NlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiByZWxhbmPDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSByZWxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IHJlY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbG9hZEZhaWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCByZWxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiByZWNoYXJnw6knXFxuICAgIH0sXFxuICAgIGl0ZW1TYXZlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gc2F2ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBlbnJlZ2lzdHLDqSdcXG4gICAgfSxcXG4gICAgaXRlbVNhdmVGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3Qgc2F2ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBub24gZW5yZWdpc3Ryw6knXFxuICAgIH0sXFxuICAgIGl0ZW1EZWxldGVGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiBzdXBwcmltw6knXFxuICAgIH0sXFxuICAgIHJlc2V0Q2hhbmdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc2V0IGNoYW5nZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXIgbGVzIGNoYW5nZW1lbnRzJ1xcbiAgICB9LFxcbiAgICBlcnJvck9jY3VyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbiBlcnJvciBvY2N1cmVkJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSdcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Db25maXJtVGV4dFN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvJyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pcidcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Db25maXJtVGV4dEVuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3RoaXMgd29yayBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnY2V0dGUgdMOiY2hlID8nXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybVRpdGxlTGFuZ3VhZ2VTc2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYW5ndWFnZSBzZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZSBkZXMgbGFuZ3VlcydcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVfYWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVfZWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZSBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnTWlzZSDDoCBqb3VyIGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1UaXRsZUZvcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZSBpbicsXFxuICAgICAgICAnZnItRlInOiAnRnJhbWUgZW4nXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybUhlbHBlckVtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmllbGQgbXVzdCBiZSBwcm92aWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnQ2UgY2hhbXAgZG9pdCDDqnRyZSByZW5zZWlnbsOpJ1xcbiAgICB9LFxcbiAgICBpZFVuaXF1ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgSUQgbXVzdCBiZSB1bmlxdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIElEIGRvaXQgw6p0cmUgdW5pcXVlJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1IZWxwZXJMYW5ndWFnZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGNhbiBzZWxlY3QgdGhlIGxhbmd1YWdlIHRvIGVkaXQgYW5kIHJlbW92ZSB0aGUgb25lIHlvdSBkb25cXFxcJ3Qgd2FudCBhbnltb3JlIGhlcmUuIFlvdSBtdXN0IGZpbGwgYXQgbGVhc3QgdGhlIEVOIGxhbmd1YWdlIHRvIGJlIGFibGUgdG8gc2F2ZSB5b3VyIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIHBvdXZleiBzw6lsZWN0aW9ubmVyIGxhIGxhbmd1ZSDDoCBlZGl0ZXIgZXQgc3VwcHJpbWVyIGNlbGxlcyBkb250IHZvdXMgblxcXFwnYXZleiBwbHVzIGJlc29pbiBpY2kuIFZvdXMgZGV2ZXogcmVuc2VpZ25lciBhdSBtb2lucyBsYSBsYW5ndWUgRU4gcG91ciBwb3V2b2lyIHNhdXZlZ2FyZGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtR3JpZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFuZ3VhZ2UgY2hvaWNlIChJU08gY29kZSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2l4IGRlIGxhIGxhbmd1ZSAoY29kZSBJU08pJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1HcmlkTGFuZ3VhZ2VzU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYW5ndWFnZXMgc2VsZWN0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZXMgc8OpbGVjdGlvbm7DqWVzJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJEYXRhTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFTicsXFxuICAgICAgICAnZnItRlInOiAnRlInXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlclRleHRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGZyYW1lIHRvIGRpc3BsYXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBmcmFtZSDDoCBhZmZpY2hlcidcXG4gICAgfSxcXG4gICAgZnJhbWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJhbWVzJyxcXG4gICAgICAgICdmci1GUic6ICdGcmFtZXMnXFxuICAgIH0sXFxuICAgIHVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VSTCcsXFxuICAgICAgICAnZnItRlInOiAnVVJMJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJCdXR0b25FZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlciBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgbGEgZnJhbWUnXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlckJ1dHRvblByZXZpZXc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmV2aWV3IGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBcGVyw6d1IGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICByZWZyZXNoRnJhbWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVmcmVzaCBmcmFtZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FjdHVhbGlzZXIgbGVzIGZyYW1lcydcXG4gICAgfSxcXG4gICAgYWRkRnJhbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgZnJhbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBjYW5jZWxGcmFtZUVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYW5jZWwgZnJhbWUgZWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnQW5udWxlciBsXFxcXCfDqWRpdGlvbiBkZSBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uQmFjazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHVybiB0byBIb21lIHBhZ2VzIGNvbmZpZ3VyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBwYWdlIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHBhZ2VzIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGRhdGFMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VOJyxcXG4gICAgICAgICdmci1GUic6ICdGUidcXG4gICAgfSxcXG4gICAgZnJhbWVwcmV2aWV3VGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZSBwcmV2aWV3JyxcXG4gICAgICAgICdmci1GUic6ICdBcGVyw6d1IGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZXByZXZpZXdUaXRsZVNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IHlvdXIgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb24gZGUgbGEgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICB1bmlxdWVJZFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSUQgbXVzdCBiZSB1bmlxdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xcXFxcJ0lEIGRvaXQgw6p0cmUgdW5pcXVlJ1xcbiAgICB9LFxcbiAgICBodHRwc1VybFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTXVzdCBiZSBhIHZhbGlkIEhUVFBTIFVSTCcsXFxuICAgICAgICAnZnItRlInOiAnVVJMIEhUVFBTIHZhbGlkZSByZXF1aXNlJ1xcbiAgICB9LFxcbiAgICBub01vZHVsZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gbW9kdWxlIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtb2R1bGUgc8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVIZWFkZXJMYXlvdXRUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpZ3VyZSBsYXlvdXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbmZpZ3VyYXRpb24gZGUgbGEgcHLDqXNlbnRhdGlvbidcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVNb2R1bGVzQXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBhdmFpbGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vZHVsZXMgZGlzcG9uaWJsZXMnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc1NlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnTW9kdWxlcyBzw6lsZWN0aW9ubsOpcydcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVCdXR0b25Db25maWd1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOpdHJhZ2UgZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvbkRlZmF1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXN0b3JlIGRlZmF1bHQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmUgcGFyIGTDqWZhdXQnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lQnV0dG9uU2VsZWN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IG1vZHVsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2l4IGRlcyBtb2R1bGVzJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvbkJhY2s6IHtcXG4gICAgICAgICdlbi1VUyc6ICdCYWNrIHRvIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUmV0b3VyIMOgIGxhIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVTZWxlY3RlZEVtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRpZG5cXFxcJ3Qgc2VsZWN0IGFueSBtb2R1bGVzJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogc8OpbGVjdGlvbm7DqSBhdWN1biBtb2R1bGUnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc0VtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gbW9kdWxlcyBhdmFpbGFibGUgaW4gdGhpcyBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtb2R1bGUgZGlzcG9uaWJsZSBkYW5zIGNldHRlIGNvbmZpZ3VyYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVQYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdQYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVOYXZpZ2F0ZURlZmF1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgSG9tZSBwYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJhdGlvbiBkZXMgcGFnZXMgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZU5hdmlnYXRlT3duOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3VzdG9taXplIHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdDb25maWd1cmVyIGNldHRlIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZVN0YXR1c0VtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRvblxcXFwndCBoYXZlIGFueSBtb2R1bGVzIHRvIGRpc3BsYXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgblxcXFwnYXZleiBhdWN1biBtb2R1bGUgw6AgYWZmaWNoZXInXFxuICAgIH0sXFxuICAgIGhvbWVTZWxlY3ROb25lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IHlvdXIgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdDaG9pc2lzc2V6IHZvdHJlIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0hlYWRlckF2YWlsYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vZHVsZXMgYXZhaWxhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIGRpc3BvbmlibGVzJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzSGVhZGVyU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNb2R1bGVzIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIHPDqWxlY3Rpb25uw6lzJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzSGVhZGVyQ29uZmlndXJhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpZ3VyZWQgSG9tZSBwYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnUGFnZXMgZFxcXFwnYWNjdWVpbCBjb25maWd1cmFibGVzJ1xcbiAgICB9LFxcbiAgICB0eXBlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0VkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2RpZmllciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NEdXBsaWNhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEdXBsaWNhdGUgdGhpcyBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0R1cGxpcXVlciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgdGhpcyBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NDb25maWd1cmVsYXlvdXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdQZXJzb25hbGlzYXRpb24gZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzU2F2ZXNlbGVjdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgeW91ciBzZWxlY3Rpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1NhdXZlZ2FyZGVyIHZvdHJlIHPDqWxlY3Rpb24nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NBZGREZWZhdWx0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzQnV0dG9uQmFjazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2sgdG8gSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzRnJhbWVzcGFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZyYW1lcyBtYW5hZ2VyJyxcXG4gICAgICAgICdmci1GUic6ICdHZXN0aW9ubmFpcmUgZGVzIEZyYW1lcydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc1RleHRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGlzIG5vIG1vZHVsZXMgYXZhaWxhYmxlIGluIHlvdXIgY3VycmVudCBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdJbCBuXFxcXCd5IGEgYXVjdW4gbW9kdWxlcyBkaXNwb25pYmxlcyBwb3VyIGNldHRlIGNvbmZpZ3VyYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NTZWxlY3REZWZhdWx0dmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgaG9tZScsXFxuICAgICAgICAnZnItRlInOiAnQ2hvaXNpc3NleiBsYSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NNb2RhbERlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSBhYm91dCBkZWxldGluZyB0aGlzIHNldHRpbmcgPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNldHRlIGNvbmZpZ3VyYXRpb24gPydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0Vycm9ySW5Vc2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBge25hbWV9YGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgY29uZmlndXJhdGlvbiwgY2hvb3NlIGFub3RoZXIgb25lIHBsZWFzZScsXFxuICAgICAgICAnZnItRlInOiAnTGUgbm9tIGB7bmFtZX1gIGVzdCBkw6lqw6AgdXRpbGlzw6kgcG91ciB1bmUgYXV0cmUgY29uZmlndXJhdGlvbiwgdmV1aWxsZXogZW4gY2hvaXNpciB1biBhdXRyZSdcXG4gICAgfSxcXG4gICAgYXBwTG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwIGxvYWRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FwcCBsYW5jw6llICEnXFxuICAgIH0sXFxuICAgIGludmFsaWRQYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgcGFzc3dvcmQgbXVzdCBiZSA4IHRvIDMyIGNoYXJhY3RlcnMgbG9uZyBhbmQgY29udGFpbnMgYXQgbGVhc3QgMSB1cHBlci9sb3dlciBjYXNlIGxldHRlciBhbmQgMSBudW1iZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG1vdCBkZSBwYXNzZSBkb2l0IGNvbnRlbmlyIGVudHJlIDggZXQgMzIgY2FyYWN0w6hyZXMgZXQgYXUgbW9pbnMgMSBtYWp1c2N1bGUvbWludXNjdWxlIGV0IDEgY2hpZmZyZSdcXG4gICAgfSxcXG4gICAgY2FyZFRlbXBsYXRlRnVsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgYXJlYSBjYW5ub3QgY29udGFpbiBtb3JlIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdDZXQgem9uZSBuZSBwZXV0IHBhcyBjb250ZW5pciBwbHVzIGRcXFxcJ8OpbMOpbWVudHMnXFxuICAgIH0sXFxuICAgIGludmFsaWRDb2xvckNvZGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb2xvciBjb2RlIGlzIGludmFsaWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvZGUgY291bGV1ciBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgbWFuZGF0b3J5VmFsdWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWFuZGF0b3J5IHZhbHVlKHMpOicsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyKHMpIG9ibGlnYXRvaXJlKHMpIDonXFxuICAgIH0sXFxuICAgIHBhc3N3b3JkVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bhc3N3b3JkIHVwZGF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vdCBkZSBwYXNzZSBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBkZXRhaWxzVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RldGFpbHMgdXBkYXRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXRhaWxzIG1pcyDDoCBqb3VyICEnXFxuICAgIH0sXFxuICAgIHNldHRpbmdzVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NldHRpbmdzIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOodHJlcyBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBhdmF0YXJVcGRhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXZhdGFyIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdBdmF0YXIgbWlzIMOgIGpvdXIgISdcXG4gICAgfSxcXG4gICAgdXNlckFzc29jaWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyIHN1Y2Nlc3NmdWxseSBhc3NvY2lhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIgYXNzb2Npw6kgYXZlYyBzdWNjw6hzICEnXFxuICAgIH0sXFxuICAgIHVzZXJBc3NvY2lhdGVSZXNlbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbWFpbCBzZW50JyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBlbnZvecOpICEnXFxuICAgIH0sXFxuICAgIHVzZXJEaXNhc3NvY2lhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBkaXNhc3NvY2lhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1ciBkw6lzYXNzb2Npw6knXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VEZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZShzKSBkZWxldGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlKHMpIHN1cHByaW3DqXMnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VSZXByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbnQgbWVzc2FnZShzKSBmb3IgcmVwcm9jZXNzaW5nJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlKHMpIMOgIHJlbGFuY2VyIGVudm95w6lzJ1xcbiAgICB9LFxcbiAgICB1c2VyQWxyZWFkeUV4aXN0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSB1c2VyIHlvdSB3YW50IHRvIGFzc29jaWF0ZSB0byB0aGlzIGluc3RhbmNlIGFscmVhZHkgZXhpc3RzIG9uIHRoZSBzeXN0ZW0gKGFuZCBtYXliZSBhbHJlYWR5IGFzc29jaWF0ZWQgdG8gb3RoZXIgaW5zdGFuY2VzKS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xcXFxcJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHZvdWxleiBhc3NvY2llciBzdXIgY2V0dGUgaW5zdGFuY2UgZXhpc3RlIGTDqWrDoCBzdXIgbGUgc3lzdMOobWUuIElsIGVzdCBwZXV0IMOqdHJlIMOpZ2FsZW1lbnQgZMOpasOgIGFzc29jacOpIMOgIGRcXFxcJ2F1dHJlcyBpbnN0YW5jZXMuJ1xcbiAgICB9LFxcbiAgICB1bmV4cGVjdGVkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQuIFBsZWFzZSB0cnkgYWdhaW4uJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZS4gTWVyY2kgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHJlZ2lzdHJhdGlvblVuYXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVnaXN0cmF0aW9uIGlzIG5vdCBhdmFpbGFibGUuJyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXOKAmWVucmVnaXN0cmVtZW50IG5cXFxcJ2VzdCBwYXMgZGlzcG9uaWJsZS4nXFxuICAgIH0sXFxuICAgIGZvcmdvdFBhc3N3b3JkVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnUsOpaW5pdGlhbGlzZXIgbW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICBmb3Jnb3RQYXNzd29yZE1lc3NhZ2VTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2VcXFxcJ3ZlIHNlbnQgeW91IGFuIGVtYWlsLiBDbGljayB0aGUgbGluayBpbiB0aGUgZW1haWwgdG8gcmVzZXQgeW91ciBwYXNzd29yZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vdXMgdm91cyBhdm9ucyBlbnZvecOpIHVuIGVtYWlsLiBDbGlxdWV6IHN1ciBsZSBsaWVuIGRhbnMgbFxcXFwnZW1haWwgcG91ciByw6lpbml0aWFsaXNlciB2b3RyZSBtb3QgZGUgcGFzc2UuJ1xcbiAgICB9LFxcbiAgICBydW5uaW5nSm9iczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1bm5pbmcgam9icycsXFxuICAgICAgICAnZnItRlInOiAnVMOiY2hlcyBlbiBjb3VycydcXG4gICAgfSxcXG4gICAgbm9SdW5uaW5nSm9iOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gcnVubmluZyBqb2InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSB0w6JjaGUgZW4gY291cnMnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpb3JpdHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ByaW9yaXTDqSdcXG4gICAgfSxcXG4gICAgY3JlYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6nDqSBsZSdcXG4gICAgfSxcXG4gICAgbGFzdFN0YXR1c01vZGlmaWNhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3Qgc3RhdHVzIG1vZGlmaWNhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBkdSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIHN0YWNrdHJhY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGFja3RyYWNlJyxcXG4gICAgICAgICdmci1GUic6ICdTdGFja3RyYWNlJ1xcbiAgICB9LFxcbiAgICBmaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVycydcXG4gICAgfSxcXG4gICAgdmlld0xhc3RNZXNzYWdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcgbGFzdCBtZXNzYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZGVybmllcnMgbWVzc2FnZXMnXFxuICAgIH0sXFxuICAgIHZpZXdTdGFja3RyYWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBzdGFja3RyYWNlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxhIHN0YWNrdHJhY2UnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5SGlnaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZ2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0hhdXRlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eU1lZGl1bToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lZGl1bScsXFxuICAgICAgICAnZnItRlInOiAnTW95ZW5uZSdcXG4gICAgfSxcXG4gICAgcHJpb3JpdHlMb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMb3cnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Jhc3NlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eVZlcnlMb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWZXJ5IGxvdycsXFxuICAgICAgICAnZnItRlInOiAnVHLDqHMgYmFzc2UnXFxuICAgIH0sXFxuICAgIGpvYlN0YXR1c0NvbXBsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29tcGxldGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlcm1pbsOpJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNRdWV1ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdRdWV1ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VuIGF0dGVudGUnXFxuICAgIH0sXFxuICAgIGpvYlN0YXR1c0luRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbiBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNSdW5uaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVubmluZycsXFxuICAgICAgICAnZnItRlInOiAnRW4gY291cnMnXFxuICAgIH0sXFxuICAgIG1hcmtBc1JlYWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYXJrIGFzIHJlYWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01hcnF1ZXIgY29tbWUgbHUnXFxuICAgIH0sXFxuICAgIGNhbmNlbEpvYkNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2FuY2VsIHRoaXMgam9iPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgYW5udWxlciBjZXR0ZSB0w6JjaGUgPydcXG4gICAgfSxcXG4gICAgcGFzc3dvcmRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB5b3VyIHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICByZW1lbWJlck1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnS2VlcCBtZSBzaWduZWQgaW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dhcmRlciBtYSBjb25uZXhpb24nXFxuICAgIH0sXFxuICAgIGZvcmdvdFBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRm9yZ290IHBhc3N3b3JkPycsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlIG91Ymxpw6kgPydcXG4gICAgfSxcXG4gICAgbm90UmVnaXN0ZXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vdCBhbHJlYWR5IHJlZ2lzdGVyZWQ/JyxcXG4gICAgICAgICdmci1GUic6ICdQYXMgZW5jb3JlIGVucmVnaXN0csOpKGUpID8nXFxuICAgIH0sXFxuICAgIGludmFsaWRMb2dpblVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgbG9naW4gVVJMIScsXFxuICAgICAgICAnZnItRlInOiAnVVJMIGRlIGxvZ2luIGludmFsaWRlICEnXFxuICAgIH0sXFxuICAgIHVzZXJBbHJlYWR5UmVnaXN0ZXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgdXNlciBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyIGTDqWrDoCBlbnJlZ2lzdHLDqSdcXG4gICAgfSxcXG4gICAgdXNlckFscmVhZHlSZWdpc3RlcmVkVGVzdFByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgb24gdGVzdCBvciBwcm9kdWN0aW9uIGVudmlyb25tZW50JyxcXG4gICAgICAgICdmci1GUic6ICcgc3VyIHVuIGRlcyBlbnZpcm9ubmVtZW50cyAodGVzdCBvdSBwcm9kdWN0aW9uKSdcXG4gICAgfSxcXG4gICAgc2VsZWN0RW52aXJvbm1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgZW52aXJvbm1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgZW52aXJvbm5lbWVudCdcXG4gICAgfSxcXG4gICAgdGVzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Rlc3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlc3QnXFxuICAgIH0sXFxuICAgIHByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9kdWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9kdWN0aW9uJ1xcbiAgICB9LFxcbiAgICB0ZXN0QW5kUHJvZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Rlc3QgJiBQcm9kdWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0ICYgUHJvZHVjdGlvbidcXG4gICAgfSxcXG4gICAgZW52RXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugc2VsZWN0IHRoZSByZWdpc3RyYXRpb24gZW52aXJvbm1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHPDqWxlY3Rpb25uZXIgc3VyIHF1ZWwgZW52aXJvbm5lbWVudCB2b3VzIHNvdWhhaXRleiB2b3VzIGVucmVnaXN0cmVyJ1xcbiAgICB9LFxcbiAgICBsb2dvdXRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9nZ2luZyBvdXQuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWNvbm5leGlvbi4uLidcXG4gICAgfSxcXG4gICAgbG9nb3V0U3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBoYXZlIGJlZW4gc2lnbmVkIG91dCcsXFxuICAgICAgICAnZnItRlInOiAnVm91cyDDqnRlcyBtYWludGVuYW50IGTDqWNvbm5lY3TDqSdcXG4gICAgfSxcXG4gICAgbG9nb3V0QnV0dG9uTG9naW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdHbyB0byBzaWduIGluIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FsbGVyIMOgIGxhIHBhZ2UgZGUgY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBzZXJ2ZXJDb25uZXhpb25GYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ291bGQgbm90IGNvbm5lY3QgdG8gdGhlIHNlcnZlciBmb3IgaW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb2Jsw6htZSBsb3JzIGRlIGxhIGNvbm5leGlvbiBzZXJ2ZXVyIHBvdXIgbFxcXFwnaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIHN0YWxlTG9naW5TZXNzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBsb2dpbiBzZXNzaW9uIGlzIGV4cGlyZWQuIFBsZWFzZSB3YWl0LCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVmcmVzaGVkIGluIDUgc2Vjb25kcy4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgc2Vzc2lvbiBkZSBjb25uZXhpb24gYSBleHBpcsOpLiBNZXJjaSBkZSBwYXRpZW50ZXIsIGNlbGxlLWNpIHNlcmEgYXV0b21hdGlxdWVtZW50IGFjdHVhbGlzw6llIGRhbnMgNSBzZWNvbmRlcy4uLidcXG4gICAgfSxcXG4gICAgd3JvbmdVc2VybmFtZVBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsIGV0L291IG1vdCBkZSBwYXNzZSBpbnZhbGlkZSAhJ1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYWJsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIHVzZXIgYWNjb3VudCBpcyBkaXNhYmxlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIGNvbXB0ZSB1dGlsaXNhdGV1ciBlc3QgZMOpc2FjdGl2w6kgISdcXG4gICAgfSxcXG4gICAgbWVtYmVyc2hpcEVleHBpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBjb21wYW55IE1lbWJlcnNoaXAgZXhwaXJlZCBvbiA8c3Ryb25nPntleHBpcnlEYXRlfTwvc3Ryb25nPi4gUGxlYXNlIGFzayB5b3VyIGNvbXBhbnnigJlzIENvbW11bml0eSBhZG1pbmlzdHJhdG9yPHN0cm9uZz57YWRtaW5Db250YWN0fTwvc3Ryb25nPiB0byByZW5ldyB0aGUgTWVtYmVyc2hpcC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIGFib25uZW1lbnQgYSBleHBpcsOpIGxlIDxzdHJvbmc+e2V4cGlyeURhdGV9PC9zdHJvbmc+LiBNZXJjaSBkZSBjb250YWN0ZXIgdm90cmUgYWRtaW5pc3RyYXRldXI8c3Ryb25nPnthZG1pbkNvbnRhY3R9PC9zdHJvbmc+IHBvdXIgcmVub3V2ZWxlciBsZSBzZXJ2aWNlLidcXG4gICAgfSxcXG4gICAgdW5zdWJzY3JpYmVGYWlsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb3VsZCBub3QgdW5zdWJzY3JpYmUgdGhpcyBhY2NvdW50IGZyb20gdGhpcyBpbnN0YW5jZS9jb21tdW5pdHkuJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9ibMOobWUgbG9ycyBkZSBsYSBkw6lzYXNzb2NpYXRpb24gZGUgY2UgY29tcHRlIHN1ciBjZXR0ZSBpbnN0YW5jZS9jb21tdW5hdXTDqS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkQjJhdXRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIEltcG9zc2libGUgdW5zdWJzY3JpcHRpb246IHRoZXJlIGlzIG5vIHN1YnNjcmlwdGlvbiBvbiBpbnN0YW5jZSAoKikuJyxcXG4gICAgICAgICdmci1GUic6ICcgSW1wb3NzaWJsZSBkZSBzZSBkw6lzaW5zY3JpcmU6IGlsIG5cXFxcJ3kgYSBwYXMgZFxcXFwnaW5zY3JpcHRpb24gcG9zc2libGUgc3VyIGxcXFxcJ2luc3RhbmNlICgqKS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkSW5zdGFuY2VOb3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJyBDb3VsZCBub3QgZmluZCBzZWxlY3RlZCBpbnN0YW5jZSBkZWZpbml0aW9uLiBQbGVhc2UgcmVsb2FkIHRoZSBwYWdlIGFuZCByZXRyeS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJyBJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGVzIHByb3ByacOpdMOpcyBkZSBsXFxcXCdpbnN0YW5jZSBzw6lsZWN0aW9ubsOpZS4gTWVyY2kgZGUgcmVjaGFyZ2VyIGxhIHBhZ2UgZXQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkTm9CYXNlVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIEludmFsaWQgYmFzZVVybCBmb3VuZCBmb3IgdGhlIGN1cnJlbnQgaW5zdGFuY2UuJyxcXG4gICAgICAgICdmci1GUic6ICcgVVJMIGRlIGxcXFxcJ2luc3RhbmNlIHPDqWxlY3Rpb25uw6llIGludmFsaWRlLidcXG4gICAgfSxcXG4gICAgdXNlck5vdEFzc29jaWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgVXNlciBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdGFuY2UuJyxcXG4gICAgICAgICdmci1GUic6ICcgVXRpbGlzYXRldXIgbm9uIGFzc29jacOpIMOgIGNldHRlIGluc3RhbmNlLidcXG4gICAgfSxcXG4gICAgdW5zdWJzY3JpYmVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBzdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIGZyb20gY29tbXVuaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZMOpc2Fzc29jacOpIGRlIGNldHRlIGluc3RhbmNlLidcXG4gICAgfSxcXG4gICAgbm9QZXJtaXNzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRvblxcXFwndCBoYXZlIGFjY2VzcyB0byBhbnkgaW5zdGFuY2UhIFBsZWFzZSBjaGVjayB5b3VyIGFjY291bnQgc2V0dGluZ3Mgd2l0aCB5b3VyIGFkbWluaXN0cmF0b3IuJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYXVjdW4gZHJvaXQgZW5yZWdpc3Ryw6kuIE1lcmNpIGRlIHbDqXJpZmllciBsZSBwYXJhbcOpdHJhZ2UgZGUgdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyIGF2ZWMgdm90cmUgYWRtaW5pc3RyYXRldXIuJ1xcbiAgICB9LFxcbiAgICBuZXdWZXJzaW9uQXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIHBvcnRhbCBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIGEgbmV3IHZlcnNpb24uIFBsZWFzZSBzYXZlIHlvdXIgY3VycmVudCB3b3JrLCB0aGUgdXBkYXRlIHdpbGwgYmUgZG9uZSBhdXRvbWF0aWNhbGx5IGluIDkwIHNlY29uZHMuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIHBvcnRhaWwgZG9pdCDDqnRyZSBtaXMgw6Agam91ciB2ZXJzIHVuIG5vdXZlbGxlIHZlcnNpb24uIE1lcmNpIGRlIHNhdXZlZ2FyZGVyIHZvcyB0cmF2YXV4IGVuIGNvdXJzLCBsYSBtaXNlIMOgIGpvdXIgc2UgZmVyYSBhdXRvbWF0aXF1ZW1lbnQgZGFucyA5MCBzZWNvbmRlcy4uLidcXG4gICAgfSxcXG4gICAgdXBkYXRlTm93OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBkYXRlIG5vdyEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01ldHRyZSDDoCBqb3VyIG1haW50ZW5hbnQgISdcXG4gICAgfSxcXG4gICAgbm90Rm91bmRUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc291cmNlIG5vdCBmb3VuZCcsXFxuICAgICAgICAnZnItRlInOiAnUmVzc291cmNlIGludHJvdXZhYmxlJ1xcbiAgICB9LFxcbiAgICBub3RGb3VuZE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgcmVxdWVzdGVkIHJlc291cmNlIHdhcyBub3QgZm91bmQuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSByZXNzb3VyY2UgZGVtYW5kw6llIGVzdCBpbnRyb3V2YWJsZS4nXFxuICAgIH0sXFxuICAgIHNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2V0dGluZ3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmVzJ1xcbiAgICB9LFxcbiAgICBvdGhlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPdGhlcnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1dHJlcydcXG4gICAgfSxcXG4gICAgZGV2ZWxvcG1lbnRUb29sczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RldmVsb3BtZW50IHRvb2xzJyxcXG4gICAgICAgICdmci1GUic6ICdPdXRpbHMgZGUgZMOpdmVsb3BwZW1lbnQnXFxuICAgIH0sXFxuICAgIGNvZGVFZGl0b3JDb25maWd1cmF0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29kZSBlZGl0b3IgY29uZmlndXJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJhdGlvbiBkZXMgw6lkaXRldXJzIGRlIGNvZGUnXFxuICAgIH0sXFxuICAgIG5ld1Bhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTmV3IHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdOb3V2ZWF1IG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgY29uZmlybVBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29uZmlybSBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlybWVyIG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcmVmcmVzaFBlcm1pc3Npb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPGRpdj5SZWZyZXNoPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+UmFmcmFcXFxcdTAwRUVjaGlyPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiXFxuICAgIH0sXFxuICAgIGN0eVVuc3Vic2NyaWJlOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPGRpdj5VbnN1YnNjcmliZSBmcm9tPGJyIC8+dGhpcyBDb21tdW5pdHk8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+TWUgZFxcXFx1MDBFOXNpbnNjcmlyZTxiciAvPmRlIGNldHRlIENvbW11bmF1dFxcXFx1MDBFOTwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgZGVsZXRlQWNjb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+RGVsZXRlPGJyIC8+bXkgYWNjb3VudDwvZGl2PlxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiPGRpdj5TdXBwcmltZXIgbW9uPGJyIC8+Y29tcHRlIHV0aWxpc2F0ZXVyPC9kaXY+XFxcIlxcbiAgICB9LFxcbiAgICBleHBvcnRQZXJtaXNzaW9uczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+RXhwb3J0PGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+RXhwb3J0ZXI8YnIgLz5wZXJtaXNzaW9uczwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgbWVzc2FnZXNBdXRvcmVmcmVzaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F1dG8tcmVmcmVzaCBtZXNzYWdlcyBsaXN0IGRlbGF5JyxcXG4gICAgICAgICdmci1GUic6ICdEw6lsYWkgZGUgcmFmcmHDrmNoaXNzZW1lbnQgZGUgbGEgbGlzdGUgZGVzIG1lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICBkaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ2Rpc2FibGVkJyxcXG4gICAgICAgICdmci1GUic6ICdkw6lzYWN0aXbDqSdcXG4gICAgfSxcXG4gICAgcHJlZmVycmVkTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmVmZXJyZWQgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZSBwcsOpZsOpcsOpZSdcXG4gICAgfSxcXG4gICAgdXNlckRlbGV0ZUFjY291bnRDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPHA+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB5b3UgYWNjb3VudD88L3A+XFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCI8cD5cXFxcdTAwQ0F0ZXMtdm91cyBzXFxcXHUwMEZCcihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIgPzwvcD5cXFwiXFxuICAgIH0sXFxuICAgIHVzZXJEZWxldGVBY2NvdW50Q29uZmlybVN1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxwPlxcXFxuICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XFxcXFxcXCJkYW5nZXItY29sb3IgYm90dG9tLW1hcmdpbiB0ZXh0LXh4bGFyZ2VcXFxcXFxcIj5XQVJOSU5HPC9oMz5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5BcmUgeW91IDxzdHJvbmc+UkVBTExZPC9zdHJvbmc+IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHlvdSBhY2NvdW50PyBZb3Ugd29uJ3QgYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHBvcnRhbCBhbnltb3JlLi4uPC9zcGFuPlxcXFxuICAgICAgICAgICAgPC9wPlxcXFxuICAgICAgICBcXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIlxcXFxuICAgICAgICAgICAgPHA+XFxcXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cXFxcXFxcImRhbmdlci1jb2xvciBib3R0b20tbWFyZ2luIHRleHQteHhsYXJnZVxcXFxcXFwiPkFUVEVOVElPTjwvaDM+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+XFxcXHUwMENBdGVzLXZvdXMgPHN0cm9uZz5WUkFJTUVOVDwvc3Ryb25nPiBzXFxcXHUwMEZCcihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIgPyBWb3VzIG5lIHBvdXJyZXogcGx1cyBhY2NcXFxcdTAwRTlkZXIgYXUgcG9ydGFpbC4uLjwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvcD5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICB1c2VyVW5zdWJzY3JpYmVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBjb21tdW5pdHk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgdm90cmUgY29tcHRlIGluc2NyaXB0aW9uIMOgIGNldHRlIGNvbW11bmF1dMOpID8nXFxuICAgIH0sXFxuICAgIHNldHBhc3N3b3JkVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXQgYSBuZXcgcGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6llciB1biBub3V2ZWF1IG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcGFzc3dvcmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICBzaWduSW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaWduIGluJyxcXG4gICAgICAgICdmci1GUic6ICdTZSBjb25uZWN0ZXInXFxuICAgIH0sXFxuICAgIHNldHBhc3N3b3JkU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgcGFzc3dvcmQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNldC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIG1vdCBkZSBwYXNzZSBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkUGFzc3dvcmRDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFzc3dvcmRzIGFyZSBub3QgaWRlbnRpY2FsJyxcXG4gICAgICAgICdmci1GUic6ICdMZXMgMiBtb3RzIGRlIHBhc3NlIG5lIHNvbnQgcGFzIGlkZW50aXF1ZXMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1NdWx0aXBsZU1lc3NhZ2VzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgbWVzc2FnZXM/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1NdWx0aXBsZVJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXByb2Nlc3MgdGhlIHNlbGVjdGVkIG1lc3NhZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVsYW5jZXIgbGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzID8nXFxuICAgIH0sXFxuICAgIG11bHRpcGxlUmVwcm9jZXNzU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lc3NhZ2VzIHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlcyByZWxhbmPDqXMnXFxuICAgIH0sXFxuICAgIG11bHRpcGxlUmVwcm9jZXNzRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ21lc3NhZ2Uocykgbm90IHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICdtZXNzYWdlKHMpIG5vbiByZWxhbmPDqShzKSdcXG4gICAgfSxcXG4gICAgZmV0Y2htc2dGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZSBjYW5ub3QgYmUgbG9hZGVkJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtZXNzYWdlIG5lIHBldXQgw6p0cmUgY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgbWVzc2FnZXNEZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZXMgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVzc2FnZXMgc3VwcHJpbcOpcydcXG4gICAgfSxcXG4gICAgbWVzc2FnZVNhdmVEaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+RG8geW91IHdhbnQgdG8gc2F2ZSB5b3VyIG1vZGlmaWNhdGlvbnM/PC9zcGFuPjxici8+XFxcXG4gICAgICAgICAgICAgICAgPGVtIGNsYXNzPVxcXFxcXFwidGV4dC1tZWRpdW1cXFxcXFxcIj5Zb3VyIHByZWZlcmVuY2VzIChwcmVzZW5jZSwgd2lkdGggYW5kIG9yZGVyIG9mIGNvbHVtbnMsIGFjdGlvbiByZWxhdGVkIHRvIFxcXFx1MjAxQ1NlYXJjaFxcXFx1MjAxRCBhbmQgXFxcXHUyMDFDUmVzZXRcXFxcdTIwMUQgYnV0dG9ucy4uLikgd2lsbCBiZSBzYXZlZCBpbiB5b3VyIHVzZXIgcHJvZmlsZS4gTm90ZSB0aGF0IHlvdSBjYW4gc2F2ZSBzcGVjaWZpYyBzZXR0aW5ncyBmb3IgZWFjaCBkaXNwbGF5IG1vZGUgKG1vYmlsZSwgbWVkaXVtIGFuZCBsYXJnZSBzY3JlZW4pLjwvZW0+XFxcXG4gICAgICAgICAgICA8L2Rpdj5cXFxcbiAgICAgICAgXFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+Vm91bGV6LXZvdXMgc2F1dmVnYXJkZXIgdm9zIG1vZGlmaWNhdGlvbnMgPzwvc3Bhbj48YnIvPlxcXFxuICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cXFxcXFxcInRleHQtbWVkaXVtXFxcXFxcXCI+Vm9zIHByXFxcXHUwMEU5ZlxcXFx1MDBFOXJlbmNlcyBkJ2FmZmljaGFnZSAocHJcXFxcdTAwRTlzZW5jZSwgbGFyZ2V1ciBldCBvcmRyZSBkZXMgY29sb25uZXMsIGFjdGlvbiBkZXMgYm91dG9ucyBcXFxcdTIwMUNSZWNoZXJjaGVyXFxcXHUyMDFEIGV0IFxcXFx1MjAxQ1JcXFxcdTAwRTlpbml0aWFsaXNlclxcXFx1MjAxRC4uLikgc2Vyb250IGVucmVnaXN0clxcXFx1MDBFOWVzIGRhbnMgdm90cmUgcHJvZmlsIHV0aWxpc2F0ZXVyLiBWb3VzIHBvdXZleiBzYXV2ZWdhcmRlciBkZXMgcGFyYW1cXFxcdTAwRTh0cmVzIHNwXFxcXHUwMEU5Y2lmaXF1ZXMgcG91ciBjaGFxdWUgbW9kZSBkJ2FmZmljaGFnZSAobW9iaWxlLCBtb3llbiBldCBncmFuZCBcXFxcdTAwRTljcmFuKS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCJcXG4gICAgfSxcXG4gICAgbXVsdGlwbGVEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnbWVzc2FnZShzKSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnbWVzc2FnZShzKSBub24gc3VwcHJpbcOpcydcXG4gICAgfSxcXG4gICAgZmV0Y2hkb2NGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRG9jdW1lbnQgY2Fubm90IGJlIGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGUgZG9jdW1lbnQgbmUgcGV1dCDDqnRyZSBjaGFyZ8OpJ1xcbiAgICB9LFxcbiAgICBjb25maXJtQ2xvc2VNZXNzYWdlU3VibWl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIHRoaXMgbWVzc2FnZSBzdWJtaXNzaW9uIHNlc3Npb24/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciB0ZXJtaW5lciBjZXR0ZSBzZXNzaW9uIGRlIGNyw6lhdGlvbiBkZSBtZXNzYWdlID8nXFxuICAgIH0sXFxuICAgIG5vVmlld0FjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhY2Nlc3MgdG8gYW55IHZpZXcgb24gdGhpcyBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYWNjw6hzIMOgIGF1Y3VuZSB2dWUgc3VyIGNldHRlIHBhZ2UnXFxuICAgIH0sXFxuICAgIG5vUmVzdWx0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlc3VsdHMgZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIHLDqXN1bHRhdCdcXG4gICAgfSxcXG4gICAgcmVmcmVzaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZnJlc2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhZnJhw65jaGlyJ1xcbiAgICB9LFxcbiAgICByZXByb2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXByb2Nlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbGFuY2VyJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZU1zZ1JlcHJvY2Vzc0ltcG9zc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmUgb3IgbW9yZSBvZiB0aGUgc2VsZWN0ZWQgbWVzc2FnZXMgY2Fubm90IGJlIHJlcHJvY2Vzc2VkLiBQbGVhc2UgY2hlY2sgeW91ciBzZWxlY3Rpb24gYW5kIHJldHJ5IScsXFxuICAgICAgICAnZnItRlInOiAnVW4gb3UgcGx1c2lldXJzIGRlcyBtZXNzYWdlcyBzw6lsZWN0aW9ubsOpcyBuZSBwZXV2ZW50IHBhcyDDqnRyZSByZWxhbmPDqXMuIE1lcmNpIGRlIHZlcmlmaWVyIHZvdHJlIHPDqWxlY3Rpb24gZXQgZGUgcsOpZXNzYXllciAhJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZU1zZ0RlbGV0ZUltcG9zc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmUgb3IgbW9yZSBvZiB0aGUgc2VsZWN0ZWQgbWVzc2FnZXMgY2Fubm90IGJlIGRlbGV0ZWQuIFBsZWFzZSBjaGVjayB5b3VyIHNlbGVjdGlvbiBhbmQgcmV0cnkhJyxcXG4gICAgICAgICdmci1GUic6ICdVbiBvdSBwbHVzaWV1cnMgZGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzIG5lIHBldXZlbnQgcGFzIMOqdHJlIHN1cHByaW3DqXMuIE1lcmNpIGRlIHZlcmlmaWVyIHZvdHJlIHPDqWxlY3Rpb24gZXQgZGUgcsOpZXNzYXllciAhJ1xcbiAgICB9LFxcbiAgICBjb25maXJtTm9kZURlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBub2RlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIG5vZXVkID8nXFxuICAgIH0sXFxuICAgIHJvb3RUcmVlRGlzcGxheToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jvb3QgdHJlZSBkaXNwbGF5ZWQ6JyxcXG4gICAgICAgICdmci1GUic6ICdBcmJyZSByYWNpbmUgYWZmaWNow6kgOidcXG4gICAgfSxcXG4gICAgb3JnYW5pc2F0aW9uc0NvbmZpcm1EZWxldGVMYXN0UG9zaXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGlzIHRoZSBvbmx5IG9yZ2FuaXphdGlvbiBwb3NpdGlvbiBoZWxkIGJ5IHRoaXMgdXNlci4gSWYgeW91IGRlbGV0ZSBpdCwgeW91IHdvblxcXFwndCBiZSBhYmxlIHRvIHJlLWFzc2lnbiB0aGlzIHVzZXIgYW55d2hlcmUgaW4gdGhlIHRyZWUuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjb21wbGV0ZWx5IHJlbW92ZSB0aGlzIHVzZXIgZnJvbSB0aGUgb3JnYW5pemF0aW9uPycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyDDqnRlcyBzdXIgbGUgcG9pbnQgZGUgc3VwcHJpbWVyIGxhIHNldWxlIHBvc2l0aW9uIHRlbnVlIHBhciBjZXQgdXRpbGlzYXRldXIgZGFucyBsXFxcXCdvcmdhbmlzYXRpb24uIFNpIHZvdXMgbGEgc3VwcHJpbWV6LCB2b3VzIG5lIHBvdXJyZXogcGx1cyBkdSB0b3V0IHLDqWFzc2lnbmVyIGNldCB1dGlsaXNhdGV1ciBkYW5zIGxcXFxcJ2FyYnJlLiDDinRlcy12b3VzIGNlcnRhaW4gZGUgdm91bG9pciBzdXBwcmltZXIgY29tcGzDqHRlbWVudCBjZXQgdXRpbGlzYXRldXIgZGUgbFxcXFwnb3JnYW5pc2F0aW9uID8nXFxuICAgIH0sXFxuICAgIG5vQXZhaWxhYmxlUmVwb3J0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlcG9ydHMgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gcmFwcG9ydCBkaXNwb25pYmxlLidcXG4gICAgfSxcXG4gICAgc2VsZWN0UmVwb3J0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgcmVwb3J0JyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuIHJhcHBvcnQnXFxuICAgIH0sXFxuICAgIHByaW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcHJpbWVyJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlQ29uZmlybUxlYXZlV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBsZWF2ZSB0aGlzIHBhZ2UgYW5kIGxvc2UgeW91ciB1cGRhdGVzPycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBhdmV6IGVmZmVjdHXDqSBkZXMgbW9kaWZpY2F0aW9ucyBzYW5zIGxlcyBlbnJlZ2lzdHJlci4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcXVpdHRlciBjZXR0ZSBwYWdlIGV0IHBlcmRyZSBsZXMgZG9ubsOpZXMgbm9uIHNhdXZlZ2FyZMOpZXMgPydcXG4gICAgfSxcXG4gICAgc2VydmljZVZlcnNpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlIHZlcnNpb246JyxcXG4gICAgICAgICdmci1GUic6ICdWZXJzaW9uIGR1IHNlcnZpY2UgOidcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25Db21wbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ09wZXJhdGlvbiBjb21wbGV0ZScsXFxuICAgICAgICAnZnItRlInOiAnT3DDqXJhdGlvbiB0ZXJtaW7DqWUnXFxuICAgIH0sXFxuICAgIGJhdGNoT3BlcmF0aW9uUHJvY2Vzc2VkSXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9jZXNzZWQgaXRlbXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudHMgdHJhaXTDqXMnXFxuICAgIH0sXFxuICAgIGVycm9yczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Vycm9ycycsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVycydcXG4gICAgfSxcXG4gICAgc3VjY2Vzc2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2Vzc2VzJyxcXG4gICAgICAgICdmci1GUic6ICdSw6l1c3NpcydcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25BbGxHb29kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWxsIGl0ZW1zIGhhdmUgYmVlbiBwcm9jZXNzZWQuIEV2ZXJ5dGhpbmcgd2VudCB3ZWxsIScsXFxuICAgICAgICAnZnItRlInOiAnVG91cyBsZXMgw6lsw6ltZW50cyBvbnQgw6l0w6kgdHJhaXTDqXMgISdcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25FcnJvcnNPY2N1cmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU29tZSBlcnJvcnMgb2NjdXJlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXMgZXJyZXVycyBzb250IHN1cnZlbnVlcyBsb3JzIGRlcyB0cmFpdGVtZW50cy4nXFxuICAgIH0sXFxuICAgIGl0ZW1JZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEIMOpbMOpbWVudCdcXG4gICAgfSxcXG4gICAgc3RhdHVzQ29kZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N0YXR1cyBjb2RlJyxcXG4gICAgICAgICdmci1GUic6ICdDb2RlIEhUVFAnXFxuICAgIH0sXFxuICAgIGVycm9yTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Vycm9yIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2UgZFxcXFwnZXJyZXVyJ1xcbiAgICB9LFxcbiAgICB3b3JrSXRlbVByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dvcmsgaXRlbSBwcm9jZXNzZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdUw6JjaGUgdHJhaXTDqWUgISdcXG4gICAgfSxcXG4gICAgdmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyJ1xcbiAgICB9LFxcbiAgICBuYW1lQWxyZWFkeVVzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIG5hbWUgaXMgYWxyZWFkeSB1c2VkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2Ugbm9tIGVzdCBkw6lqw6AgdXRpbGlzw6kuJ1xcbiAgICB9LFxcbiAgICB1bmtub3duOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVW5rbm93bicsXFxuICAgICAgICAnZnItRlInOiAnSW5jb25udSdcXG4gICAgfSxcXG4gICAgc2VydmljZVN0YXR1c0NvbmZpZ0NoYW5nZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gaGFzIGNoYW5nZWQgc2luY2UgbGFzdCBzdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnTGEgY29uZmlndXJhdGlvbiBkdSBzZXJ2aWNlIGEgY2hhbmfDqSBkZXB1aXMgbGUgZGVybmllciBkw6ltYXJyYWdlJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlU3RhdHVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VydmljZSBzdGF0dXM6JyxcXG4gICAgICAgICdmci1GUic6ICfDiXRhdCBkdSBzZXJ2aWNlIDonXFxuICAgIH1cXG59O1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI3MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5leHBvcnRzLkFWQUlMQUJMRV9MQU5HVUFHRVMgPSBbXFxuICAgIHtcXG4gICAgICAgIGxhYmVsOiAnRU4nLFxcbiAgICAgICAgbG9jYWxlOiAnZW4tVVMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhYmVsOiAnRlInLFxcbiAgICAgICAgbG9jYWxlOiAnZnItRlInXFxuICAgIH1cXG5dO1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvbmZpZy5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5mbGFnc0RlZiA9IHtcXG4gICAgJ2V1bnJlYWQnOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtZW52ZWxvcGUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZm9udC1jb2xvci1saWdodGVyJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdVbnJlYWQnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdOb24gbHUnXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgICdkd2FybmluZyc6IHtcXG4gICAgICAgIGljb25TaGFwZTogJ2ZhcyBmYS1leGNsYW1hdGlvbi10cmlhbmdsZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdkYW5nZXItY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ1dhcm5pbmcnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdBdHRlbnRpb24nXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgICdjaW1wb3J0YW50Jzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLXN0YXInLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnd2FybmluZy1jb2xvcicsXFxuICAgICAgICBmbGFnTGFiZWw6IHtcXG4gICAgICAgICAgICAnZW4tVVMnOiAnSW1wb3J0YW50JyxcXG4gICAgICAgICAgICAnZnItRlInOiAnSW1wb3J0YW50J1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYmluZm8nOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtc3F1YXJlJyxcXG4gICAgICAgIGljb25Db2xvcjogJ2luZm8tY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ0luZm8nLFxcbiAgICAgICAgICAgICdmci1GUic6ICdJbmZvJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYW9rJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWNpcmNsZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdwcmltYXJ5LWNvbG9yJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdPSycsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ09LJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYWF2aXNpYmxlJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWFyY2hpdmUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZm9udC1jb2xvci1saWdodGVyJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdBcmNoaXZlZCcsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ0FyY2hpdsOpJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIGludmVyc2VkOiB0cnVlLFxcbiAgICAgICAgZGVmYXVsdFNlYXJjaFN0YXRlOiB0cnVlXFxuICAgIH0sXFxufTtcXG5leHBvcnRzLmxhbmd1YWdlSXNvID0gW1xcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBZmFyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBQicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBYmtoYXonXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F2ZXN0YW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FGJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0FmcmlrYWFucydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQWthbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQU0nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQW1oYXJpYydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQU4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJhZ29uZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBcmFiaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Fzc2FtZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBdmFyaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F5bWFyYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQVonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXplcmJhaWphbmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jhc2hraXInXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0JlbGFydXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0J1bGdhcmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQkgnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQmloYXJpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCaXNsYW1hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCYW1iYXJhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCZW5nYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaWJldGFuIFN0YW5kYXJkJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCcmV0b24nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jvc25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NhdGFsYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoZWNoZW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoYW1vcnJvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDb3JzaWNhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ1InLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3JlZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3plY2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09sZCBDaHVyY2ggU2xhdm9uaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NodXZhc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dlbHNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdEQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdEYW5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0RFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dlcm1hbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRFYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRGl2ZWhpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdEWicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdEem9uZ2toYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRUUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXdlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdFTCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdFd2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VuZ2xpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VzcGVyYW50bydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRVMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3BhbmlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRVQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXN0b25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jhc3F1ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGVyc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRnVsYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmlubmlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmlqaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdGYXJvZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdGcmVuY2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0ZZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dlc3Rlcm4gRnJpc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR0EnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSXJpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Njb3R0aXNoIEdhZWxpYydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnR2FsaWNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0d1YXJhbsOtJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdHVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHdWphcmF0aSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR1YnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFueCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSGF1c2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hlYnJldydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSGluZGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hpcmkgTW90dSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSFInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3JvYXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hhaXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0h1bmdhcmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSFknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJtZW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0haJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hlcmVybydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSW50ZXJsaW5ndWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0luZG9uZXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludGVybGluZ3VlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJRycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJZ2JvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOdW9zdSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSW51cGlhcSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSU8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSWRvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJY2VsYW5kaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0l0YWxpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludWt0aXR1dCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSmFwYW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0pWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0phdmFuZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHZW9yZ2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0cnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS29uZ28nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tpa3V5dSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0onLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS3dhbnlhbWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0themFraCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FsYWFsbGlzdXQnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tNJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tobWVyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLYW5uYWRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLb3JlYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0thbnVyaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FzaG1pcmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t1cmRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tvbWknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Nvcm5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t5cmd5eidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGF0aW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xCJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0x1eGVtYm91cmdpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dhbmRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaW1idXJnaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaW5nYWxhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMYW8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0xpdGh1YW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0x1YmEtS2F0YW5nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTFYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGF0dmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsYWdhc3knXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01IJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hcnNoYWxsZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNxIFvcmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01LJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hY2Vkb25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01MJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hbGF5YWxhbSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTU4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTW9uZ29saWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYXJhdGhpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYWxheeKAjidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsdGVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQnVybWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTmF1cnUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05CJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcndlZ2lhbiBCb2ttw6VsJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J0aGVybiBOZGViZWxlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOZXBhbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05HJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05kb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRHV0Y2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05OJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcndlZ2lhbiBOeW5vcnNrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdOTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J3ZWdpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05SJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvdXRoZXJuIE5kZWJlbGUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05WJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05hdmFqbydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTlknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ2hpY2hld2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09DJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09jY2l0YW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09KJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09qaWJ3ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnT00nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnT3JvbW8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09SJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09yaXlhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdPUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdPc3NldGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGFuamFiaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUMSBbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1BMJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1BvbGlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUFMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGFzaHRvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdQVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdQb3J0dWd1ZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdRVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdRdWVjaHVhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdSb21hbnNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLaXJ1bmRpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdSb21hbmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUlUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUnVzc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUlcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2lueWFyd2FuZGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NhbnNrcml0J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTQycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTYXJkaW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NpbmRoaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0UnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTm9ydGhlcm4gU2FtaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0cnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2FuZ28nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NpbmhhbGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Nsb3ZhaydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2xvdmVuZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU00nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2Ftb2FuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTaG9uYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU08nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU29tYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTUScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBbGJhbmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1InLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2VyYmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3dhdGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvdXRoZXJuIFNvdGhvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTdW5kYW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3ZWRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3YWhpbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhbWlsJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdURScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUZWx1Z3UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhamlrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaGFpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaWdyaW55YSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHVya21lbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGFnYWxvZydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVE4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHN3YW5hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHVya2lzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHNvbmdhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYXRhcidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHdpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUWScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYWhpdGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVXlnaHVyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdVSycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdVa3JhaW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1VyZHUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VaJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1V6YmVrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdWRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdWZW5kYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVmlldG5hbWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVk8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVm9sYXDDvGsnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1dBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dhbGxvb24nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1dPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dvbG9mJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdYSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdYaG9zYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWUknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWWlkZGlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWU8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWW9ydWJhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdaQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdaaHVhbmcnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1pIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoaW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1pVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1p1bHUnXFxuICAgIH1cXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzSXNvID0gW1xcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQURcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFuZG9ycmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVW5pdGVkIEFyYWIgRW1pcmF0ZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBRlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWZnaGFuaXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW50aWd1YSBhbmQgQmFyYnVkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbmd1aWxsYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbGJhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFybWVuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW5nb2xhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFudGFyY3RpY2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXJnZW50aW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFtZXJpY2FuIFNhbW9hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkF1c3RyaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXVzdHJhbGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFydWJhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVhcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIsOFbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBemVyYmFpamFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvc25pYSBhbmQgSGVyemVnb3ZpbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFyYmFkb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFuZ2xhZGVzaFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCZWxnaXVtXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJ1cmtpbmEgRmFzb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCdWxnYXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCYWhyYWluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQklcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJ1cnVuZGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVuaW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgQmFydGjDqWxlbXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVybXVkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcnVuZWlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQm9saXZpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJRXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb25haXJlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJyYXppbFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCYWhhbWFzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJodXRhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJWXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb3V2ZXQgSXNsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvdHN3YW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQllcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJlbGFydXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVsaXplXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhbmFkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb2NvcyBbS2VlbGluZ10gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUmVwdWJsaWMgb2YgdGhlIENvbmdvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlN3aXR6ZXJsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkl2b3J5IENvYXN0XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0tcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNvb2sgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGlsZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYW1lcm9vblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGluYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb2xvbWJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb3N0YSBSaWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1VcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN1YmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2FwZSBWZXJkZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDdXJhY2FvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNocmlzdG1hcyBJc2xhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ3lwcnVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1pcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN6ZWNoIFJlcHVibGljXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiREVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdlcm1hbnlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJESlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGppYm91dGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJES1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGVubWFya1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEb21pbmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEb21pbmljYW4gUmVwdWJsaWNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJEWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWxnZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFY3VhZG9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRUVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVzdG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRWd5cHRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiV2VzdGVybiBTYWhhcmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRXJpdHJlYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTcGFpblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFdGhpb3BpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGaW5sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRkpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZpamlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRmFsa2xhbmQgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNaWNyb25lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZhcm9lIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJhbmNlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdhYm9uXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVuaXRlZCBLaW5nZG9tXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0RcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdyZW5hZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR2VvcmdpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGcmVuY2ggR3VpYW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1ZXJuc2V5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdoYW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdpYnJhbHRhclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHcmVlbmxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR2FtYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR05cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1aW5lYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWFkZWxvdXBlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVxdWF0b3JpYWwgR3VpbmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdyZWVjZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWF0ZW1hbGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR3VhbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWluZWEtQmlzc2F1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1eWFuYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkhLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJIb25nIEtvbmdcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJITVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSGVhcmQgSXNsYW5kIGFuZCBNY0RvbmFsZCBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkhvbmR1cmFzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSFJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNyb2F0aWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSGFpdGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSHVuZ2FyeVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJbmRvbmVzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXJlbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJc3JhZWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXNsZSBvZiBNYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSW5kaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIklyYXFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXJhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJY2VsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkl0YWx5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkplcnNleVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKYW1haWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkpvcmRhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKYXBhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLZW55YVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLeXJneXpzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhbWJvZGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIktpcmliYXRpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS01cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNvbW9yb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJLTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgS2l0dHMgYW5kIE5ldmlzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1BcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5vcnRoIEtvcmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIEtvcmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkt1d2FpdFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYXltYW4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLYXpha2hzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxhb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGViYW5vblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBMdWNpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWVjaHRlbnN0ZWluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNyaSBMYW5rYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWJlcmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxlc290aG9cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGl0aHVhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkx1eGVtYm91cmdcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGF0dmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFlcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxpYnlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vcm9jY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9uYWNvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTURcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbGRvdmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9udGVuZWdyb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1GXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBNYXJ0aW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFkYWdhc2NhclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1IXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXJzaGFsbCBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hY2Vkb25pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1MXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWxpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk15YW5tYXIgW0J1cm1hXVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1OXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNb25nb2xpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1PXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWNhb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1QXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNUVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFydGluaXF1ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1SXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXVyaXRhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbnRzZXJyYXRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsdGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWF1cml0aXVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGRpdmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGF3aVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1YXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNZXhpY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsYXlzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW96YW1iaXF1ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5BXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOYW1pYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTkNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5ldyBDYWxlZG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJORVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmlnZXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJORlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9yZm9sayBJc2xhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmlnZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5JXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOaWNhcmFndWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmV0aGVybGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9yd2F5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlBcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5lcGFsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5hdXJ1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5pdWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmV3IFplYWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJPTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiT21hblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYW5hbWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGVydVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGcmVuY2ggUG9seW5lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUEdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBhcHVhIE5ldyBHdWluZWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGhpbGlwcGluZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUG9sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUE1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IFBpZXJyZSBhbmQgTWlxdWVsb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGl0Y2Fpcm4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQdWVydG8gUmljb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYWxlc3RpbmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUG9ydHVnYWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFsYXVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFyYWd1YXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJRQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUWF0YXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUsOpdW5pb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJST1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUm9tYW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlJTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZXJiaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUnVzc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlJ3YW5kYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYXVkaSBBcmFiaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU29sb21vbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNleWNoZWxsZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3VkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3dlZGVuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNpbmdhcG9yZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBIZWxlbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2xvdmVuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTbG92YWtpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTaWVycmEgTGVvbmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FuIE1hcmlub1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZW5lZ2FsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU09cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvbWFsaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3VyaW5hbWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU291dGggU3VkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU8OjbyBUb23DqSBhbmQgUHLDrW5jaXBlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVsIFNhbHZhZG9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNpbnQgTWFhcnRlblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTeXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTd2F6aWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVERcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNoYWRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJURlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVEdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRvZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGhhaWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGFqaWtpc3RhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUb2tlbGF1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVExcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVhc3QgVGltb3JcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya21lbmlzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlR1bmlzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVG9uZ2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya2V5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRyaW5pZGFkIGFuZCBUb2JhZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHV2YWx1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRhaXdhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUYW56YW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVa3JhaW5lXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVUdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVnYW5kYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJVU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVW5pdGVkIFN0YXRlc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVcnVndWF5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVVpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlV6YmVraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmF0aWNhbiBDaXR5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlZlbmV6dWVsYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcml0aXNoIFZpcmdpbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVklcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlUuUy4gVmlyZ2luIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmlldG5hbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZVXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJWYW51YXR1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiV0ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIldhbGxpcyBhbmQgRnV0dW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiV1NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhbW9hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIktvc292b1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIllFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJZZW1lblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIllUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXlvdHRlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIEFmcmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlpNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJaYW1iaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJaV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiWmltYmFid2VcXFwiXFxuICAgIH1cXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzTmFtZVByZVNlbGVjdGlvbiA9IFtcXG4gICAgXFxcIlVuaXRlZCBTdGF0ZXNcXFwiLFxcbiAgICBcXFwiQ2FuYWRhXFxcIixcXG4gICAgXFxcIkZyYW5jZVxcXCIsXFxuICAgIFxcXCJHZXJtYW55XFxcIixcXG4gICAgXFxcIk1leGljb1xcXCJcXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzTmFtZSA9IFtcXG4gICAgXFxcIkFmZ2hhbmlzdGFuXFxcIixcXG4gICAgXFxcIsOFbGFuZFxcXCIsXFxuICAgIFxcXCJBbGJhbmlhXFxcIixcXG4gICAgXFxcIkFsZ2VyaWFcXFwiLFxcbiAgICBcXFwiQW1lcmljYW4gU2Ftb2FcXFwiLFxcbiAgICBcXFwiQW5kb3JyYVxcXCIsXFxuICAgIFxcXCJBbmdvbGFcXFwiLFxcbiAgICBcXFwiQW5ndWlsbGFcXFwiLFxcbiAgICBcXFwiQW50YXJjdGljYVxcXCIsXFxuICAgIFxcXCJBbnRpZ3VhIGFuZCBCYXJidWRhXFxcIixcXG4gICAgXFxcIkFyZ2VudGluYVxcXCIsXFxuICAgIFxcXCJBcm1lbmlhXFxcIixcXG4gICAgXFxcIkFydWJhXFxcIixcXG4gICAgXFxcIkF1c3RyYWxpYVxcXCIsXFxuICAgIFxcXCJBdXN0cmlhXFxcIixcXG4gICAgXFxcIkF6ZXJiYWlqYW5cXFwiLFxcbiAgICBcXFwiQmFoYW1hc1xcXCIsXFxuICAgIFxcXCJCYWhyYWluXFxcIixcXG4gICAgXFxcIkJhbmdsYWRlc2hcXFwiLFxcbiAgICBcXFwiQmFyYmFkb3NcXFwiLFxcbiAgICBcXFwiQmVsYXJ1c1xcXCIsXFxuICAgIFxcXCJCZWxnaXVtXFxcIixcXG4gICAgXFxcIkJlbGl6ZVxcXCIsXFxuICAgIFxcXCJCZW5pblxcXCIsXFxuICAgIFxcXCJCZXJtdWRhXFxcIixcXG4gICAgXFxcIkJodXRhblxcXCIsXFxuICAgIFxcXCJCb2xpdmlhXFxcIixcXG4gICAgXFxcIkJvbmFpcmVcXFwiLFxcbiAgICBcXFwiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYVxcXCIsXFxuICAgIFxcXCJCb3Rzd2FuYVxcXCIsXFxuICAgIFxcXCJCb3V2ZXQgSXNsYW5kXFxcIixcXG4gICAgXFxcIkJyYXppbFxcXCIsXFxuICAgIFxcXCJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnlcXFwiLFxcbiAgICBcXFwiQnJpdGlzaCBWaXJnaW4gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJCcnVuZWlcXFwiLFxcbiAgICBcXFwiQnVsZ2FyaWFcXFwiLFxcbiAgICBcXFwiQnVya2luYSBGYXNvXFxcIixcXG4gICAgXFxcIkJ1cnVuZGlcXFwiLFxcbiAgICBcXFwiQ2FtYm9kaWFcXFwiLFxcbiAgICBcXFwiQ2FtZXJvb25cXFwiLFxcbiAgICBcXFwiQ2FuYWRhXFxcIixcXG4gICAgXFxcIkNhcGUgVmVyZGVcXFwiLFxcbiAgICBcXFwiQ2F5bWFuIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljXFxcIixcXG4gICAgXFxcIkNoYWRcXFwiLFxcbiAgICBcXFwiQ2hpbGVcXFwiLFxcbiAgICBcXFwiQ2hpbmFcXFwiLFxcbiAgICBcXFwiQ2hyaXN0bWFzIElzbGFuZFxcXCIsXFxuICAgIFxcXCJDb2NvcyBbS2VlbGluZ10gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJDb2xvbWJpYVxcXCIsXFxuICAgIFxcXCJDb21vcm9zXFxcIixcXG4gICAgXFxcIkNvb2sgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJDb3N0YSBSaWNhXFxcIixcXG4gICAgXFxcIkNyb2F0aWFcXFwiLFxcbiAgICBcXFwiQ3ViYVxcXCIsXFxuICAgIFxcXCJDdXJhY2FvXFxcIixcXG4gICAgXFxcIkN5cHJ1c1xcXCIsXFxuICAgIFxcXCJDemVjaCBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1xcXCIsXFxuICAgIFxcXCJEZW5tYXJrXFxcIixcXG4gICAgXFxcIkRqaWJvdXRpXFxcIixcXG4gICAgXFxcIkRvbWluaWNhXFxcIixcXG4gICAgXFxcIkRvbWluaWNhbiBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJFYXN0IFRpbW9yXFxcIixcXG4gICAgXFxcIkVjdWFkb3JcXFwiLFxcbiAgICBcXFwiRWd5cHRcXFwiLFxcbiAgICBcXFwiRWwgU2FsdmFkb3JcXFwiLFxcbiAgICBcXFwiRXF1YXRvcmlhbCBHdWluZWFcXFwiLFxcbiAgICBcXFwiRXJpdHJlYVxcXCIsXFxuICAgIFxcXCJFc3RvbmlhXFxcIixcXG4gICAgXFxcIkV0aGlvcGlhXFxcIixcXG4gICAgXFxcIkZhbGtsYW5kIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiRmFyb2UgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJGaWppXFxcIixcXG4gICAgXFxcIkZpbmxhbmRcXFwiLFxcbiAgICBcXFwiRnJhbmNlXFxcIixcXG4gICAgXFxcIkZyZW5jaCBHdWlhbmFcXFwiLFxcbiAgICBcXFwiRnJlbmNoIFBvbHluZXNpYVxcXCIsXFxuICAgIFxcXCJGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXNcXFwiLFxcbiAgICBcXFwiR2Fib25cXFwiLFxcbiAgICBcXFwiR2FtYmlhXFxcIixcXG4gICAgXFxcIkdlb3JnaWFcXFwiLFxcbiAgICBcXFwiR2VybWFueVxcXCIsXFxuICAgIFxcXCJHaGFuYVxcXCIsXFxuICAgIFxcXCJHaWJyYWx0YXJcXFwiLFxcbiAgICBcXFwiR3JlZWNlXFxcIixcXG4gICAgXFxcIkdyZWVubGFuZFxcXCIsXFxuICAgIFxcXCJHcmVuYWRhXFxcIixcXG4gICAgXFxcIkd1YWRlbG91cGVcXFwiLFxcbiAgICBcXFwiR3VhbVxcXCIsXFxuICAgIFxcXCJHdWF0ZW1hbGFcXFwiLFxcbiAgICBcXFwiR3Vlcm5zZXlcXFwiLFxcbiAgICBcXFwiR3VpbmVhXFxcIixcXG4gICAgXFxcIkd1aW5lYS1CaXNzYXVcXFwiLFxcbiAgICBcXFwiR3V5YW5hXFxcIixcXG4gICAgXFxcIkhhaXRpXFxcIixcXG4gICAgXFxcIkhlYXJkIElzbGFuZCBhbmQgTWNEb25hbGQgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJIb25kdXJhc1xcXCIsXFxuICAgIFxcXCJIb25nIEtvbmdcXFwiLFxcbiAgICBcXFwiSHVuZ2FyeVxcXCIsXFxuICAgIFxcXCJJY2VsYW5kXFxcIixcXG4gICAgXFxcIkluZGlhXFxcIixcXG4gICAgXFxcIkluZG9uZXNpYVxcXCIsXFxuICAgIFxcXCJJcmFuXFxcIixcXG4gICAgXFxcIklyYXFcXFwiLFxcbiAgICBcXFwiSXJlbGFuZFxcXCIsXFxuICAgIFxcXCJJc2xlIG9mIE1hblxcXCIsXFxuICAgIFxcXCJJc3JhZWxcXFwiLFxcbiAgICBcXFwiSXRhbHlcXFwiLFxcbiAgICBcXFwiSXZvcnkgQ29hc3RcXFwiLFxcbiAgICBcXFwiSmFtYWljYVxcXCIsXFxuICAgIFxcXCJKYXBhblxcXCIsXFxuICAgIFxcXCJKZXJzZXlcXFwiLFxcbiAgICBcXFwiSm9yZGFuXFxcIixcXG4gICAgXFxcIkthemFraHN0YW5cXFwiLFxcbiAgICBcXFwiS2VueWFcXFwiLFxcbiAgICBcXFwiS2lyaWJhdGlcXFwiLFxcbiAgICBcXFwiS29zb3ZvXFxcIixcXG4gICAgXFxcIkt1d2FpdFxcXCIsXFxuICAgIFxcXCJLeXJneXpzdGFuXFxcIixcXG4gICAgXFxcIkxhb3NcXFwiLFxcbiAgICBcXFwiTGF0dmlhXFxcIixcXG4gICAgXFxcIkxlYmFub25cXFwiLFxcbiAgICBcXFwiTGVzb3Rob1xcXCIsXFxuICAgIFxcXCJMaWJlcmlhXFxcIixcXG4gICAgXFxcIkxpYnlhXFxcIixcXG4gICAgXFxcIkxpZWNodGVuc3RlaW5cXFwiLFxcbiAgICBcXFwiTGl0aHVhbmlhXFxcIixcXG4gICAgXFxcIkx1eGVtYm91cmdcXFwiLFxcbiAgICBcXFwiTWFjYW9cXFwiLFxcbiAgICBcXFwiTWFjZWRvbmlhXFxcIixcXG4gICAgXFxcIk1hZGFnYXNjYXJcXFwiLFxcbiAgICBcXFwiTWFsYXdpXFxcIixcXG4gICAgXFxcIk1hbGF5c2lhXFxcIixcXG4gICAgXFxcIk1hbGRpdmVzXFxcIixcXG4gICAgXFxcIk1hbGlcXFwiLFxcbiAgICBcXFwiTWFsdGFcXFwiLFxcbiAgICBcXFwiTWFyc2hhbGwgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJNYXJ0aW5pcXVlXFxcIixcXG4gICAgXFxcIk1hdXJpdGFuaWFcXFwiLFxcbiAgICBcXFwiTWF1cml0aXVzXFxcIixcXG4gICAgXFxcIk1heW90dGVcXFwiLFxcbiAgICBcXFwiTWV4aWNvXFxcIixcXG4gICAgXFxcIk1pY3JvbmVzaWFcXFwiLFxcbiAgICBcXFwiTW9sZG92YVxcXCIsXFxuICAgIFxcXCJNb25hY29cXFwiLFxcbiAgICBcXFwiTW9uZ29saWFcXFwiLFxcbiAgICBcXFwiTW9udGVuZWdyb1xcXCIsXFxuICAgIFxcXCJNb250c2VycmF0XFxcIixcXG4gICAgXFxcIk1vcm9jY29cXFwiLFxcbiAgICBcXFwiTW96YW1iaXF1ZVxcXCIsXFxuICAgIFxcXCJNeWFubWFyIFtCdXJtYV1cXFwiLFxcbiAgICBcXFwiTmFtaWJpYVxcXCIsXFxuICAgIFxcXCJOYXVydVxcXCIsXFxuICAgIFxcXCJOZXBhbFxcXCIsXFxuICAgIFxcXCJOZXRoZXJsYW5kc1xcXCIsXFxuICAgIFxcXCJOZXcgQ2FsZWRvbmlhXFxcIixcXG4gICAgXFxcIk5ldyBaZWFsYW5kXFxcIixcXG4gICAgXFxcIk5pY2FyYWd1YVxcXCIsXFxuICAgIFxcXCJOaWdlclxcXCIsXFxuICAgIFxcXCJOaWdlcmlhXFxcIixcXG4gICAgXFxcIk5pdWVcXFwiLFxcbiAgICBcXFwiTm9yZm9sayBJc2xhbmRcXFwiLFxcbiAgICBcXFwiTm9ydGggS29yZWFcXFwiLFxcbiAgICBcXFwiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXFxcIixcXG4gICAgXFxcIk5vcndheVxcXCIsXFxuICAgIFxcXCJPbWFuXFxcIixcXG4gICAgXFxcIlBha2lzdGFuXFxcIixcXG4gICAgXFxcIlBhbGF1XFxcIixcXG4gICAgXFxcIlBhbGVzdGluZVxcXCIsXFxuICAgIFxcXCJQYW5hbWFcXFwiLFxcbiAgICBcXFwiUGFwdWEgTmV3IEd1aW5lYVxcXCIsXFxuICAgIFxcXCJQYXJhZ3VheVxcXCIsXFxuICAgIFxcXCJQZXJ1XFxcIixcXG4gICAgXFxcIlBoaWxpcHBpbmVzXFxcIixcXG4gICAgXFxcIlBpdGNhaXJuIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiUG9sYW5kXFxcIixcXG4gICAgXFxcIlBvcnR1Z2FsXFxcIixcXG4gICAgXFxcIlB1ZXJ0byBSaWNvXFxcIixcXG4gICAgXFxcIlFhdGFyXFxcIixcXG4gICAgXFxcIlJlcHVibGljIG9mIHRoZSBDb25nb1xcXCIsXFxuICAgIFxcXCJSb21hbmlhXFxcIixcXG4gICAgXFxcIlJ1c3NpYVxcXCIsXFxuICAgIFxcXCJSd2FuZGFcXFwiLFxcbiAgICBcXFwiUsOpdW5pb25cXFwiLFxcbiAgICBcXFwiU2FpbnQgQmFydGjDqWxlbXlcXFwiLFxcbiAgICBcXFwiU2FpbnQgSGVsZW5hXFxcIixcXG4gICAgXFxcIlNhaW50IEtpdHRzIGFuZCBOZXZpc1xcXCIsXFxuICAgIFxcXCJTYWludCBMdWNpYVxcXCIsXFxuICAgIFxcXCJTYWludCBNYXJ0aW5cXFwiLFxcbiAgICBcXFwiU2FpbnQgUGllcnJlIGFuZCBNaXF1ZWxvblxcXCIsXFxuICAgIFxcXCJTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lc1xcXCIsXFxuICAgIFxcXCJTYW1vYVxcXCIsXFxuICAgIFxcXCJTYW4gTWFyaW5vXFxcIixcXG4gICAgXFxcIlNhdWRpIEFyYWJpYVxcXCIsXFxuICAgIFxcXCJTZW5lZ2FsXFxcIixcXG4gICAgXFxcIlNlcmJpYVxcXCIsXFxuICAgIFxcXCJTZXljaGVsbGVzXFxcIixcXG4gICAgXFxcIlNpZXJyYSBMZW9uZVxcXCIsXFxuICAgIFxcXCJTaW5nYXBvcmVcXFwiLFxcbiAgICBcXFwiU2ludCBNYWFydGVuXFxcIixcXG4gICAgXFxcIlNsb3Zha2lhXFxcIixcXG4gICAgXFxcIlNsb3ZlbmlhXFxcIixcXG4gICAgXFxcIlNvbG9tb24gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJTb21hbGlhXFxcIixcXG4gICAgXFxcIlNvdXRoIEFmcmljYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJTb3V0aCBLb3JlYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBTdWRhblxcXCIsXFxuICAgIFxcXCJTcGFpblxcXCIsXFxuICAgIFxcXCJTcmkgTGFua2FcXFwiLFxcbiAgICBcXFwiU3VkYW5cXFwiLFxcbiAgICBcXFwiU3VyaW5hbWVcXFwiLFxcbiAgICBcXFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblxcXCIsXFxuICAgIFxcXCJTd2F6aWxhbmRcXFwiLFxcbiAgICBcXFwiU3dlZGVuXFxcIixcXG4gICAgXFxcIlN3aXR6ZXJsYW5kXFxcIixcXG4gICAgXFxcIlN5cmlhXFxcIixcXG4gICAgXFxcIlPDo28gVG9tw6kgYW5kIFByw61uY2lwZVxcXCIsXFxuICAgIFxcXCJUYWl3YW5cXFwiLFxcbiAgICBcXFwiVGFqaWtpc3RhblxcXCIsXFxuICAgIFxcXCJUYW56YW5pYVxcXCIsXFxuICAgIFxcXCJUaGFpbGFuZFxcXCIsXFxuICAgIFxcXCJUb2dvXFxcIixcXG4gICAgXFxcIlRva2VsYXVcXFwiLFxcbiAgICBcXFwiVG9uZ2FcXFwiLFxcbiAgICBcXFwiVHJpbmlkYWQgYW5kIFRvYmFnb1xcXCIsXFxuICAgIFxcXCJUdW5pc2lhXFxcIixcXG4gICAgXFxcIlR1cmtleVxcXCIsXFxuICAgIFxcXCJUdXJrbWVuaXN0YW5cXFwiLFxcbiAgICBcXFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXFxcIixcXG4gICAgXFxcIlR1dmFsdVxcXCIsXFxuICAgIFxcXCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiVS5TLiBWaXJnaW4gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJVZ2FuZGFcXFwiLFxcbiAgICBcXFwiVWtyYWluZVxcXCIsXFxuICAgIFxcXCJVbml0ZWQgQXJhYiBFbWlyYXRlc1xcXCIsXFxuICAgIFxcXCJVbml0ZWQgS2luZ2RvbVxcXCIsXFxuICAgIFxcXCJVbml0ZWQgU3RhdGVzXFxcIixcXG4gICAgXFxcIlVydWd1YXlcXFwiLFxcbiAgICBcXFwiVXpiZWtpc3RhblxcXCIsXFxuICAgIFxcXCJWYW51YXR1XFxcIixcXG4gICAgXFxcIlZhdGljYW4gQ2l0eVxcXCIsXFxuICAgIFxcXCJWZW5lenVlbGFcXFwiLFxcbiAgICBcXFwiVmlldG5hbVxcXCIsXFxuICAgIFxcXCJXYWxsaXMgYW5kIEZ1dHVuYVxcXCIsXFxuICAgIFxcXCJXZXN0ZXJuIFNhaGFyYVxcXCIsXFxuICAgIFxcXCJZZW1lblxcXCIsXFxuICAgIFxcXCJaYW1iaWFcXFwiLFxcbiAgICBcXFwiWmltYmFid2VcXFwiXFxuXTtcXG5leHBvcnRzLmRlZmF1bHRVc2VySW1nID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBWkFBQUFHUUNBSUFBQUFQM2FHYkFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0UW9MRHlJaTlmTzkzZ0FBSUFCSlJFRlVlTnJ0blhlVVhkVjk3Mzk3NzNOdW5WdW1GMDFSUTcwZ0licHBCbVBjNHVRUmg0UmsyWDR2TG5pWjkzQVN4M0ZjMG9peFk4ZTQ0Zm9TbHpoT0NQYXpEUVNiSWhBZ0MxR0VoQW9hamRwbzJwMTI1NWE1OWJTOTN4OGpJU0hUWmpUbG5IdS9uNFZsekRKYW1uM08vcHp2YjFlV3llVUlBQUM4QUVjVEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUNBc0FBQ0VCUUFBRUJZQUFFQllBQUFJQ3dBQUlDd0FBSUN3QUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUY0TkRVMEFwb3M2NDcvVXFYL0lHRTJhenFSaDVTeG4wbkJzS2NPNkNQdEVSQk1obnhiMUNhVk8vdzdzNUgrbWZnRUF3Z0t6Z1ZTa1NDbEZpa2d3R3N3YlBhbmlrV3p4Y0tiWWt5NGRMeHFqcGsybVE0Wk5sbnlkMzRzUkJUVFNCUGxFbXk2V1J3S1hORVhQYjZqWjJGVFRHdlpMUll3Ukk4YmhNUEFhTDFFbWwwTXJnRFBUazFUS1VZb1JHOG9iMjRmU3o0M2xEcVNLQjdJbE0xc2lSeEk3TXhyTktDYTlsTkNtL2tZcEN1a2JtNk52YW9wc2FJaGMwQlJ0cS9FSnpqaGpnaEZuRUJpQXNNQVp1VWNTMlZMWlVsbFNEZVdOSndmVGp5WFNUdzVtUzlrU01acEtQa1JzYnV1M3FSU25GQ2xGdW1odmlMeDFVZnpxOXZnRkxkRzRYOU1ZMHdYbloxU2dBTUlDMWVVcFJWUjJaTUZ5K3JMbGJRUHBSeFBwcDRhemxDc1Q1OFRZS1U4dFZOSlRVMkdQU0xVMFJtNWMzblRUaXVhdXFEOGd1Rjl3Qm5OQldLQktQTVVZbVk3S1c4NXd3Zmp4b2RFZmRBK1hKZ3FrdVVCU3J5RXZxVWlxenRiWUh5eHYvTDNsVFcwMS9ocGQrQVZUQ3VhQ3NFQWx3aGtwUlRuTFNSblc4OE9UM3o0dzlPenhKQkVqd2NncjQwUlNrVlNrMU9iRjlSOWF2K2pTUmJGNnZ4N1JCV01FYzBGWW9HSlV4WlJTeWJMVk4xbSsrOURJOXc0TlU3Wk1taUR2VHNoSlJiWkRzY0F0cTl0dVd0bXlLT0tyOStzK3dhVlMwQmFFQmJ5S1lFd3FOVm95ajZaTFgzK2gvOEdESThROEZhbGV0MVIwSkJGZHRxenhnMnZiTnJWRTI4UCtnTVlkQ1cxQldNQnJxbEtraHZKbVQ2cndyWDBERDNlUEVtT2tWZWpHQmtlU0kxdGJZbjk3MGVLTFcyTmRFYjlQUUZzUUZ2REVFMldrYzViSW0zdkhjOS9aTi9oSXp4Z1JWYXlxenE0VDViTDIrS2N1Nkx5Z05kWVZDZWljMlJMV2dyQ0FXL0VKbmpQdFBSUDVIKzVQM0wxdmlLU3FDbFdkbGJha09uOUovVzBiMmk5dWl5Mk9CbTJwRUxZZ0xPQXVOTTZJcUR0ZGZLUjM0bFBQSEtlOFFVSlU3MVk5UnhMUjIxYTFmUGo4am9zYWErb0NldG1SZUVrZ0xMRHdjRVord2Z0ejVaMko3SmYzRE96dFN4Rm5oQzE1aXNpUkZQWjljbFBuTzFjMGJhd1BNeUpVaUJBV1dFajhndWN0NXplamsvZDBELy9uaThOa09sVlhBNzQyVXBGU3k5dmluOXJTZVcxblhVdklWN0lSdFNBc01QOVBqaWlraVVPWndpOFBqOTN4d2tBcFhTVEJDVnVGWHhGYmlvRDJnWTN0NzF2YnRybWh4c1NvRm9RRjVoUEJtR0MwZFRoNzErNytodytQa1NOSklGaTlYdFFpMnRCZSs0a3RuVGQwMVlkMVlXQlVDOElDODFNRzVpem52cU5qbjM2dWIzUjBramhEc0hwREtDTEhpVVdEdDU3ZjhVZXJXMWJHUTBYYlFkQ0NzTUFjVXFPTHc1bmlEdzhrdnJ0M01Kc3pNR0kxYlJ6Sk5ISE5zb2JidG5TOXRTMk84aERDQW5NQ1o2UnovbkFpODdYbis1ODROdTVZRHNyQW1VWXRSVkoxdEVUdnVHVHA3eXh0MERpek1Ic0lZWUZaUkRER0dOMTNmUHl2bmpvK01JSXk4SnpmZXlKbHkrYmEwSjl0Nlh6dm1yWTZ2NGFGV2hBV21CMDB6bXlwZm5aazdMTTdqZzFQNUprbWtBZG15MW1Sc08vbXRXMS9ka0hua21nQUt4NGdMREFMdGpJZDlSK0hSdjcrcVdQam1STFRPR3cxbXpoUzZPS0c4NXB1djJ6WnVycFFFYzZDc01DTTBUa3IyZkpITHlidTJOazdrU3ZEVm5PQ1ZNVFlWY3NiNzd6eXZIVjFJZVFzQ0F2TUJCOW5rNWJ6blJjR3Y3cXJMNVBIaE9CY29oUXhkdkhpK3J1dVhybStMb1R4TEFnTFROTldncWZLMXBkMm5malhGd2J6SlFzVGd2UGhMR0lidTJyLzc1dFhiYWdMdzFrUUZwaUdyY1pLNW1kM0hMdm40TEJoT3RqSlBGL09JaUsxdktQMng5ZXQzbGdiTXJIV3dYM2d1KzA2ZE03R1MrWm5kaHo3eWY0RWJEVy9uMjhpWWtjSDBqYy9jckE3Vy9aeDlBNElDN3dtZ3JGSjAvbnE3djUvM3o4a3BZU3RGc1JadlFPWld4NDdOSkF2NjJoL0NBdTg2c05nWkRqeVJ3ZUh2LzVjMzlUVUZkcGtZWnpGMkhPOUU3ZHM2eGt2V1JxY0JXR0JWK2dtakd4SlB6ODYvdGtuRGp1MmhLMFdPbWZSdGlQakg5OStaTkswQlo0RmhBWE82aUJTMFVNbmtoOTk1S0Jsb3hKMGk3Tis5dUx3NTU4OVVYSWtIZ2lFQlU2amlKNUpaUDdrVndjc0M2UHNibktXb204ODEvZWR2UU9XVkhncUVCWTR5WXNUaGJmZnY4K3hIRlNDTG5UVzN6eDU5SjZlVVFlbjBFQllnQkdObCszTDczdEJsaXpZeXJYTytzakQzYnRISjJFc0NLdmFNUno1cDFzUFVxWU1XN25hV1ZKZTk5LzdKOG9XR2dQQ3FsNGNwYjYzZitqSkkrTVl0M0s5c3hqbGpac2ZPb2lMd2lDc0trVVJ2VENXKzh6amgyRXJyempyMmVQSnIrL3BoN0lnckdva2JUalgzcmNYbGFDbnVndjdoKzFIZDQ5T29pVWdyS29yQm05OFlCOFZURFNGNTNMV2RmZnZUUmsyV2dMQ3FpSyt1bnRnVDE4SzhjcVRGTXozL09vQUNrTUlxenErMEVUSE02WGJmM01VUTFmZURWblBuNWo0bHdNSlBFQUlxL0tSaXY3NGtZTm9CNC8zRy9hSjdVZEdpeGFVQldGVk1vS3hmenMwMGoyVVFWTjRIc3Y1K1BZanFPa2hyQXF1SkdpaWJOMzJ4R0VNWFZVRzl4NGNlV1F3Zy9ObklLeEtiV3YyVnp1T2Nrd3dWYzRuaUc3YzJsMjJKWXdGWVZVYU9tZmJoN1AvZFNDQnV3MHFDUzFiK3NLdUV6b09VNGF3S3V0TFRDVmIvdW1qaHdoejRaV0ZyZWpPWFgzZDZRSU8rWU93S2dlLzRIZnU2UitmS0tBcEtsSmFmL0hrRVF4a1FWaVYwc1NNSnNyV2wxOFl0SEdnVWlVaWxkclpsM3A4S09PRHRDQ3NDaUNvaVR2M0RsSUpKNU5VTEpaVS8vVGNpWlBIS2dNSXk3c3dSdW15OWQwRFF3WnVFcTdna0NYVjg0T1o3Y01JV1JDV3h3bHI0czc5UXpZMk9WZjRkNG5LanZ6SzgvMEN3b0t3UEIydnNvYjkzUmNUWlJ2eHFzSnhIUG4wUVBxNTBVbmN2UXBoZVpXUUpyN2ZQV0pueTFqTlVBMWZwN3hwZjNsM3YxK2dUMEZZM294WGVkUDUwY0hobk9WZ05MWWFzQjI1dlQrOWV6eUh6VG9RbHZmd2MzNWZiM0l3bFNlc1pxaWFiMVMyWkgxbHowQllGMmdNQ010cnd0TDRUN3BIc2dhdUdxd2lMTnQ1YWpBOVVqQTRIanFFNVNFRVkwZlRwVVBqT1lYVkRGVkdvV1Q5ZCsrRVgwQllFSlozQ0dqOG5tUGpHY1BHNkZXMVZZVVRodjNMWStNK0RMMURXRjVxVnNZZTZSMmZMT015NTZwRDJmTFFlUDV3dW9TaGR3akxHK2ljN1JtYlBKRXFFaTRxcU1hUVJhbWllZS94Y2F4dmdMQzhRVkFUZHg4ZEh5c2hYbFZwVlpndVcxdjdKcEN3SUN4UGZGL0pzT1hUQSttaVlXRUFxMHFScWpkVmZINDBoMVh2RUpicjYwSEJueHViSEo0c1lYVjdOWCsxeG9ybXIvdFRxQW9oTE5jTGk3TWRJOWtVNWdlcnV5ck1scTJuRXhtaG9YOUJXTzVHRTN4SElwdkdBRmFWNDhpeFhIbXNZR0lGS1lUbDR0WmtMRlUweDdNbHduclJxZzlaNlpLMWR3ekRXQkNXbStNVlovc204dW15alhoVjljS2laTm5hTlE1aFFWZ3VSdWRzMTFnK1djYjhJSVRGTWlYcjZkRkpnWEYzQ011OUNVdnc3U1BaVk5GRXdnTGt5TlJrZVJ3Ym9TRXNsellsWTZtaW1jWUFGamdWc3BKRmMzOHlqNm9Rd25KcFBiZ3ZtVThpWG9HVHdxS3hrclVid29LdzNJbGdyQ2RUVEJzMm1nSk1HU3RWdHA1S0YzRXpCWVRsU21GeDZpc1lremdRR1p4S1dHUTZUczVBNG9hd1hObVVqQjNNR1VYTHdZV2E0Q1dLcHAwdVlma29oT1hHTHlxanZFRW1FaFk0SGJKeXBwM0ltemgvRk1KeVhieEtGbzI4aVFFczhMSnYyS1RwSkxDeUFjSnlHNExSY01ITUlWNkJsNU16N2FHaUlTQXNDTXR0Q1N0Uk1ITVc3c2dCTHlzSk02WXprRGRRRWtKWWJrdFliQ2hmbmtSSkNGNXVyTHhwSDhrYkhDc2JJQ3kzbFlTRFJUT0xraEM4UEdHUjZSZ0ZFeTBCWWJtdUpFd2FkaEdiY3NEWktNdHlERWZpUXdaaHVZdXNMYVZVV0lRRnprcFp0bEtHb3pDMkNXRzVLL3lYSFlsN3ZjQnZZMGxwMkZoT0RHRzVEVnVTbEhndHdXOEppMG9vQ1NFc2x5VXNSa2hZNEJVL1pJNHMyeElsSVlUbEtoUlpEb1FGZm51c3dKSUtnKzRRbHF2ZVNiSWQ1V0RBSGJ4eVNhaVFzQ0FzZDVXREpWdWFVc0pZNEJWS1Fxa01CKzhHaE9VbVpabFNPcWdId2FzSXE0eVNFTUp5V1ZYSXNJc1F2TWFnQVlDdzNJSWk1ZU5NWTR3SUlRdWNqY2FaWHdpOEdSQ1dpNHpsMTdpR0RhN2dsZEE1OHd0OHpDQXNGL21LZE00Z0xQQnFDU3VnY1FWZlFWZ3VnakVTR01ZQ3IvQTEwemtMQ0E1ZlFWaXVlaThWQ1U0SVdlQ1ZFcFpmSUdGQldPNTdNWWt4akZTQXM5QTU5d3QwTkFqTGJiNUN3Z0t2a2JEd0tZT3czRlFTVXAwdW1PQ1lEQUpualJYNEJBdjdCRXBDQ010Rk9FcDFCSDB4WGFBcHdGbjVpZ2QwblRQNENzSnlsN0Rhd3I2b0xoQ3d3Sm54aW5UUkdQYmpyWUN3M0lWVTFCYjJSM3lDRVAzQkdjUjkydUtRejhGYkFXRzVMV0cxaFBRSVNrTHdzb1JGVVYyMGhTRXNDTXQ5Q2FzMTdJL29Hc0kvT0xNa2pQaEVXOGlQZ3p3Z0xMY0pTOVVHOUlCUFlHTStPSk9JTGxxUnNDQXNkK0lMKzBqakNGbmdwWkl3NHROYWF2d1N3b0t3WEJleXBGb1RDOVg0ZFN6RkFpOTFMMTlBcS9WcktBa2hMTmRoSzdXK0x0Z1F3REFXbUlwWEtoRFFWOWVGa2E0Z0xEZGlTYlcrcnFZaG9HTmxBNWlxQnhzQ3ZnME5OWmFVYUF3SXkzMEpTNnFWZGVGNHlJZW1BRk1KcXlHb3Jhc0wyeWdJSVN4M3dvamFhMFBjaDZvUUVDbXE5K3ZyNm1zZ0xBakxyU0ZMcWMwTk5mVUJEZVB1c0JYNVJMZzJxQXZzSW9TdzNJb2wxWWI2bWpxL0RsL0JXTFYrN2ZJR3hDc0l5ODBKUzhyTlRaSDZJTWJkNFN1cUMrZ2I2aUFzQ012RlNFVVJuL0RWaGdpYkNxdGRXS29wNkx1MExZWXBRZ2pMM1ZXaG8yN3VyRzBPK2hDeXFqbGVrVS9yYUluRXNHUVV3bkk1aGlPdjdhaHRDbUVZcTZyajFhS1E3M2M3Nnd3SDhRckNjamVPVWt2ajRYaGRtQVMyUVZjdnpXSGZEWjExSm9RRllYbWdLclRsZXhiWDE2TXFyRm8wSG11c3FRM29xQWNoTEE5Z1NubDlaMTFkQUZWaGxkYUR6VUg5L1YzMXFBY2hMRzh3dFVlbk1SN0VyVjlWS1N5cURmcmUzRkZyT2ZoZVFWamVxUXB2WE5ZUXgwYm9La1R3NXZwUWV6U0lRL3NnTE05Z09QTDNsamJXaDdFUnV1cnF3YWFRZnV1YXRyTGxvREVnTE0vZ0tMVWtGbHpYVVNzMHJDQ3RKaGpycWcyL2Uya2o1Z2NoTEk5UnNKeFBiMmh2Q0dHdXNIcmlGVVg5Mmsycld3aDczeUVzejJGTGRXRkw3THptQ09ObzVHcWhPZUwva3hWTlpjUXJDTXVMbEd6bjR4dmJZMzRjajFVVitIVis5ZExHNWhDdW5JQ3d2SW5weUxjdmFWaGNHOExkWDlWUUQ5WUVmZjluWFZ2ZXhuQTdoT1hkMTFpcDk2OXZDK0x1cjRydlNJSnRXQlJiMXhCeHNMd2R3dkl1WlVmKzBYbk5iVEdFckFxUFZ3R2Y5cW56TzR1V2pjYUFzRHlkc0tnMm9IOXdVNGVHdmRDVmkrRHNpczdhcTl2akZ1SVZoT1YxU3Jaenk5clc5VTBSR0t0aWhSWFVQbmZwVW13ZWhMQXFvMXdnditDZnZIZ3BFMmp0Q29ReCt2MVZMWnViSWpnTkdjS3FFQXhIdm10SncxVmRkV2p1eXFNeEdyemp3c1Y1N01XQnNDb0pTZW9mTDFzbWZkaXBVMm44eFlWZGJUVUJwQ3NJcTZLd3BkclNITGxwZFN0MjZsUk9NVWkwcmpuNm9UVnRSYXk5Z3JBcWo3SWpiNzlvY1YwOGhLYW9EQlNqZjNqVE1oL21meUdzeW55L0ZYVkVBbCs2WWptaGZxaUVJbDk5YUhQWFd6cnFzSlFCd3FwWURFZStaMW5qSDI5b0p4eEg2ZkdQejhxVzZLY3Y3SkxZd1FCaFZYd2Q4YmVYTG1tdUQrRlY5ekNDZi9XYWxmVkJIUU9TRUZibEY0WnROZjY3cmxtRjBYZXZZanVmdW56WjVhMHhMTHlDc0tyamhaZnF1bzdhMnk1ZFFwaGQ4aHhTYmU2cS8rajZSVGhEQnNLcUloaWpqNTNmc2JJdGpnRjRMejAxSWhMc3E5ZXNyTUY2T2dpcjJxZ0w2TisrYmpYNU5ZWnZ0VWRzcFN6bjY5ZXZXVjhmeGhPRHNLb09SYlNwb2ViSGIxK3JGTTZlOGNMek11eS92bXJGSHl4dndzT0NzS3EzTUx5aHMvN0wxNjlXcG8xdTRHb3M1OFpON1IvZXNDaW9vY3RBV0ZXTXp0bE5LNXB2dld5NU1uSDJtMXR4NUtyMitPMlhMYXYxYTZnRklheHFKNktMMnpaM3ZIVk5LMkhIdnd1UlNrUURQM2pyMmtWaFAyd0ZZUUZTUkUxQi9ZdFhubmRlZTV4d0NKeXJhbmFsU09lL2VNZUdWYlVoMkFyQ0FxZWR0VGdhK09IMWEwUHhFQlk2dU9pNUtQVWY3OXh3ZVF0T2k0V3d3Tmw5ZzliVmhmN3JIZXNvcUdNUnZDdXduVy9lc1BhNmpscU53VmNRRm5pbG5QV201dWgvdm1NZDZRTE9XbUFzNTR0dldYUGppbWEvNEhnU0VCWjQxZWR4UTN2ZEQ5NjJsampEN3VnRnROVmZYN25pNXRVdFFRMjJnckRBYTRZc3p1aGRpeHUrOXBiVnhBbk9XcEJLOEphTGwzeDQ0NktvVDBQTWRSc2Ftc0NGenRJNWUvL3FWcDhtUHZMSVFUSWxGc0xQSDQ3ODJLWEwvbUpMVjl5dk9kQVZoQVhlb0xNWTBYdFhOT3VhK01EV2Jpb1loSEhmK1doMDlja3JsdCsycWJOR0Y3QVZTa0l3dmU1aktmVW55eHQvK3JhMThWZ0lZL0J6WDRyVDMxMjE0dU1YZE1GV0VCYVlJV1ZIdm50eC9VL2V0bVpwWXdUT210TWkvSE5Yci9qWXhnNmY0TEFWaEFWbVR0R1cxM2ZVL2V2MWF6WXZpcE5TR0lhZmRVU043MHZYcmY3WStSMmNFNDdsZzdEQXVWS3duRGUxeGI1MTNhcnJsall3emhDMVppbFlLU0phMFZSenp3M3IvbXhkbXkwVnRoaTRINWJKNWRBS25pQ2c4ZUc4ZWZzengzLzA0ckJqT3BnNlBFZGJjYzZ2VzFKLyt4WEx0elJGY2lhMm5VTllZTGJST1NORmQrd2Z2R3RYZnpaYk9qbWJDS1p2SzgydnZYOXQyMmN1WHRJYTloVnRpVmFFc01EY1BEQkdVVjM3NWZIeGYzcm14SE9Kak9OSXJIaVlscW9ZWXcyMW9ROXU3dmowK25aaWhHdFFJU3h3V2k2YzJKUlBwcVRDNk5UL0ppSWlXNnFaelVsRmZPSklwdnk1cDQvZmZYalVLbG5FNGF3M2dGU2FMcTdwcXZ2NFJZdXY3NnliTk8wWnREMW5wUFBUSTcrSzFOUnZvazc2a0JSaExBekM4a1JURWpIR09DTkdKQmhUUkRuTHlScFcwWmFHSTIycExLa01xY3BTT1ZLU1ZDVFZpcnJ3a2xqUW5ORVpXRDdCbFZSL3YzZmdwd2NTdmVONWtncmFlbzFnUlVTMWtjQWZybW45N0piRmpTRzlNS096RWdWakJkdDVlamlycHRURldZaHpIMk82WUZPL0JqVVI5V2xSbjlBWWswUlNLYVZJS3N5U1FGaHVpbEdDTVowencxRlp3ODZZVnRxd3h3eTdWTGI3czZYRDZVS2lhS1lOTzI4Nk9kdkpXakp2T1dUWlpEbGt5ZC9kc09qVGx5eGQzeEF1MnpOeEZpT0tCdlFuQmxQZjJqM3dZRjlxTW05TVdSTVA1YXhnUlJxL3RDMyt2ZzJMUHJDbXRlekltVjJBcW5FMmFUci9zbi9vYjdiMWtGTGswMGdYZmszVTZqemlFeEZOaS9oNFU4aDNYankwSkJhc0RmbHFmVnBkUUl2NzliaGZDMnJja2NwUkNGOFExc0xsS2NHWmovT0M3ZlJObG85TmxnYXk1UlBaMHJGczhVaW1kQ2hib2x6NTVGWm14azRWaE96MHYweU1HSkVqdDNUV2ZmR3FGWmUzUmtzemNwWWlDbXBjS3ZybWk0bGZIQng1YWloTnRrVFVPcTBxb3E3NjhQWExHbS9iMEw2MkladzFabmh3dmsvd3NhTDVyVDJEWDl4NTdHVHpubFVLVHYyOVVpZlh5Z1gxam5od1pUeTBQQlpjRWd0MnhvSmRzZUN5YUNEdTF4eXBMSVhRQldITnI2Y01SL1pPbG5xeXBlN3gvTTZoek1PRGFTZFhQalZ3eFU1NjZvMTFxcTZtbXE5ZHMvTHRuZlVsMjFFei9WTkYvZHFMRTRWdjdCOTYrT2hZNzNoK0duK0F5cXdCaWFTa2tPLzNsOVQvNFpyVy83R3NxV1E3cGxRemE1R2d4ZzluaXQvWVBmQzlYWDNFK1J1YW1WV0s1TlN2aXBTaW9INVJXL3lhOXZpNnBzaDU4ZEI1OFdCRTF5d3BiWmdMd3BvN1Zma0VWMHIxNXNvSFVvV0RFNFhkaWV6V29Vd3BXeUlpRW56bXVVYXFlRzNvbjY5ZThjZExHeTJsWnJ6WVd1Y3NxSW1mSHh1L3AzdjRubVBqTkRVWVg0WGFjaVJ4ZGxGSDNWVXJtajY1cmkzcTB3cm5jTHRIalM1MmplWHVlUHI0ZmQwakpHYTYwRm9wY2hRNWtvVjlsN2ZGTDIrTHJXMnNXVlVYWGhrUCtUVnVPaEtsSW9RMW0vZ0ZsMHJ0R3M5dkhVd2ZTR1MzRFdjeTZTS3BjL1BVV2NWTGpmOXJWeXovbjZ0YkdHUE9PYnkvWVYxa0RQdUxCeEs3ZTVPUEpqSlVORW53YXRHV0k0bXhkUzNSSzd2cTNydTY5ZUtXYU01MHptVzNUZFFudGc1bS9uYkhzWjBuSm1iblFaOHlsei9pdjZ3dHZyazFlbFY3N1JXdHNaQXV5ZzcyQlVGWTU0ek9tV0JzWDZyd2kyUGpEeDlQUGorWUprdVN4bWQvbkVncUZ0UnZ2MlRKaHplMDErakNPSWZyY3poakVWMjhPRkg0enhQSmZmM3BCd2RUVnM2WU5iZTZWbFZFR3hmRnIraXNlOGVTK212YjYyeWx6SE5ydzZEZ1ArMU4vdDF2amg0ZW1aejlwbE9LYkVsRVMxdWliMTNXK0s0bDlWZTJ4alhPREFkaEM4S2FFWUl4bjJBOW1kSXZqbzF2UFo3YzNqOUJsaVJOek9IaWNxbTRUM3hzYytjSE43YXZpQVZ6NTNaTm9jNVpTQk5ITXFYNytpYWU3VS85dWorVnk1VG1STFVMaUZKVHFXcHplL3lxcnZxM0xhNi9hbEd0VXVwY3VyMGlDZ2hlZHVUM3UwZis4Wm5lZExvNGR5M0dpSlFqaVdoMVMrektwZlUzTG0yOHNqVW1sVEpoTFFocldxK1JUL0MwWWYrb2UzaHJiL0xSL2pTVnJibFYxWm0xb2VEdlh0SDB3WTN0TjNUV0ZXMTVqbldDeGxsUThQNTgrYUgrOU03KzFBTjlFOGxrZ1FRbjRmSGhMVWVTSXluc3YzWlI3WmIyMlBVZHRaZTN4WlVpODV3VFNrUVhoekxGNys4Yit0cmVRWHRlRnVVeUltVkw0clN4TGI1bGNmMnRhOXBXeDRPR1JJVUlZYjNoWUxWdE1QT3RmWU1QSDB1Vzh3YnA4enNHcEJRcFd0b2MrY2ltemcrc2FnbG92T3ljNjJZM3daaGY4TEdTdVcwd3N6dVIyVEdTZlhZNFMwV0xOTTQ0Vng0U2wxUlQxZCtTNXNoYnUrcFhOMGN2YTQ2dWJ3alBpcW9ZVWRTblBUeVF1bXQzLy8ySHgrWjVMZTVKYlduOFRaMTE3MXZYZXZPS0Z1d2NnckJlQjcvZ09jdjV5cDZCKzN0R0R3eG5UeTVRV0tDZUdRajdQclN1N1NQbnQ2K01oeWROKzl4L3l5a1hGeXpuUUtxd081ay9OcDUvZERCemNEUkxwa09DTXpmZlozWEtVMDMxNFRlMXhqYTFSRGMyUlM1c2lqWUVkRk5LZXpheWlNNlp6dG0zZTBidmV1N0VrWkZKb29WWmdzc1VLZHRwclF0ZHRxeng3eTdvV2hFUGxtMUlDOEw2TFRoaklZMC9PcEMrYzAvL1k3MFRWc2tpalM5NEw5VTBmdldTaG85dTdueFhWMTNKbHJOeUdDWm5wSEd1TVpvbzJ5K21DM3RUaFo3aHlZY0dVMzFqZWJMbHliSDVseGE3THF5a3BDSXBpYkhtaHBxckY4VTN0MFpYeEVNcjRxRWwwUUJuekpScXRxcW1xRStjbUN4L2IvL1FYZnVIOHRueXd2LzRVaEdqeXpycTNydSs3WCt0YmpXVmdyVWdySmNOOUppMnZHTjMvd005bzkyamt5NWF2cVFVRWJYWDE5eTZ1Zk9XdGExQmpjOXNRZnlyT1ZybmpCR05GTTJlVFBGSXB0UTdrZDgzVVhnbW1aOU1GMCt1bU9kVC9wcVhuMVNxazR2RnBTTEJRckhnbG9hYWpRMDE1elhVTElzRmw4YUNuVFYrd1prdDFTd3VBTkE0QzNCK2I5L0VkL2NNUE40M1lacU9peVlsYktlbE5uVEI0dnAvdm1UcGtraWc3RWgwVlFpTC9JS2ZtQ3g5Wk52aG5RTXBvMlROZkhIZ1hINXZhMEsrM3oydjZhT2JPaTV1amhZc1ozYlBIUmVNYVp3UlVhcHNqUmJONFpJMVZqUUhNc1VYeG5JN3gzUER5UUlaOXVuWU5lVXZkZzVPVjZmRTlKS2VHS093YjBrc3VDSWE2SXdHV2tLK1JiSGdva2lnSmFnM2gzd05BWjB6WmlzMTZ3dVZhblNSS0JqZjJqdjA0NFBEUStraWtYTGRSSVJVeE5tRnJiSFBYTGIwSFVzYThwWURZVlcxc0VLNmVDcVIrZlBIZW5ZUFp4ZHEyT0lOdnJoQzQ0dnJ3emV2YWZ2b3VyYUdvRjZ3bkZrdkVqaGpuSkZnakloeWxwTXNtaU5sSzF1MjBrVXpVVENHQzlad3dSZ3FHRU1GYzdCbzBHUjVhck1lblQ1QWg1MCtSb2RlZHVUS1MybVJkRUYralh6YTBwQytQQlpjRmdzdGl3WGJvb0VhdnhiVFJkeW5SWHdpcElrYW45QVljNVJ5MUp5Y3M2NXhGaEQ4Vi8ycE8zZjFQVDJRTHBkZCthRjZDVWN1YlFoLzdLTEZ0MjdvbUpYUlRBakxrOFQ4Mm84UERYL3VOOGQ3eG5PdWZsL3BWUDlYS2h6UU55MkszN2E1NDUxZDlWS3B1WnRGbWpyTVN6Q2FHaTBxMlU3SmxpVmJGbTJuYU11YzR6aVdOR3hadEp5ODVSUXNwMmc3T2RQSlc3Sm9XbmxiU3FWaVBoSHo2YkdBSHZieHVFK0wrdlNvVHloT3hMbVBzNGpHSTdxbzhXa1JYWVIwd2Vqa01TeHpmYVRVMUFtSS9mbnluYy8zM1hOb2RIaXlURXA1WUlXSFZJMFIvODBiMnI5eStmS2NiVmZ0aW9jcUZkYlVidUhQUHQzNy9UMERpV3pKUzJzcGxTTEdHc1ArZHkxdi9NUkZpNWZIZ2tWN1BoWkhNMFpUUmVCVVhUaDErSmVqbEtPVUxaV2p5SkhLbG1xcWNKdnFUenBqR21lNjRJS1J6cm5HbWM2Wk92VlRLRHE1TzNnKzkvOEdOVjZ5NVBjT0RYOW4zOUJ3TWw5eTFZalZHM2owUWI5K3ljcW0rOTY4aWppcnppWHgxU2dzUmhUU3hQdTI5ZHgvY0RoWE1qMjVmbElxdnk3cWEwTzNuZC8rNFRWdFUydTFGckE5NlhRNXlNNnFDT25sWjNJdUZCcG5HbU5iQjlPZmYvYkV2dUZzcm15NWVnVGdOVksyeGkvcHF2MS9ONnlMK2JVcW5EcXNSbUZGZEhIZGd5OXU3eG0xUFgzM2pDSWlWZVBYMTdURjdyaHM2Uld0c2FsRFRRbThITUZZUU9OSHM2WFBQWDM4VjBlVHFiSjVjcGpmeTUvY0N4YkY3MzNYaG5oQXJ6Wm5WWjJ3WWo3dHBxM2RQOXVma0haRlRMZ29SWnpWQm4xdlhsei81eGQwYm1tS1FGdG5xc292ZUgrdS9NOTcrbjdXTXpaWk1FM0xxWkN0bEl3dTZLeDk1TjNuYTV4WDFSYWU2aEpXeks5OWVGdlB2KzBkTEZmWVBYUkthUnFQNk5yNTdmR1BiK3E4dHFOV2tqS2Q2dFhXMUpyKzNtejVDN3RPM0h0NHJHamFodVZVMmhrN25GMjB0T0h4ZDI2d3ErbmFpeW9TVml5Zy8rVnZqbjVuVjEvZXFOQ0pZYVc0NEdHTmR6UkhQN1dwODhibGphcjY5djNybkdtY0hVb1g3M2oyeEsrUGpwY3R4N1NkaWowT1RMQkx6MnQrNHUzclMwNjFmSjJxUlZoUm4vYWwzWDMvdExNM1ZUQXIvUEpSUmNSWldIQldGL3JDNW83M3JXN1ZHSnZ4ZldMZVNSdWtjVTZrZm5FMCtlMERReThNcE11T3RCMVYrUmZOYXZ6YTFTMlAzTEN1U3RablZZV3dBaHAvcUcvaWZ6L2MzWjh0VmRXUndYN0J0WkIrMDNuTjcxM1Zja2xyZEdyQlFZV0phK3JLb3Q3Sjh2Y09ESDYzZTFUbWpWbmNZK2lKNzFNb29IMTBTOWNYTDErV05TcmZXWlV2TE1IWXBHbS84eGN2N0Vsa3F2TmVCc0daeHBpSUJXNWQxWHp6aXBaVmRXRkxLcTlmbHNjWkU0eVVVdmNlbi9qSy9xSDkvYW1pZ3ZpbUFBQUxmMGxFUVZTcEpXQlYrSHhKcWE1NDZCdHZXWFY5VjMzWnJ2RDloaFV1TEVZVTFzVTFEK3pmZm1pVXF2NDhOTTRZNXl6WVZQUFoxUzN2V2RIY0hQVFo4N3R1YzFaS1A4NVl3WklQOTZkK2ZtenMxOGVUbG1GTDNEMmoxSlpGdGI5ODk0YVlYNi9zMnIvQ2hWV2ppeS9zN3YvU3p1UFpvb2tiUnMvMHVPSXMwbGp6M3M2NnQzVFVYOXdhRGV2Q3piMSs2bmExZ2NueWcvMFQvMzQwdVhjZzVlQzhsZDlxbzJ2V3RENTh3N3FpWGNrRDhKVXNMSi9nejR4TTN2TFFpejFUOS9TQlYvazRreVlhbXlQdjY2aDljMmY5cHFaSVVPT0tGbmkwZXFyTFNhV09aa283aHpOUEpySVBKYktGVEducW9Dandpczh4SHZKOTRyS2xmN21wczFDNWh6cFVyTEFFWXpuTGZzOS83OS9SbXlUTzhUNi9BVU1vVWtRK3NhSTFkbU5IN1hXZDlhdnJ3ejdPNlBSeERHd3VEcmFiMnUxODVua3plOGR6RC9kUGJFMWs5dzVQeXJMMXNuTWd3R3ZneURWTjBXOWV2L3JpMXBoWm9ZZG5WYXl3b2o3eCs0OGUrdmtMZytUZ216d1RoWkJTcEhGZkpMQXFGbHdaQ3l5TGhwWkdBMHRpd1dYeFlGQVRkTVl1YUNKaTdQUVd3cGVrZHZZdDd2VFN0c0tUdjcwdDFXalI3RWtWam1XTGh6T2xnNW5Td1V5cFBGbWF1Z2puNUtsYllKck91bnA1NDMrOGZYMUVGeFU1bUZXWndncG8vUDdlNUNlM0hUNldMSkRBU3o4YnlldE1rWVgwK21pd0thREZkUzJxaTdET0luNDlvb2thamRmNDlCcWRSM3lhenRta2FlY3RXYkRzdk8wVVRHZlNzbk9Xekp0MnpwWVp3MG1VekhLMlRNNnBWWjBuUFlja2RhNGZHOTJuM1haaDErY3ZXMWFSaGFGV2VUOFNaeXh2T3QvZm56aVd6SHZnbEN1M2Y5SE9sTWdwbDFoeUlwbWZvRE5PWUZEMHN1TVkxSm4vK2t0L3oxN2h0OVVFMm5oV254ZXpTdGJXWThuZldkSndZWFBVcUxqQ3NBTDdjMEN3N3g5TVBEV1lSa0V4cHgyREdEdDVxeEJuSkJnSmZ2b3Y3ZFJmWi81RGZzYi9ueUZKelYwSTRTOE1aNzUrWUVncVZYazlvTktFNWVQc1lLWjQ3K0d4N0dRWk00T2dXZ3REOXV5SjFNK1BqUWNxcnNLb3FKK0hFWEhHN3R5ZjJER1FScTBCcWhmQitwUDV1N3RIUm91bVZsbWY3WW9TbGwvanYrNmJlUHJZT0RrU0ZRZW84c0x3MGY3VXYvZU1DbFpSZFdIbENFc3dsaldjdTN0R0Q0OU1ZcXdkVkR1TWxmUEdMM3ZHbmsvbWZSWFVIU3JuSi9FTC9xc1R5VzE5RTdBVkFFVEVOUEhzWU9ydW8yT01LcWZlcUpDK0xSaExHZFpqZmFteGlRTEcyZ0VnSXNXSUhQbHNYK3Jac1Z6RmhLd0srVEg4Z2o4NmtIN2tSQkpqN1FDYzhTVVh6dzZsSCt5ZlVFcFZ4bWU4RW9URlQ4V3JFY1FyQUY1V0ZoSlo4c2tUcVgycFFtV0VyRXI0R2Z5Q1B6bVVlZUQ0T09JVkFHZWo4ZDhNcEI4ZlNNdUtDRm1lRnhabkxGVzJIdTFQalNUekRQRUtnTE5ERmlQVGZxZzMyWjBwNnQ0UFdaNy9BZnlDUHpNMmVlK3hjUkljSjdvQjhJb2hhOXVKMUZORG1RbzRtTlhid21LTWlwYnpUQ0k3TXA1aldNMEF3S3YxRThQYTNwOGV5QnRlWC9qdTdVNnVjMzR3WGRqYWx5S0dlQVhBYTRRczhVQnZjbDh5cjBOWUMvbmxJRHFZekQ4M21NWmlVUUJlczZPejRtVHB1VVFtWGJZOXJTd1A5M1BCMkdEQmVISXdUWWFObllNQXZHN0krcmVqNDN2VEJaK1hUd3ozOEIvZEoxaDNxdkRUbytPa1l6VURBSzlYamdnK09wbzdNSll6SE9uZDc3dFhoY1VaWlF6N21hRnNPVnZDWWxFQVhwZXBNL1VmNjB2MTV3M2gyUzdqVldGcG5CL09sbjU2YkF5alZ3Qzg4Vzd6d1BIazBYU1JNd2hyZnBGSzlhYUxoeE5aQ0F1QU4xd1dNaXFaTzRZeXFiTGxVV2Q1c3JkenhzYUs1dmJCREZYbzVXc0F6QldDMzk4M01aQTNQSHFabENlRnBURjJvbURjMDRlekdRQ1liby9uUFlsTUltZWdKSncvSEtXR3MrVXNMcUFIWU5wVklaRXRkd3lsVTk1Y2tPVTlZWEhHeGt2bVl3TXBRamtJd0l5cXdudFBUQXdYVFM4T1kzbFBXSUxSUU5IOFNXK1NOQXkzQXpBVFlSMUxaRWJ5bnF3S3ZkZm5IYVZHc3FWeUVtZjFBVEJUSkQwK2tFcVhMYy8xSVk4Sml6T1dMRmtQOWszZ2xRUGdYT3FVbi9VbVJ6MjR1SUY3cloxcHVHejk4RGl1eGdIZ25LckMva1IyTkdkS3J4MXk0ckZ1YjBrMW5DbXJDY3dQQW5DdWJPMmZ5QnEydHpLV2w0VEZHT1ZNNTZsRWhoaHNCY0E1ZG4zMitGQW1hOXJjVTBlZGNFLzlXVm5Pc25lTVpCR3ZBRGpuN3NUM0RHWnlKaExXWENhc2pHRS9NNWdtamdFc0FNNnhPeEdaOXBGMDBmRFUvall2OVh6VGtYMlpFcFZ4WEI4QXMxTVY3a2hrQ3Biam9aRGxHV0V4UmdWTFBqV01laENBV2FzS24waGs4NWJEdkJNQnZDTXNZbm5iZVRLUmdiQUFtQjBFTzVUSUZpekhRejNLUThLaW5HbnZUV1F3Z0FYQXJHRTdCNUo1RHcxamVhYnptMUllbmlpUTZXQUFDNEJackFxZkhFcVhiTStFTEc4SWl4RVZiZm5FRU9JVkFMTXJBTFp0S0Z1MHBWZkczVDBpTEVZbDIza2NBMWdBekxhd1RpU3lPZE5CU1RqTDVFem55QkNFQmNCc28yajNhTlowdkxHcjBCdkNNaDIxZHp5SEUvc0FtSXVROWZoUXB1eVJ5d285SUN4R1ZIYms0NE5weENzQTVrSllqdzVsREVkNllqckxDd21Ma2VISXh3WlJEd0l3SjhJYUhjMWx5alo1b1NqMGdyQVVaUTE3Y0hRU3dnSmdqdGlaeUhqaWNDd1BDTXVTYXRkSWxoUmVLZ0Rtc0NvMHBRZUdzZHd1TEVaa1N0U0RBTXl0c0xZTnBpMEhDV3MyTUIyMUZTdXdBSmpEWE1BeXljSkV5WFMvc2J4UkVpWW5DamhsRklBNXJXVU9UT1FkNVhabHVWMVlrbWlrWUpEbDRJMENZRTVEVmsrNjZQNWhkN2NMeTVGcS8zZ2VXd2dCbUd0aGRhZUxTRmpubkxDVTZra1hjRUlEQUhOZEV1NUtGV3dKWVoxandsSjBNRjNFQUJZQWM1MndCaWFLUkc3UEJ1NFhsbm9tWFVUQ0FtQ3VFeGFWckd6WmNubkU0aTV2UTZWb01vVXBRZ0RtQWVYK2NYZFhDMHNSalJRTk1qQkZDTUI4VklYZHFZSnk5N2k3cTRVbGxUbzRVY0NTVVFEbVNWanBnc3ZQY0hLNXNLZzdoU2xDQU9hSnZhbVNSTUthdWJCSWRhY3dSUWpBUENXc0F4TjVETHFmVThMYWlZUUZ3RHdKaTFUQmNQbFp5VzZmSlJ4TDVwR3dBSmkzb3FZblZYQ3pzVnd0ck5HQ1FTYW1DQUdZdjR6dzRrVGV6YU5ZN2hXV1V0U0RKYU1Bekt1dzJNRk1VYm40dEV3WEM0dFVkNnBBTUJZQTg1bXdVa1VrckprSml3Nm1TL0FWQVBOcHJLZmNQVkhvNnBLd1AxZUdzQUNZejRTbHNtVTMvd0ZkbmJBR1NoWmVJUURtRlVmbUxSdkNtZ2tESlJOaldBRE1NeE5GRThLYUVTVUx2Z0pnbnN2Q01SZFhOdTRWbGkwVmxWRVNBakRQdnFMeG9udFB4WEt2c01aZG5Fc0JxR0RHU3lnSnA4OVlDY0lDQU1MeVRNS3lzSXNRZ1BrdkNVZkttQ1djSm9wb3JHamc1UUZnSVJJV0J0MW5VQktXVVJJQ3NBQWtpb1pyZHhPNnVDVEVxbEVBRnFJbVBGRTBNVXM0YlVhTFdJUUZ3UHo3aWpJb0NhZU5vbUVrTEFBV2hKSkZicTBKM1p1dytvdllsd1BBUW1ETHN1M1MyM1BjTzBzNGduMDVBQ3dRd3dXWHp0RzdWRmpzWkM0RkFDd0FycDN5Y3Ftd1RLbklnTEFBV0ppOE1GNkVzS2JEYU1IQU1uY0FGb3BrR2NLYURublR4a3NEd0lKMVFMZWU0ZWZXa2xBcHZEUUFMRmdIbEpnbG5BNkdXMmRWQWFnR3lnN1dZVTJ2dlNBc0FCWXVNVGhJV05OS3BJN0NJaXdBRml3eDJDNjljZDJ0SlNFU0ZnQW9DU0VzQU1EcndWQVNUbGZ3RUJZQVNBeGVTVmlZSlFRQUphRm5oQ1VoTEFBV1RsZzRyV0ZhbUNnSkFWaEFZV0hoYUdXVTBBQlVBeVdVaE5Nc0NiRTFCNEFGZ2xFSkplRTBTMmdIcncwQUMwVWVKZUgwaE9VZ1lRR3dZR1NRc0taWEVtSU1DNENGbzRTRU5jMkVKWEVEQlFBTGhjS2dPMHBDQUR3RE5qOVBUMWhZNlE3QUFvS0VOYjFFaWpjR2dBVUVZMWpUSXFoeHZETUFMQmpDclJjQVpuSTVQQjBBZ0NkQWtBRUFRRmdBQUFCaEFRQWdMQUFBZ0xBQUFBRENBZ0JBV0FBQUFHRUJBQUNFQlFDQXNBQUFBTUlDQUFBSUN3QUFZUUVBQUlRRkFBQVFGZ0FBd2dJQUFBZ0xBQUFnTEFBQWhBVUFBQkFXQUFCQVdBQUFDQXNBQUNBc0FBQ0FzQUFBRUJZQUFFQllBQUFBWVFFQUlDd0FBSUN3QUFBUUZwb0FBQUJoQVFBQWhBVUFnTEFBQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQThLcjhmOXJIc1V5WnlhMlZBQUFBQUVsRlRrU3VRbUNDJztcXG5leHBvcnRzLmRlZmF1bHRLZXlJbWcgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFaQUFBQUdRQ0FJQUFBQVAzYUdiQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRRb1JEUUFCekFicEdRQUFJQUJKUkVGVWVOcnR2ZGwzRzhtVnI1c1JPWStZUVFBa1JVbFdsVjIyKzV3K2E1My8vL0U4M0xQNjluWGJWYlpWVWtrY01BT0pSQ2FRYzBiY2g1QlVkbFc1U3dNSll2aDl5NnNmWkRjSjVzYitZc2dkTzBnUVJSSUFBQndDRkk4QUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBRUJZQUFBQVlRRUFBSVFGQUlDd0FBQUF3Z0lBUUZnQUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBRUJZQUFBQVlRRUFBSVFGQUlDd0FBQUF3Z0lBUUZnQUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUErRFVVUEFMd2hSQkNPT2ViS0FyWDZ5ekw4aXpMODV4enJxcXFwdXU2cnR1TzQ5VnFxcW95eHZDNHdCZDkyWUlvd2xNQW53ZG5MRW1TMlhUcUx4YWNjeXJMd2w4Ly9nODRGLytYVlpYcmVXZjl2dU82aW9KaEVrQllZRmNUS3M1WVdaYmJLSnFNeDFFVUtZcnlqNUw2bDNianZLb3FWZFA2L1g2OTBWQlVsVkxzU0FBSUN6ek11aytTcEtvczB5eUx0OXU3Mjl1eUtHUlovaGhWL1lTcXFpckdMaTR2YTdXYXB1dWFwbjJZaXdFQVlZRXZWUlVoSkVtU1BNdWlLTHE3dVZGa1dheit2Z1RHV0ZtV3pXYnpyTitYRmNXMmJXZ0xRRmpnODZHVWl0MzBxcW9tbzFFWWhwVFMrMTNIaVhXaXBtbVhWMWVLb3RpT0kvYm1ZUzRBWVlHUG5WSlJXYzZ6Ykx2WnBHazZtMHl5TktXZnRmcjdlRzB4eGhSRmFYYzZ0dXRhcG1uWmRsVlYwQmFBc01DLy9qWlFLbE9heEhFVVJWRVVoVUdRNXptbDlPRlU5Uk52TWNhb0xMdWVWNnZYYmR0MkhJZExFb29oQUlRRmZycjZJNFNJV3FwTkZHMmlxR0pNN0Y3dC9zTXd4aVJDYk10eVBjOXgzWHFqUVFpcHFncGhBaERXcVNQTHNrVElhcmxjQjhGbXM4blNsREcyRHdVSGpERkNpS1pwbG0zWDZ2VkdzNmtvQ3JhM0lDd0k2eVFEVHdpVjViSW9WcjYvbU0rTFBCZmw2ZnRXRzhVNTU1eHJtcVpxV3ExZWI3YmJ0bVdWWlFsdFFWamdWRlFsSzBxYXB0UEpKRnl0cXFySzgveXhWbitmTk9GU0ZFVlJWY00wenk4dUxOdm1qR0Y3QzhJQ3h4dHNTZ2toV1pyZS9QQkRtbVZsVmJHcTJuTlAvWHpDUlFoUlZaVlNlbmwxNWRWcTJONkNzTUF4TGdBcERWYXJ1OXZib2lqWVVXUTRwVlNXNVhhMzJ6OC9GMjhZRVdnSUN4eThxZ2doMDhsa1BCcnhZOXl4RnIwaVd1MzIrY1dGZ29ZUUVCWTQzRlN1eW5KOGR6ZWJ6K2xCcmZzK2U3Vm9PODdWczJlR1lXQkxIc0lDaDVPNmpKVmwrZWIxNisxMksvMXp2NWRUMEphcUtNOWV2TEJzKzlUK2RnZ0xITkxLU093OWI2TG85dm82VGRQZFZhai9zeTlrUlpFWUU2cW9HSk00bDNiK01hcXFVbFgxN095c094andxcElWQlhNdUNBdnNoYWNrU1NyTGtralNiRHBkekdacGx1MitRNTU0ZVNmTHNpekwvWXVMUnFPaEtNbzZDRWJEWVpva2pERlJCYnA3YlZGS204MW0vK0pDZkRheDRZV3ZEWVFGSGtGVm5QT3lMUE1zV3k0V2kvbGNWS2p2MkF1aTFsVDBoMmwzT28xbWs3MHZqeElLMjI0Mmk5bHNIWVpsVVlnNTRJNC9vZmc4eldhejFXNWJqcU1vQ3BWbGpyMTVDQXZzQmtvcFl5ekxzbml6V2ExV0s5K1h4QW1iM1hxS2N5N0xzbTRZcnVlMTJtM0hjZGd2VlhJS2JXVlp0cHpQd3pCTWsrUlI2bFRGWjNNY3A5VnVPNTZuRzRZaXkrS3Z3RGNLd2dJUE1xZWloRlJWRmNmeEpvcUMxU3A2Z0FaVkg2a3FWVlV0MjNZY3A5RnFXYlpkL2RwWkdhR3RzaXhYdmgrRm9UaTBLSEZPZHY3aHk3SzBMS3ZSYk5xTzQ3aXVxbWtjNXhNaExIQy9xejlLYVZFVXdXb1ZiN2ZoZXIzZGJqK3lrL3E5cTByVHRFYXphVnBXclY3WGRmMVR1MWJKc2t3a2FiVmF4WEVjQnNGbXM5bjlBVWJPZVZXV3FxYlZtMDNUTkJ2TnBxN3JtRzFCV09BZVZuK0VrQ3pMcHVOeFZWVys3MzkySi9VdlhFOXh6bDNQYTdaYXFxbzJtazFDeUpjMFRpQ1VLckljaHVGMnMwbVRaRDZiUGNvR1hGVlZFdWZOZGx2VHRGcWpVYXZWdUNReEhQU0JzTUJucUVxVzVlVmlzUTZDUE04RDN5ZVBzZm9UVnVvUEJvWnBXcmJ0dWk2N3Z5UEhIMmFPNjlXcUtNdlplSnhtbVV6cGp0ZUo0bSswSGNlMmJjTTB6L3A5OHY0ZjhUMkVzTUN2NWJBc1M1eVBSNk1ramtXVFlpSko1REVXVFpxdW4vWDdobUU0cnF1cTZzTXRtaWlsalBOdEZLVnB1bG91ZmQ5WEZPVlI5dVlVUlhFOVQ5ZjFzMTdQTUUzMHNZR3d3TDlVbGFLcVNaTE1KcE40czBtU3BDeExhZWRGQUdKYjJxdlZPdDJ1YVpxR2FZcXJLSGJ6QkRqbmVaNm5hYnJ5L2NWMEtoR3k0N2VmMHZ0Q0RjTXdUTXZxZEx1MWVyMG9DbWdMd2dJL29xanFkck1aM2QwbFNWTGsrYU9VV2JLcTRwdzNtczF1cjZjYmhxcXFqMUptK2U0Q3hLckswblFkQkpQeHVDekx4eXFGVlZWVk40eXpmcjllcjJPUkNHRUJpVkphRnNYdDlmVjZ2WDZzVGdQaTkvYjYvV2FycFJ2Ry9weS9FeXZUTUF4SHcySDJTSWVOaEVOTnkzcnk5S2xsV2VnR0FXR2Q5REp3SFFSdlhyOStyS0ZidFBIc0RRYnRUbWR2TDQ0WGs1MXd2WjVPSnVGNi9WamFZb3oxQjRQQnhRWG1XUkRXaWRwcWRIYzN2THZiL1hwSHJMa2MxejNyOVZydDlxRjA3S1NVcGtreUdnNTkzeWVQMFltQk1lYTQ3b3ZmL3BhaUNRU0VkV3EydW43elpqNmI3ZjVJRGFYVWRwd25UNThhcG5tSU5VZUVFSW1RbTdkdjE2dFZVUlM3ZnltaDZmbzNmL2pEM2s1SUlTeHcvem4zOXZYcjVXS3hTMXVKd3pGZXZYNTVkU1ZUZXVoN01jSVh5L2w4TkJ4V1ZiWFRQNGR6V1ZYLytELytCNXB0UVZnbk1iZGErZjdyNzcvZmhhMDRsOTUzZmVuMmV0MnpNNG1RWTZya0ZoWmVyOWVqMjlzc3o2dXkzTkVMVnM0Tnkvcm1EMy9BZmhhRWRlUzZLdlA4ejMvNjAwTW5sZGlvMW5SZFU5VnVyOWZxZEVReUgrc1lJTXR5SE1majRUQkpFbkVYN0E2ZThMUGYvS2JaYXVHOUlZUjF0TWl5L0YvLytaOUZVVHhjRm9tdUw1WmxhYnJlUHorM0xLdGk3QlRhUDRtRFBseVM3cTZ2NHpqTzBqVExzZ2Z0WTBNby9jTy8vWnM0QTREdk5vUjFoQmtWckZadmYvamhJYjdmblBPcXFpekxNa3pUdEt6K1lDREw4bW5XT29xMTluS3hXQzRXVlZWRllTaGM5aEMvcTFhdnYvajZhMXlNdURNVVBJSmRKdEx0OWZXOUcrUkRLd1ZOMDVxdGxsZXZLN0pjbHVYSlpwSDR3MXZ0ZHJQZGpyZmIrWFNhWmRsMnN5bkw4dDVydUxhYlRaN25DbnJHWTRaMWZOT3JKRWxlL2YzdjRvVGcvV1JtV2NxSzRyaXViZHVOUnNOeUhPbDkyVHI0Y1owb3kya2NyOWZyVFJSdG9paE4wM3ZzejBNSWFYVTZWMCtmWXBLRkdkWlJRU2tWUGEzdWEvV25hVnFqMi9VOHozWWMwN0x1c2V2TE1mRmoyNGxlcjlGc3hwdE5GRVhCYXBVa3liMnNFeGxqNFhxTjV3eGhIV0hxSkhIOGhXK3ZPR01WWTZacGlxV2ZZUmhpeHhmRCs4Y29YbEdVV3JQcGVGNmoyZHh1dC81aUVkNUhqMmxLU0ZXV0VtcXlJS3hqb3ZxeTZZOUlPZHR4enZwOXk3STBUVk5VbFdOVzlZblBrRmNWSVVUTVNWM1BLNHRpTWg2SDZ6Vmo3UFBLNGtUbjFUaU9iY2ZCTmhhRWRWVFpJa2tTK2J6L1I4NmRXdTNKa3ljU3BicW1pYTR2Nk9UN0plczRTWklNd3lDbXFlazZaMncybXkzZXQybitqSitXWlpuamVSd1JnYkNPQTBKSVdaWmNrajVqNFdDYTVsZS8rNTJvamVUdjVna1l5ZTlwd3NXNWFQdDFmbkhSSHd3bTQvRjBQUDVVWndsaFlVRUlZUjNYa3ZBVGI1ZjVRSlpsZi8zTFgyelhmZkgxMTZMRk9oN21mWTRsbE1xVXpxYlQ2V1RDcXVvelpsaGl0WTV6aFJEV3NRM29uejBSS010eXZWcjl2Ly8zLzVxbStmVDVjOU95cXZ1cmpUaFpSRTNXRDY5ZWlUMnNMNXEzWWhTQnNNQlBrNEt4ZUx2OTlyLyt5ekROOC9QelJxdUZsNE9maHpoNGVIZHpFNjdYbUJsQldPQWhsekNFWkduNit0VXI5ZnE2TnhpMDJtMmszQ2M5dlNnTTcyNXU0amgrMEdPR0FNSUMvNVI0WlZsZS8vREQ4UGEyMVc2ZjlmdXlMS09sM0w5NlZxeXFLc2FDMVdveUdxVnB1dnM3eEFDRUJTUlpVVGpuczhsa09wbTBXcTF1cjZmcHVpTExaRmNYYysyNXA4UjJlRm1XeS9sOE1admxSYUVveXFNMHBBWVFGbmdIbFdWSmtsYXIxV3c2YmJiYnpWYkxkaHhOMCtpcGFvdFN5aGpMOHp5SjQyQzFtazJub2lnRXFvS3d3QjVOS0RSZGo4SXc4SDNkTkh1OW5tbFpsbVVwRDNsajgzNnFhcnZaeEhIc0w1ZUI3OHVZVWtGWVlKKzFwYWhxV1JRMzE5ZVUwdTdabVdYYnR1TVlobkhFMmhMYjUyVlpyb01nUzlQWmRKcW1xVXlwcW1uNFNrQlk0QUFTV0p5TW00ekhsTkphdlc0N2p1dDVqdXRLbkIvVDhVUFJjU0ZOa3ZWNm5jU3g3L3RGbm1QMUIyR0JnMFJvSzFpdGZOLzNYTmQySE50eG1xMFdJZVRRYTdoRTJlY21pbGErbjZicE9nZzRZeFNxZ3JEQW9TUDZwMnkzMnlpS2RNTllyOWU2cm9zZXlwOTlZT2h4TFV3SW1VMm5teWhLa21RVFJXS2VSWFo3d3lPQXNNQ0RyeE9MUEYvTzU3SXNiNkxJTU0xT3QrczR6cTd2OWZ1Q3oxOVYxZDNOVFpxbW9qZnhoOFV2Z0xEQWNXcExGQ2lGNi9VbWlxTDEyclR0UnJQWjZYYkxvdGhQYllrM0Nac3duTS9uMnloS3M0eFZGWGwvbHlxQXNNQkpyQk1sU1VyVE5NdXlhTDJlanNmdFRxZlY2VkJLOStka3RXZ0h1bHF0NXJOWnN0Mlc3KzlKeFpFYUNBdWM2SVJMa3FTcXF1THQ5amFPeDhOaHU5UHA5SHFxcWo2dXRzUWRaZjVpTVpsTThpejdNUFdEcWlBc0FDUkprampuUlZHTVI2UHhhTlJxdDN1RGdhN3J1Ni9lb3BSV1ZUVWFEdWVUU1lsMkZBRENBci9LY3JHWVRhZjFlcjEvZnI2emJ1V0VrRHpQWjlQcFpEVENWanFBc01DbkxjcWlLRnAvOTUyaUtNOWZ2TEJzKytFMnVUbm5XWmJkM2R3RXE1V2lLSTlvSzAzVDhqeEg5Q0VzY0pDSTAza3YvL2EzcXFxZXYzaFJxOWNwcGJJczM4dWNTM1JUeU5MMDFjdVhvc3Z3bzVSOWl0b0lYZGRmL1BhM2xOTC81Ly84SDV6cGdiREFZV3VMVW5yOTVvMGtTWTFHNDhuVHArejk5UTJmWWE1M1YzSnc3aStYdzl0YlVhRys0eG9GOGJGVlZaVUk2WFM3L2NGQUVtMnowSHNhd2dKSG95MUprb0lnV1A3SGZ6aU9jLzdraWE3cnFxcCtaQjhiWWJjaXp4bm40N3U3bGU5emNjSm10d3RBenJub2JDSEw4dm5GUmExZWw5NWYvQ1UrSlFJTllZRjN1WElFZjRSWXVDVko4dks3N3d6VDdKeWRlWjZuNmJxaUtQL3FsYUpZVjZaSmtxYnBiRElKdy9EZFlacmRlb3B6THN1eVlSaUdaZlY2UGR0MTJjOXVvaVdTOUJsQndoVVVFTll4Y2tTak55RkVWcFE4ejIrdnIxVk42M1M3anV1YWhxRWJ4b2NiYUQ1MGZkbHVOdHZ0ZGpHYkpVbXkrOE0wSCs0Zk5DM0xkcHhPdHl2S05YNXg5Y2M1LzR3Z1lWWUdZV0dHZFNEYWt1V3FMSWUzdDZxcTFtbzFyMTYzYk50eEhFbVNraVNKdDlzb2lnTGZUOU5VbHVYZHE0cFZsV1hibG0yN3RWcTlYdGMwcmFvcTNEWUVZWUZUbmpnU3NSNWNMcGVyMWNweFhjZDFGVVdKd25BVFJmbGpOS2hpVlVVSXNSM0hyZFZjMTNWY1YxYVVxaXpMWDkxVC82eFpNSmFFRUJhV2hJZUhtRUJGWWJnT0FpckxFdWVVMGgycnFpeExSVkVhclZhOVh0ZE4wM1ZkempsakRLLy9JQ3dBZmdGUkE3RmpRUXNyS1lweWZubnBPSTVobW9aaE1NWStlZlgzV2N0MjdHRkJXQUI4Z3FwTTB6enI5eTNMMGcxRHJFOC9jNk1LWlEwUUZnQVBnU2hLcU5WcWc0c0xWVlhWOXplYkhWUFRlZ0JoZ1dOUWxTUko3VzYzUHhpSUxYOVJsWXJyWXlFc0FQWkxWWnl4NTE5OTVYcmVqNXRsNzQvYUFBZ0xnTDJncWlyTE5KODhmMjVaRnRyNFFWZ0E3SytxMnUxMnQ5KzNMQXN6S1FnTGdEMkZFTkx1ZEhxRGdhcXFIMDc4QUFnTGdQM3lsS2JyN1U2bjIrMVNXVDZJVzhnQWhBVk9DTkgxUlZFVTB6VGJuVTZyMjJWVjlUbVZud0RDQXVCQlZVVXBOVTNUdEt4MnU5MW90Zkk4TDRzQ1R3WkFXR0NQUENXNnZqaU9vK2w2Ly94YzAvV3FMTE1zdzhNQkVCYllHMVV4VmpIbXVLNWxXWlpsbmZYN2tpUXh4dlppVm9WOWZRZ0xnQitGSUVtMWVsMDNqSHF6NmJxdUpFbjd0VXVGOWpJUUZnQWZsb0dxcHAzMSs3VjZIZS8rd0dkQThRakFMbEVWUmR6dHZLZEZWV2d2QTJFQmNEQ3JKeHo2Z2JBQUFBRENBZ0JBV0FBQUFHRUJBQUNFQlFDQXNBQUFBTUlDQUFBSUN3QUFZUUVBQUlSMVFxQ0VHc0VGRU5aQklNc3lad3l0Uy9aY09ySXNmK1lKUjg0cHBiakxad2VnVzhPRHBnQ2hsQlpGNFMrWHdXcFZsaVdleVg2R1NaYmxMTXZXVVJTRm9heDhXbEp3emplYnpXd3lzVjFYMTNYcC9UMnZBTUk2TUZXbFNiSU9nczEyRzYzWGVaN0xzb3duczEvckMwb2xTY3J6ZkRJZWkyRGxlYTRvbjV3VTI4M203WGJyMVdxV2JkY2FEY2R4T09mUUZvUjFHRGxBQ05sdXQ0dlpMRTNUN1daVGxxVk1LV3kxaDJHS3d0QmZMTEk4WHdlQitNZlBzTlVIOFFWQkVBUkJ1RjdyaHRGc3RieGFqVkRLY0lrR2hMV2ZpQjJRbGU4djV2T3lMTGViamZncVExWDdwU3BabGpoZnpPZnJJTWpTTklsai90NDQ5ekpmMjI2M1VSUnR0MXRkMTEzWFBldjF4RTFsZVBJUTFoNnQvcmdrM1Z4Zng5dHRudWRabW9wL3hNUFpxemdwc2x3VXhlanVMbHl2OHl6TDg1d1FRaWdsOS8xOWtHVTVTOU0wU2VMTlpoMEVpcW8rZmY1Y1ZkWDliVnNJWVoySXFtUkZ5WkxrN2R1M1paNm5hY29ZSS9jMFhJUDdOVWllWlMrLy8xNTRxcXFxaHg1UkNDR0VrSXF4eldaRENQbjdkOS9KaXRJZkRKcXRWbG1XMk42Q3NIYWRBNXFteldlejJXU1NwbWxabHVJZVVMelkza05WcllQZzl1YW1Lc3VpS0NUT3BkMkdTZnl1TkVra1F0Nys4TVB3N3E3WmFnM096OUhTSHNMYXlRNElwWklrelNhVCtXeFdGTVdIN3h4VXRWK3FvbFNSNWVIZDNYS3h5TFBzeDRYWVk0V0pFRW1TeXJJc3kzS1VKTlBKcE5sdTkzbzlzVTVFdkNDc0IxRlZVUlRENGRDZno4dXloS0gyRTFtV2l6d2YzOTR1Rnd1eDlOdTNUOGc1TDR0aU5oNHZwdE5hclRhNHVOQk5FeThUSWF6N0pNdXk4WEM0OHYwUDJ4TjRKbnVuS2tvMzIrMTBQRDZVTURIR2ZOOWZMcGVlNS9YUHp4M1h4Wlk4aFBWRkk2RWtTVkVZVGllVHRlL0xtZ1pQN1cya3Rwdk44TzV1RTBXSGRVUkdXSFd6Mlh6M2w3ODRqbk0yR0RRYURld3dRRmlmT1BSeFhwWGxKb3B1YjI3eUxKTmxXZEUwUEpiOVhGdUZVVFFaRHVQdFZ0VzB3eTE1VTFVMXk3STNyMTY5bGFUTHAwKzlXazFUVlVLcFJBaU9vRUpZdnp6V1NaSlVGa1dXWlZFWTNsNWZVMHFwTEg5ZTZUTjQyRENWWlpabG16QWMzdDVXakNtS29oN0ZpQ0tFZTN0OXphcnFyTjl2dGxxNnJpdXFTZ2pCYWhIQytxY2NTSk1rTDRyNWRMcGFMaVZDRkZYRms5bkQxVk1jeDNtV3JZTmdQQm9waWtJcFZZNnU2bzFTU2ltZHoyYlR5Y1R6dk41Z29HbWFicG95cGFpRU9HbGhpVHZUdDV0TmxxYXoyVXpzZ01pN25WSnh6bEhEOWF1ZTRveUZZY2lxYWp3Y2JxS0l5cksyMnluVjdzTWt0TFhkYmwvKzlhK21aWFY3UGNNMGJkdFdGRVY4R0FqcmhISkExQ2lzZkQvTHN2bDBtb21OcXQycWlqSEdPVGRNMC9XOFBFMmpLT0tjbzByK0g4TWt5N0k0UUo1bDJXUTBLdktjeXZLT0o3K01NY2FZNDdxV1phVnB1b2tpYVllSEdRZ2hpcXJtZVg3ejVvMnNxdDF1MXpCTjEzVjF3NUJPc28vTmFRbExqRnBSRkcyaUtFbVN4V3dtSExGN1ZiR3FxamVicG1VNXJ0dG9OTklrV2ZsK0hNZmhlbDBXQlpYbFU1NXdpVGQ5OFhhNzNXeWlLQkt0eEhZLythMnFpbExxZVo1cFdmVm0wM1hkN1hZYitINmU1OHZGZ3Urd2FaODRCQ1p4UGg2TmlDUTFtazNIZFhYRGFEU2JwOWJIaGdSUmRBcC9weXpMRWlHcjVUS080ekFJdHRzdFkyekhMNVU0NTZ5cXFDeTMybTNETU9xTmhtR2F3bDlpclZFVVJiaGV4OXZ0eXZmVE5KVXBKY2MxNGVLY201WjE5ZlNwWmR1L3VLaWhzaXhKVWhRRVlSUnRvbWp6R0xOT3pubFZWWXFpTkpwTjI3YmRXczE4SHlieFNZcWlDRmFySkk2RElFampXRmFVSFk4dTRndWo2M3F0MFRBTm85RnVxNHB5SWllcmoxeFlZbWpLc3l4WXJhSXczRzQyYVpaSmo1RURaVm1hbGxXdjExM1BzeDFIMDNYTzJFKytZZTlPekZaVnZOMXVOcHRndFFyWGExbVdqMmFkK0srRTlhN2pCZWZMeGVKZG1OTDBzVlJsR0VhejFYSmMxN1p0VmROK1ljT0lFSm5Tb2loRW1OWkJFQWFCckNpNy83U2NjMVZWYmNjUjgzVGJjWXFpT0c1dEhhMnd4T0kvMlc0WDgza1loaisyRTluNVlNaXF5bmFjZHFmanVLNm02NnFxL3VxbUthVzBZaXpQc2lTTy9lVlNsRzRmUVYrdG53dUxFS0lvU3BxbS9uSVorSDZXNTBXZVN6dXZuQlFsWFY2OTNteTFYTS9UTk8xajlyWS9oQ25lYnBlTFJSZ0VmUGRoNHB4eHJpaUtydXUyNDNTNlhkdDEyZkdlckQ1Q1lWRktDYVhieldZNkhtODJtL0w5RWVWZHE2cXF1Q1RWYXJYTzJabGxXWXFxaWtuRUp6bFhrcVE4ejh1cW1rOG1LOTh2OHZ5ZzZ5MytVVmlTSkNtS3N0MXNwdE5wdEY1WFZWVVV4ZTdua2xWVlNZVFVQSzkvZnE1cG1xS3FzaXgvVXJhTE1CVkZrYVhwY3JGWUxoYTczMjBRejVZUW9tcWFhVm5kYnJkV3EzRkNqdStJNGxFSlMyeUNybGFyNldpVXBtbkZHR2RzOTd2WDR1dmVhclhPQmdOVlZXVlovc0xDUDBKSVdaYXNxdFpCTUJvT1JXSWY0cTY4RU5hejU4OHQyNDZpNk83NlduU25ZbzhScHFxcVpGbHVkVHBudlI2bFZGVlY2ZjE1ck0rTGtTUkpWVmt5emhmeitXdzZMZko4OTJFUzJwSmxXZFcwczE2djJXb1JRbzVwdG5Va3doSkc4SmZMdTV1YmQ4cmdYSG9NVmNtSzB1bDBCaGNYSC9abzczM2JJdDV1YjY2dmt5U2hoMWE5eFRtM2JkdHgzWFVRL0dOem5rY0owL25GUmFQUklKVGViNWpFTGlRaFpCMEV3OXZiTE1zZWF3dFN6T2dIRnhldGRsdFIxZU9ZYlIyOHNFUlY0WHcydTd1OS9kUTExLzJtb3F3b1Q1ODk4Mm8xTWNvOTlHL01zK3oyK25xOVhoOWMwZWtqSGpSaGpCbW1lWGwxNVhuZUxxWjFuRmVNL2YydmY4M1RsRC9Ta1dhUklMVkc0K256NTQrWUlCRFd1Mmk4ZnZreUNzUEhuVFVZaHZIMU45ODh5cVk0SWVUMjdkdmxjb216WnI4YUpzdTJmL1BWVitLbHg2N0RKRWszMTlmejJleHhYL2dxaXZMTjczOHZIL0kyNktFS0s4L3pWMy8vZTVabGp6VzVJSVJVWmRudDl3Zm41NTkvWS9BOWZSSkprdnpGNHZiMmxuUE8wWGozSncrSGtHYXplZlgwS2YrQ0xhcjdtbGNHUVhEOXd3L1M0MzBTc1JTNGZQS2sxVzd2WjRQRG94SVc1enhMMCtzM2J6YWJ6V050UEl2ZmUzNXgwV3EzSlVyM1JCQmlZWmdreVEvZmZ5K0tjUjVsSjN0L0VCUGV5NnVyZXJNcFU3b25uWWhGbU1MMWVuaDNseWFKSkVtY3NVZlpiTlUwYlhCKzN1cDBEdXQ3Y2tqQ3FxcHFkSGMzbTA0ZjdlV0xvaGlHY2RicjFSc05hUzlQY29rM1JFa2NqOGZqOVdyRkphazZwVzdPb3RhVVVxb2J4c1hscGV0NTdHZlZ1WHNTSmtwcEhNZmlMRGVycW1ybjFoQkRtbTNiNTVlWHJ1Y2RTZ2ViZ3hIV2RyTzV1N25aYkRhN1BrL0RtS3dvaXFwYWx0WHI5KzFEdUlYOHcrbnV4WHkrWEN6S29pakxVanJlUHBZaTAyUkZrU210TlJxZFRzZDJuUDAvcXZMaC9ySHBkQ3BlbTVaRnNlTXdNY1lVUlRtL3ZHeTEyd2Zock1NUTFpYUticSt2NHpqZW1hMUVBWUdtcXJwaHVMVmFxOVd5SEtjOHRITVBvZ1pTRkpISFNaSm4yWkZwUzRSRFZWWGRNR3ExV3J2YjFUVHQ0RTdWS2FwYTVQbHF0Vm90bDFtYVpyc05rL2lxbjE5Y25QWDcrKytzZlJjV0lTU0pZN0ZwdFJ0YmlTVzlwbW1PNjdxdTIyeTFsQU8vczFlOEV3alg2M1VRYkRhYkpJNGZva1pzOTdzd0VpR0dZVGlPNDNwZW85bFVGRVZNSkE4M1RJUlNmN0dJd2xCMEU5bGxtQmhqVDY2dTJ0MHVabGhmUkZtVzF6LzhFQVRCRG16RnFvcFFhanVPNjdxVzQ3UmFMWEVhOWpnbUk1UlNXWmJETUJSZEVNTDFXdlJzT2JnSmw2aFF0eXpMcTlkdDJ4YjdpY2NVSmlyTFVSaEc2L1YydXcyRG9Lb3E4dkJoNHB6THN2enN4UXZYZFNHc3ozK0lOMi9menFaVDlTRXJSOFNlbEN6TDRyeTc3YnJPSVd4VWZmNitpYUtrU1JLdTEzbWV6eWFUUXpub0l5SkNLVzExT3JadFc3YnRlVjVaVmZ4SXcwUXBMZkk4V0szRXlYQlJNZitnWVdLTVdaYjFtNisvVnZlNFVHdXZoWlVreVhkLy92UER6YTNFQkVyWDlYYW5ZMXFXNjdxYXJ1L25lNlY3endkQ3FjVDV5dmZMc2x3dUZ1RjZUZS83a01yOWhrblQ5WDYvTHl0S3JkSFFWUFVVd2lUNjJGUlZGWVZobHFhTHhVSjA4WDY0TUpWbDJUOC9QNys0Z0xBK2g3OSsrMjJhSkE4eHFvaSt0N1p0OXdZRFZkTnMyeFliUGFkV0x5NisrbkVjaXpuWGJEb1ZyNjcyNU9NeHhzcXliRFNiclhaYjB6VHg5djBFK3dLTEl6WHhkcHZudWI5Y3JwYkxCKzFqODgwZi82anJPb1QxeWRPcnYvenBUL2MrTzJWVnhUaHZ0bHJkYmxmUk5ORk04c1RQdFh4b2tKSW15U2FLcHBOSmtlZTdiNlQ1ajFSVnhTV3AwK2swbWszZE1BekRRSmhFMFdtV1pWbVdiYUxvN3VibUlVWVh4dGo1NWVWWnJ3ZGhmUm8zYjk4dUY0dDd6Qm54cHUvaTZzcHpYWEhkRzNMZzV5bkJxaXJQOHppT2g3ZTNhWnJLTys4dVg1YWxvaWk5ZnI5V3IydTZMdHJ0STB3L0dWNnFxc3F5TEluam03ZHZ5N0s4OXpEOXIvLzl2L2Z6bWUvcEpSU0Uwc1Y4Zmk5cjlROTlieStmUG5WZFYzbmZ5aFk1OEl2UGlsQ3FHNGFtNjE2dGxzVHhhRGdVYlpwMzhKWktuQmQ1K3Z5NWJkdmk5bENFNlplZmxDUlJTazNUTkF6RHE5ZTNtODFzTXZHWFMwM1Q3aVZNVlZsdU54dlJaQkV6ckk4aVM5TS8vK2xQWDM2WlRWRVU5VWJqck5kelBVODYzbEx2QnlWTmt2bHNOcHRPSDI3VHBLb3FyMWJyRFFhdTYrNm1PYy94U1N4TDArbDR2Rmd1djd4TEd1Zjg4dXFxM2VsQVdCL0xhclY2OCtyVkY4NndXRlgxejg4SDUrY1NidnIrd25tNHFxNTgvL1hMbHcrVWJMMSsvL0xxNmtUdWZYbTRsU0loeEY4dTM3NTVJMzNaWStTY04xdXRxMmZQc0NUODZJMk1QUC95WVpiSzhtUTBtazRtdmNHZzAra29pb0pzK05Ra2tEZ1AxK3ViNitzOFRlbkR6TEFJSWRQeGVEb2Vuejk1MG1nMkg2VmYxUkhNc0lMVmFqSWNicmJiZTdsa2MyL1BET3pwREdzeUdvMUhvL3RhR25ET2k2SVF6VFFNdzhDSzQyT2VXRm1Xd1dvMXZMbGh1N3B1UzlRcnRMdmRzMTd2dnJaampqNU1WVm1HWVhqejlxMjQ4dksrZnJKbFdWOS84dzFtV0IrOXFYR3Z0VGJpYk9COE5wdU1ScmJyWGoxOXFtcWEySDNIWVA3VEoxOVZaVkhNWnJQNWRDcU9hOUJkaVVOb2NUbWJ6Y2JqZXFNeHVMelVORTFjeTRndy9kTzNXWkxLc2l5S0l2RDkyNXNiOFlqdWQvNjd0MGVkbEQwT3l2My9URVZWMHlUNTY3ZmZ5ckw4OVBsend6UlZWWDIzVkR6aGxCQm45UE1zeTdKc05wMzZ5K1VqM3Q1S0tGVW9qYUxvMnovOXlYYWN3Y1dGWVpxNnJrTmJvbWcyenpMRzJOdlhyN2ZiN1lmTGZrNEg1UVNqTHQ1MnZmN1g1c051QUFBWU1VbEVRVlQrZTFtV08yZG5qVVpEMVRSZDEwK3QwbDFzMHpMR05sRlVGTVh3N2k3ZWJoVkYyWWNjRUZmc1pWbjIrdVZMUXVtVHAwOE4welFNUS92RnE1aFBJRXhGVVlqQ3E5SGRYWlpsc2l6ZnkxNFZoSFV3Q0cySjdkNUdzOWxzdFhSZE55M3JGQTUvaUxPMWFab21jWnhsMmUzMU5XZU15dksrRGRmaXFMWWtTZGR2M2tpUzFPbDJhL1c2NlB4ektrYytDY215TEUyU01Bd1hzNWxvc0hHYXFqcDFZZjNqdnNuSzkvM2wwbkhkWnF0bEdJWlhxeEZLK1RHbWhEanhIMFZSbnFhcjFTcFlyYXFxVWhSRjJ1LzJXR0owV2N6bmkvbmNzdTN1MlptcXFsNnRKaTZMbDQ0M1RHa2NoK3UxNy90aVAzRi9qbmxDV0krdnJlMW1zNGtpWGRlYjdiWnBtbDZ0cHV2NjBSUUhLWXBTVlZXNFhzZHh2UEw5N1dZamNVNFBhbVVod3BURThadlhydzNEYURTYnR1TTRybnMwWVJJelg4NzV5dmZUSkZtdFZzbDJ5emlIcHlDc2Y1a1BSVkdNaDBOTjAyekhjVDNQOVR6WGRjdXlQTkI4RUh0Mm9yOTdGSVpSRklrR0dJZmJjZlJkSy9ROEg0OUdtcTQ3anVPNmJxMWVOMHp6Y0x1WUVVSVVXVTZ6TEF5Q0tJcWlNRXpUVklRSnJvS3dmajBmcXFwYStYNFVob1pwMnJiZGJMWEU0WjRENm13cHZ1NVpsazBua3pBSWtqUXQ4dnlnVmZYek1KVkZzZkw5Y0wwV0svcEdzK200N21GcFMxUWt4TnZ0WkxrVWE4QXN6MFY3V0NRamhQVnAreWFpQ1ZHODNVWmhxQmxHdTkxdU5CcFVsdmU4ZDdoSTVrMFV6ZWZ6VFJRVmVWNlc1ZEdvNmlkL3FhakpFTDNxZ3lBd0RhTjlkbGF2MS9kL2RQbXdFVEdielpJNHp0SlUzR3dLVlVGWVg1UVNraVNsYVpxbWFiTGRqb2ZEWnJ2ZFBUdWpzcnlIdS9KVWxpWE9OMUYwZDN0YkZrVlJGRlZWN1cwcjBmdE5maTVKV1pwbWFSb255UjBoWjROQnM5bVVGYVhhdjlGRjdLbjd5K1ZzT3MyelRGeDhlNVFqeXYzbjQzNGV6UmtOaDlQeGVBOFBaNGlYTllTUVJxUFJPejhYTFpYMzRTMlYyS3hkekdiajhWaVNwQ0xQcFJQdVRzRTVWeFNGRU9MVmFsZlBudEc5dWZuNXh6Q05ScUx4MFg1MnA5QjEvWnMvL2hFenJHT1ljSWtLb09WeTZmdStydXZQWDd6UURlTVJxeG5GY1AzRDk5K0hZU2h5Z0h4eGc1RWpDSk13bE5qaFVsWDFOMTk5cFQxcWJUQ2x0Q3pMbTdkdlY3NHZQcDZJRVk1TVFsaTd5QWZ4MVUrUzVMdS8vSVVROHV6RmkxcXR0dU44RUxmU3YzM3pKb25qRDc4WENmQ1RxVlpabG1WWmZ2dm5QMnVhMXIrNGFMVmFPeTQ2SllTVVJmSFh2Lzg5enpMeGU5SHpDOEo2ekpUZ25MOSsrWkpTMnU1MG5qeDl1b010ZVVwcHNGcmQzZDZLeTV6Qng0UXB5N0szcjEvZnZIblRHd3pPZXIwZE9FdVc1ZVZpY1hkemM5QTN2RUpZeHdsamJEcVpUQ2VUV3IxKzllelpRN3pyRWZNM2Y3RVkzZDJKVXhxUE5jRWtoRFJiTFVWUlJuZDM5S0RlYWpIRzdtNXVSbmQzclhaN2NINHV5N0owNzVNZHpnbWx3OXZiNVdJaHJuMThSRTFmUFh0MmQzTnpOS2ZOSUt4N3ptUkprdFpCOFAvOXgzOTR0VnAvTUxBZDUxNldhZUt5bi9GdzZDOFdaVlU5VmpjRktzc3lwYjErdjlsdXE2bzZ1cnM3eEhwYThlam1zOWw4Tm5OZDk4blRwNnFtZmFneS8wSkI1SGsrR1kyV3k2WEUrU084bitWY2pDZWFycC8xZXVLRTdQRDJWdnc3aEFWK1dWdWlET3J2MzMxbjJuYXYzM2M5VHh3RSs2UjhFQnY4VlZVVmVUNGFEb1BWNmwzcDgyNW5OSnh6OFVzMXcrajMrL1ZHZzBzU3E2cER2eDFlcUdTejJmelhmLzZuVjZ0MWV6M1g4OFJmK25saFN1SjRPcG1zMTJzaWZ2aHVCU0hDUkJYRnNxeGV2Ky9XYWhMbmpERjJYQWN0SWF5SDFKYWlaR242K3Z2dlRkTnN0ZHYxUnVOajdxMGloRWlFc0xMTXl6S0tvdVZzRmdTQnFxcTc5NVFvRGxBVXhmVzhWcWRUcTlmTG9qaDBULzM4YWF1YUZzZnhxNWN2TGROc2RidjFlbDMwZDVSKzdjNGU4ZUt2eVBQTlpqT2ZUcU1va21WWjN2bk1WNVRhcUpybXVtNm4yM1U4cnlwTGRseGhnckIybUErcVdoYkY4TzV1TWg2M094MnZWck5zVzdRQS9zbk9nbGc1Vm1XWkpNbDJzNWxOcCtKbVFFM1RkcHdBa2lRcGltSmFsdTA0b21HeG1PZ2RkNWp5b2hqZTNvNkh3ODdabWV1Nklrdy8xOWFIQmxWUkZHM0MwRjh1NHpqZWZSOHg4YWxVVmJWczIzR2NWcnR0V0ZaWkZFY2NKZ2hyZHdraFJ1elpkRG9lRHJ1OW51MDR0bTNiamlPMDlhN3pVWnBHVWJUZGJKYUxSVldXdTIrbElHWlZobWs2anVNNFRxdlRvYkxNcXVwRVhuSjlPQll6SFk5bjQzRzkyZlJxTmR0eHJQZGQwc1FxTWt2VDlYcWRKc2wwT2hVYlZUdFdGYXNxUXFscG1vN3JXcGJWT1R1VEpJa3hkdHlxZ3JBZUFiR1Q1UytYaS9sY25LbldkTDNlYUtSSnNnNkM3WFlickZidk9oL3RWbFZDbXJiamVKNW51MjZ0WGhmWEMxY24rVDVlYUN0WXJmemwwdlU4cjFhemJkdXIxOFAxZXJ2ZGJqZWI1WHd1SzhxT1YzK2NjOUZuc2QzcGFJYmhlWjVYcngvQlppS0V0ZStJbDBkcG10N2QzcXFxdW9taU5Fblc2L1dqdkZTcUdDT0VkTHBkeTdJc3gzRmRsekhHVGlrSC92c3d4ZHR0dEY2YnRsMWJyOE13VE9KWWJIdnRXRlZWVlptbTJXZzJkY01RQlNXTXNiSW9UaTBvRU5ZakwwQVlZL1Baakx4Zk0rNDRCMVJOdTNyeVJGWVVyMWJUTkkweGhoTEhuNGRKVWRVOHkyYlQ2ZTViS1RER09HT081NGxldUs3bmlVVjZkYW9qQ29TMUZ5UDVqbk9nTE10M2Jld053M1hkRHkvbUVZdi9SbHM3UGt3and0RnN0UnJOcG1FWXBtV0pZZWJFSjc4UTFna2hlZ09jOVhwZXJXWlpscWlXUExWTGFQWWNvU1F1U1pkWFY3WnRpNXZvcEY4cnNJQ3d3RkZSRklXbTY0Tit2MUd2cTdvdU91UkFWZnVtcXJJc1RkUHNYMTA1bnZlaDhnNHhnckJPS0FmRVp1MlRwMCs5V2sxNDZzTi9oZWV6VjZwcU5CcmRYczl4SEVLcE9DU0VHRUZZSjVRRG5IUEg4L3I5dmxlcmlhb0ZQSlo5Z3pFbUVkSm9OQVlYRjdxbVNSaE9JS3pUcE41b25GOWVHb1loZWovQlZudW9LbGxSZW1kbnZYNWZWaFFZQ3NJNnlYQXFTcjNSdUhyMlROd2NjL1JYV0I4aW9vU2wyK3VKbmx4WStrRllKNGZvK25KK2VkbnVkS29UTHRMWmM4U3gwUDVnME81Mmk2TEFjQUpoblJDaW5Zam9wdkRzeFF2VE5GSDJ1YmRoVWxWVjFiVG5MMTZJUzZyekV6ajBCMkdCZHdrZ2xuNmk2MHYvL0Z6a0FHWlYreFltenJtbWFiS2l1SjczNU9wS1hEeUJFUVhDT2lWVmNhNFpocVpwOVhxOTIrdFJTakdyMmpmRWl6L1ROQ21sWjcxZW85bmNuMHZHSUN5d3F4eVFKTWQxTlUxcnRkdTFSdU5kS3dXa3dWNkZxYXFvTE51T294dEc5K3pNZFYzeDZnTmhnckJPU0ZXeW90UTh6elNNVnJkcm1hWm9UNHduczIrVFgxbVdYYzl6SEtmUmJKcVdKVXAyOFdRZ3JOTktBOGQxMjUyTzUzbUdaVlZsV2VHOTBsNWkyZlpacitkNm51aDRBVlZCV0NjNnZhbzNHcDF1OXpRN0h4MEtoQkRIZGM5NnZTelBvU29JNjlSQkRoekVaTGlzS2duMW53OFB4U01BNEI3bVdYZ0VFQllBQUVCWUFBQUlDd0FBSUN3QUFJQ3dBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBUHdDeDlWV2tPSXBnOC84NmxCS0tFV2M5aHhabGlWSk9wb3c3V3VMWklJT2p2c0xJWVFRNHZ2K1lqNFgrWERxazVoOUhWRWtTWnFPeDV4ejhva0pSZlkxQWZkVVdBclNZSThuVm1FWTN0M2NKSEVzeklWbnNtK1BRTVFsQ0lMYjYrc2l6ejluWHFic3F4bjJkQjZyNEhhTWZaeFlKVW55NXZYck5FbWdxbjFHakNocEhCUDZPWHMrbkhNVnd2b2tUTXVxcWtxQnR2Wmt5Y041V1piZi8rMXZhWnBTU3FHcXZRMVRITWQzTnplYktKSmwrZk5zOVNFQklheFBlVjZtaWUvZlBzeXBXRmxLaFB6dDIyK0ZxaWpGYStWOWhER1daZG5OOWZVbURHVkt2M0Jqa1RGbTJUYUU5UWxRU2gzWEZic2srRG8reXVxdkxBb3VTVDk4LzMwVVJWRFYzb2FwS0lxcUxOKytlYk9KSXZyRnF2b0FoUFhKazl0K3YvL3ErKy94RW1ySENTQkpVbG1XUlo2UGhzT1Y3OTlqRG9CN2pCTWxKRXRUeHRpOXE0cHozbXkxRkVYaGUxbGF0TCtiUkxiaklGVjJyNm9rU1pieitXSStKNFRnK1g5c2t1OHdUSlRTTkVuS3FocmUzS3pYNjNzZlVhcXE2cDZkOFgwdGhOeGZZU21xT3JpNHVIbnpSbEZWcE1TRDVvQllXV3czbTlWcTVTOFdqREdvNnRPZTRhNVVsYVZwbXFiejZkVDNmZm9BSXdybjNIWGR2VjBQN3JXd0pFbHFOcHVMMlN6TE11eGtQUkNVMHJJc296QU1WcXNnQ0lvOFZ4UUZ0dHE3RVlYU0lzOUZtRmErenpsL3VCZzllZlpzbjlOdHI0V2xxT3JGa3lldlhyNkVzTzRkV1piTHNsd3VGdXYxT2x5djh5eFRGQVYxSkh1b3FySW8xc3Rsc0ZxRjYzVlpscklzUDFBNkZFVnhmbkZoR01aZU8ySFBZK2E2Ym44d0dBMkhHUGJ2VVZXTXNmbHNGZ1pCRkVWNW5zdVVRbFg3T2FJRWk0WHYrL0YybTJlWi9KQ1QzN0lzTzkxdWJ6RFk4OG5Cdm45TnFTejNCZ1BPK1dnNFJGSjkrUUtRRURLZlR0ZEJzTmx1aXp6SHp2cCtob2x6dnBqTkZvdEZscVpabHNteS9LQm5QOHF5YkxmYkYwK2V5TExNOTd2dndMNHJnSE5PS1IxY1hFaVNOQjZOVUdiOTJUa2d5L0owUFBaOVA0bmpzaXpKKzhPeFlPOUdsTmxzTVovbldaYm4rUTdLU3NxeWJIYzZGNWVYcXFyeXZlK1NjZ0J6Rm5IV3ZIOStybW5hYURnc2k0SmlVdkFwK3lDS29pd1dpK2xvbEdWWldaYTdPUWJJR0lNUVAyMUVVWlRKYUxTWXovTThMNHRDdkJaODZNemluUGZQendmbjU0UVFmZ2c5blE1amtTV2MxZXAwNnMzbTdjM05hcm5FNGR1UFVaVXN5K3YxK3VidDI3SW9kcWFxcXFvMFRldDB1K1BoVUZhVVV3Z1QvN0l3aVpGNE1adGxlVjd0S2t4bFdUcU9jL1g4dVdFWVloRjZFSTlhT2F3TVZCVGw2Yk5uZy9QenR6LzhzTjFzTUliL0syUlozbTYzUDd4NlZlUzUrQzd1UmxXcXF2N202Njl0MnlhUzFHeTM3NjZ2MTBGdzlKVjBuLzFrTlUyYlRhZVQwU2pMc3AyRmlUR21LTXJ2ZnY5N3k3WkZCdkhENlpkNWVOdlloQkJkMTMvMys5L0hjU3hhblVCYlAxbGNwRW55NXZYcmVJY25NYXVxMG5YOTJZc1h0VnJ0d3orYXB2blY3MzYzM1c1SHQ3ZnI5UnJ2VFA0cDhXUjVIUVIvdTdsSjAzVEhLNVd2ZnZ0YjEvTU85YmtkNmlTY2M5TTAvKzEvL3M5MUVOeGVYNmRwaWhVaUlTUk5rdHVibTNVUVBGeTF6cytIYThNdytoY1h6V2J6RjhkcTI3YS8vdWFiS0lxR3Q3ZWk3UW5DbE1UeHpaczNtKzEyWjJPdFVOWFQ1ODliN1RaajdJQkZmOUN4cjZyS2NkMC8vdnUvcjViTDRkMmRhQ3gzbW1tUUpvazRyaXpMOHM2a29HbGFiekJvdGR1RWtQOG1EY1NCajIvKzhJZjFlbjEzYzVQdGNFNnhJeDE4ZkpqU2RIaDc2eStYcXFydXpGYXlMUGZQejN2OWZsVlZCMjJyZ3hmV08yMlZaYTFlYjdaYWkvbDhNaDVuYWNwUDVnNEx6bm1hcHJQSlpER2Y3Nnl6QWlGRVZkWHUyVm4zN0V3aWhESDJxdzljdkpEeVBPL2YvdjNmRjdQWlpEek9zK3pRaytmSEIvS3JZV0lzemJMWmVEeWRUbFZWVlhleXFTZjJmRnZ0OXZubHBXakJlQXhMNmFQSjI3SXNtNjFXczlWYXp1ZXoyU3hMMDZxcWpuWENSUWlwcWlwTFUxR3pJNzIvSE9XaEh6S2xWRGVNZXFNaFhvUlhWZlZKOXh0eHpzdWlhRFNiM2JPejBYRG9MNWRwa2h4OW1KSWs4UmVMOFdpa3FxcW1hYnNKazZicklreVUwcXFxanVhUkh0VStxQml4VzkxdXE5Tlp6R2JMeFNKSlUvR2UrSGh5Z05LcUxOTWs4WmZMMlhUNm9PZGdmNUlEdHVOWXR2M2s2a29zeHIva3ArVjUzajA3RzV5ZjMxNWZiemFiN1daelZOb2loRWhTV1pacEhQdStQeG1QWlZuZW1hcE0wL1RxOWJOZVQ5TzBzaXlQeVZiSEpxeDMycW9xU1pJNloyZnRzN1BwZUJ5RjRTYUt5ckk4OUplSllxZ01nMkFUUmRQUmlPMUVWYUwrMDZ2VkRNTzR2THA2TjZ1NnA1K2M1M24vL0Z5VzVkdWJteVNPb3pBOGpqQVZlUjdIOFhxMW1zMW1raVR0WUFISUdTT1VPbzdqdUc3bjdNd3dqTElzajJNTmVQekNFb2k4NnZYN1o3M2VaRFJLa21UbCt3ZGFmaTNxK3BhTFJaYW00K0ZRcU9xaFhjVVlJNFRVR3czRE5BY1hGL0xEckN3WVk0eXg4NHNMenZsa1BONXVObEVZRmtWeGlDOFRaVm5POHp3TWd2VjZ2WnpQcTUyMEZST3JpbHE5YmxwV3A5czFUYk9xcXFOVTFaRUw2eCsxMVQ4L1o0eVpscFdsNldJKzU0d2R5dUVlMFV4OU1admxXVFllajBWcnZaMnB5cmJ0ZHJlcmFWcFZWUSs2c25nWHBzR2dMRXQvdVl6Q01GeXZEMGhiVkpZNTU0djVQQXJEbGU5WFpVa2YvbDJ0Y0gycjFUSXNxOTNwR0liQkdEdGlWYjFiYlFkUkpKMEdzaXhYWmJsY0xPSTRucy9uZk8vN2FuTE82NDJHcXFyTHhVSTBRdHJGYXBxUVdyMHUvaU55WU1ldlhLbm9BTFZlcjRNZ1dLMnFxdHJ6TUJGQ2JOczJUSE81V0ZSVnRZTXBQR2VzS010T3QydFpWcXZkMWd5RDd6eE1FTmJ1QnNNaXo4UDFPZ3pEL1c4SFRBalprYW9ZRTM1c3RGcXU2K3E2TGdvUkh1dXZGbDJiTjFFVXJGYkx4V0kzN3hhKzhBSHVRbFdjbDBYUmJMZTlXcTNlYUR4dW1DQ3NuUTdqZVo3SGNld3ZGcXZsa3UxOVBqem9jRjB4Vm04MFdwMk82emlxcGtuN2NiaU1FQ0lSVWhaRnZObjR5K1Y4UGovbDI4WVlZMVZWMWV2MWRyZHJPNDZ1NjlKQm5RR0VzTzRqSDhROU1YRThuODFXdmkrZFdJc29VYnhXcTlmUCtuM2JzaFJWM2NNZUkrL0NWQlJabGszSDQ4VmlvWnhHQjRoL0RCT3JLdHR4ZW9PQnMwOGpDb1QxT1BuQU9XZU1wVWt5R1kxV3E5V0o5QWdzeTlKMm5Nc25UMHpURkUxZzlqa0hSRVNLc3F6Szh1YnQyMTBlbG54a1ZURm1tdWJnNHNLcjFjUTM4MlJWQldIOXd2Y2p6N0xydDIrak1EemlGV0pWVmJwaFBQdk5iMHpET01SV2lGVlZzYXA2L2VwVnZOMVNRcVFqMVJaalROZjF3Zmw1bzlVU0ZhRW5yaW9JNjEvUFBvcmk1ZC8rZG56WGl6SEdWRVY1OXRWWGxtVWQrdUtYYzE3aythdFhyN0k0SnNlMWtPZWNLNHB5Zm5rcE9pdWdEUW1FOVhFamVWbCs5NWUvSE1mSkJ2R1c3ZXJaczNxamNVd0ROU0ZrdTkyK2ZmTW1PNXBHSFlSY1BYMTY2RTFnSUt4SHk0Yzh6Ly8yN2Jmc2tPdGNaRmtlbko5M2VqM0dtSFNNeXdwS2FSQUV3OXZidzIxY0l6YW5uajUvM21nMnNmU0RzTDQwSHphYnpadlhyNnV5UEtCeFQzUVg2WFM3b3REL3VOTkFYTm5nTDVlajRiREk4ME1KazVqNWNzNmZQSG5TYUxleHB3NWgzVnMrRUVvRDN4OE5oM3ZleUVua2dLd296V2J6L1BMeUhvOHJIOFRRUWdoWkxoYmo0VkNjL3QzYmRhSUlFNkcwMSs5M3VsMUNLY2NhRU1LNjkzeVFKR201V014bnN5eE54Ym10L1VrSmNibUFxcXFOWnJNM0dNaXlmRHFxK3Fjd3lUTG5mT1g3NDd1N3FxckU3WDU3cFNvcXk2cXFObHV0WHI5UFpabWRaSmdnckIwaHJucGZMaGIrY3BuRWNWRVVqLzV5WGFoSzE3UjZzOWs1T3hPTmtCQW0wZUppUHAzbWVTN3VUMzU4VlZGcW1LWlhxMzNvVjRXRWdyQjJnYUlvUlZtdWxzdGd0ZHB1Tm5tZVAwbytpTE9RcG1YVmE3Vld0NnZyZWxWVjJBZjVpYmJtODNuZysvRjJXK1E1ZmFRd1VVcHQyL1pxdFdhblk1bG1VUlNJRG9UMUNOb3FpMkxwKzVzd0RGYXIzUnhVL3BBRGhCRFg4N3hhcmRscTZick9UdWJJL21jc0VobGp5L2s4Q3NOMUVPeW1wOEkvaHNseDNYcTlYbXMwYk5zdXl4SmhnckFlZFJoWGxLb28vT1V5VHBMNWRQclFIU0RFbHIvbmViVkdvOTVvUEVvVG1BT2RiUlZGc1E0QzBiam1vZnNyZkdpdFY2dlhYYzl6SEFlcWdyRDJiQml2cXBYdkozRThHWTM0QTF3TUlRNlh1WjdYN25Sc3g3RXNDNnI2REcxbFdiYmRidjNsTXZCOXNhOTA3NnJpbkRlYXpWcTk3cnF1aVRCQldQdXJMVXFycW9yQ01BckR5WGdzNm9QdVIxVlZaVG5PK2NXRnB1dVdaWjFhSTZUNy9OSVRRaWxOMDFSY08zU1BqVHBFQTR4V3U5MW9ObTNITVF3RFlZS3dEa05iUlZHa1NTSnFJTDVFVzJKV3BSdkdzK2ZQWlVXQnF1NVJXNFNRTE12eVBKOU5Kc3ZGNGt2NmJRbFYxUnVOYnE5bldaWjIyazFnSUt4RFRZbXlMUE1zbTR6SC9uSkpDZm1rWTdxYzg2cXFUTXU2ZXZaTTA3U1Q3ZG4yNEVHU3BLSW84alNkeldiejZWVDBCZnVFTUVsU1ZaYU82MTVjWGhxR29XZ2FRWmdncklOR1hHazF2TDBOUHJyZlZsRVU0aEpBMDdLVXZlOVhkVFJoU3BOa09wbk1wMU5WMDM0MVRHS2RMbnIxR0taNXNrMXJJYXdqaGZNMFRjZmo4V0kyKzlCLzdrTldDQitKbFlYbmVmMkxDOC96MEZya01hTEUwelNkanNlTCtmekRXdjdIUUx5UFUxbFZydXVlUDNuaXVDNkNCR0VkZVVxRTYzVVN4MG1TNUhuT0dSTUhsWFhETUMzTDh6eE4xekdmMm9jSlZ4aUc4WGFiSmtsUkZLeXFLS1d5b3BpV1pSaUdWNnRwbW9Zd1FWZ0FBUERMVUR3Q0FBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUJ3Ti96OXRySGkwcVlad3NnQUFBQUJKUlU1RXJrSmdnZz09JztcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1EYXRhLmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI3MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5mdW5jdGlvbiBmb3JtYXRJdGVtc09wdGlvbnMoaXRlbXMpIHtcXG4gICAgcmV0dXJuIGl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGl0ZW0uaWQsIGxhYmVsOiBpdGVtLmlkICsgXFxcIiAoXFxcIiArIGl0ZW0ucHJpY2UgKyBcXFwiIFxcXCIgKyBpdGVtLmN1cnJlbmN5ICsgXFxcIilcXFwiIH07XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmZvcm1hdEl0ZW1zT3B0aW9ucyA9IGZvcm1hdEl0ZW1zT3B0aW9ucztcXG5mdW5jdGlvbiBnZXRJdGVtc0Zyb21MaW5lKGxpbmVzLCBpbmRleCkge1xcbiAgICByZXR1cm4gbGluZXMuZmluZChmdW5jdGlvbiAobGluZSkge1xcbiAgICAgICAgcmV0dXJuIGxpbmUuaWQgPT09IGluZGV4O1xcbiAgICB9KS5pdGVtcztcXG59XFxuZXhwb3J0cy5nZXRJdGVtc0Zyb21MaW5lID0gZ2V0SXRlbXNGcm9tTGluZTtcXG5mdW5jdGlvbiBjYWxjdWxJdGVtQW1vdW50KGxpbmUsIGl0ZW0pIHtcXG4gICAgdmFyIGRpc2NvdW50ID0gbGluZS5kaXNjb3VudDtcXG4gICAgcmV0dXJuIHJvdW5kRGVjaW1hbChsaW5lLnF1YW50aXR5ICogaXRlbS5wcmljZSAqICgxIC0gKGRpc2NvdW50ID8gZGlzY291bnQgOiAwKSAvIDEwMCksIDIpO1xcbn1cXG5mdW5jdGlvbiBkaXNwbGF5SXRlbUFtb3VudChsaW5lKSB7XFxuICAgIGlmICghbGluZS5pdGVtKSByZXR1cm4gXFxcIjAgXFxcIiArIGxpbmUuaXRlbXNbMF0uY3VycmVuY3k7XFxuICAgIHZhciBpdGVtID0gbGluZS5pdGVtcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gbGluZS5pdGVtO1xcbiAgICB9KTtcXG4gICAgcmV0dXJuIGNhbGN1bEl0ZW1BbW91bnQobGluZSwgaXRlbSkgKyBcXFwiIFxcXCIgKyBpdGVtLmN1cnJlbmN5ICsgXFxcIiBcXFwiO1xcbn1cXG5leHBvcnRzLmRpc3BsYXlJdGVtQW1vdW50ID0gZGlzcGxheUl0ZW1BbW91bnQ7XFxuZnVuY3Rpb24gZGlzcGxheVRvdGFsQW1vdW50KGxpbmVzKSB7XFxuICAgIHZhciB0b3RhbCA9IGxpbmVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBsaW5lKSB7XFxuICAgICAgICBpZiAoIWxpbmUuaXRlbSkgcmV0dXJuIGFjYztcXG4gICAgICAgIHZhciBpdGVtID0gbGluZS5pdGVtcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT09IGxpbmUuaXRlbTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIGNhbGN1bEl0ZW1BbW91bnQobGluZSwgaXRlbSkgKyBhY2M7XFxuICAgIH0sIDApO1xcbiAgICByZXR1cm4gdG90YWwgKyBcXFwiIFxcXCIgKyBsaW5lc1swXS5pdGVtc1swXS5jdXJyZW5jeTtcXG59XFxuZXhwb3J0cy5kaXNwbGF5VG90YWxBbW91bnQgPSBkaXNwbGF5VG90YWxBbW91bnQ7XFxuZnVuY3Rpb24gcm91bmREZWNpbWFsKG51bWJlciwgcHJlY2lzaW9uKSB7XFxuICAgIHZhciB0bXAgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDIpO1xcbiAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIgKiB0bXApIC8gdG1wO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5kZWZhdWx0ID0ge1xcbiAgICBhbW91bnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbW91bnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vbnRhbnQnXFxuICAgIH0sXFxuICAgIGRlc2NyaXB0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVzY3JpcHRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlc2NyaXB0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNjb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2NvdW50ICglKScsXFxuICAgICAgICAnZnItRlInOiAnUmFiYWlzICglKSdcXG4gICAgfSxcXG4gICAgaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSRlEgSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lkZW50aWZpYW50IFJGUSdcXG4gICAgfSxcXG4gICAgaXNzdWVfZGF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lzc3VlIERhdGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RhdGUgZGUgY3LDqWF0aW9uJ1xcbiAgICB9LFxcbiAgICBpc3N1ZV90aW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXNzdWUgVGltZScsXFxuICAgICAgICAnZnItRlInOiAnSGV1cmUgZGUgY3LDqWF0aW9uJ1xcbiAgICB9LFxcbiAgICBsaW5lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGluZScsXFxuICAgICAgICAnZnItRlInOiAnTGlnbmUnXFxuICAgIH0sXFxuICAgIGxpc3RfaXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMaXN0IG9mIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdMaXN0ZSBkZXMgYXJ0aWNsZXMnXFxuICAgIH0sXFxuICAgIG5vdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb3RlJyxcXG4gICAgICAgICdmci1GUic6ICdOb3RlJ1xcbiAgICB9LFxcbiAgICBxdWFudGl0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1YW50aXR5JyxcXG4gICAgICAgICdmci1GUic6ICdRdWFudGl0w6knXFxuICAgIH0sXFxuICAgIHJmcV9pbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUkZRIGluZm8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm8gZHUgUkZRJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RfaXRlbToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhbiBpdGVtJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmV6IHVuIGFydGljbGUnXFxuICAgIH0sXFxuICAgIHRvdGFsX2Ftb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RvdGFsIGFtb3VudCcsXFxuICAgICAgICAnZnItRlInOiAnTW9udGFudCB0b3RhbCdcXG4gICAgfSxcXG4gICAgdmFsaWRhdGlvbl9jb2RlX2xhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIHZlcmlmeSB5b3VyIHZhbGlkYXRpb24gY29kZScsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgdsOpcmlmaWVyIGxlIGNvZGUgZGUgdmFsaWRhdGlvbidcXG4gICAgfVxcbn07XFxuXFxuLyoqKi8gfSlcXG4vKioqKioqLyBdKTtcIixcImNvbXBpbGVkQ29udGVudFwiOm51bGwsXCJieXRlQ29udGVudFwiOm51bGx9XX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ2NjJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVBPLUJ1aWxkRW1haWwiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVBPLUJ1aWxkRW1haWxcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQnVpbGQgdGhlIGVtYWlsIG5vdGlmaWNhdGlvbiBzZW50IGJ5IHRoZSBIYW5kbGVQdXJjaGFzZU9yZGVyIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1Njc0NDI2Njc0MTUsXCJyZXZpc2lvbklkXCI6XCJmNDc2NGE1ZWM1Yjg1MTk0OTk3ZjAyMTZkY2RjNTIxMFwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGphdmEubmV0LlVSTEVuY29kZXJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ1N1YmplY3QnLCAnUGxhdGZvcm0gNiBEZW1vIEFwcCAtIFB1cmNoYXNlIE9yZGVyIHRvIHJldmlldydcXG5cXG5wNi5waXBlbGluZS5wdXQgJ0Zyb20nLCAnbm8tcmVwbHlAcGxhdGZvcm02LmlvJ1xcblxcbmRlZiBJTlNUQU5DRV9JRCA9IHA2LmNvbmZpZ3VyYXRpb24uZ2V0KFxcXCJhcHBsaWNhdGlvbmlkXFxcIilcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpdGVtSWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGl0ZW1QayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGl0ZW1JZHMpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5leGlzdHMoaXRlbVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5cXG5kZWYgcG9ydGFsQmFzZVVSTCA9ICdwb3J0YWwucGxhdGZvcm02LmlvJ1xcbmlmICgnZGV2Jy5lcXVhbHMoSU5TVEFOQ0VfSUQpKSB7XFxuICAgIHBvcnRhbEJhc2VVUkwgPSAnZGV2LnBvcnRhbC5hbWFsdG8uY29tJ1xcbn1cXG5cXG5kZWYgaHRtbExpbmsgPSBcXFwiaHR0cHM6Ly8kcG9ydGFsQmFzZVVSTC8jL2VkaXQtdHJhbnNhY3Rpb24vJElOU1RBTkNFX0lEL3A2X2RlbW8uVHJhbnNhY3Rpb25zL1xcXCIrVVJMRW5jb2Rlci5lbmNvZGUoJ1tcXFwiJyt0cmFuc2FjdGlvbklkKydcXFwiXScsICd1dGYtOCcpXFxucDYucGlwZWxpbmUucHV0ICdocmVmJywgaHRtbExpbmssICd0ZXh0L3BsYWluJ1xcblxcbmRlZiBkb2NOdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uQnVzaW5lc3NEb2NOdW1iZXIudGV4dCgpXFxuZGVmIHRvdGFsQW1vdW50ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09ICdUb3RhbCBBbW91bnQnfS5WYWx1ZS50ZXh0KClcXG5cXG5pZiAoZG9jTnVtYmVyID09IG51bGwpIHtcXG4gICAgZG9jTnVtYmVyID0gJydcXG59XFxuXFxuaWYgKHRvdGFsQW1vdW50ID09IG51bGwpIHtcXG4gICAgdG90YWxBbW91bnQgPSAnJ1xcbn1cXG5cXG5cXG5wNi5waXBlbGluZS5wdXQgJ2RvY051bWJlcicsIGRvY051bWJlciwgJ3RleHQvcGxhaW4nXFxucDYucGlwZWxpbmUucHV0ICd0b3RhbEFtb3VudCcsIHRvdGFsQW1vdW50LCAndGV4dC9wbGFpbidcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDQyNjY3NDE1fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVQTy1IYW5kbGVBY3Rpb25SZWplY3RPcmRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uUmVqZWN0T3JkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFBPIFRyYW5zYWN0aW9uSW5mbyB1cGRhdGVzIGZvciBhIFJlamVjdGVkIE9yZGVyIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgSGFuZGxlUHVyY2hhc2VPcmRlciBXb3JrZmxvdyBTdGVwXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTY3MDEwMDM0NzgzLFwicmV2aXNpb25JZFwiOlwiMDg4ZjYyZGMwMWEzODMwZTUwMWUxNmM0ZTIzZjhjZWZcIixcIm1haW5TY3JpcHRcIjpcImltcG9ydCBncm9vdnkuanNvbi4qXFxuaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0XFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaXRlbUlkcyA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuaWRzJ1xcblxcbmRlZiBpdGVtUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCBpdGVtSWRzKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZXhpc3RzKGl0ZW1QaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuZGVmIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxcblNpbXBsZURhdGVGb3JtYXQgdHJhbnNhY3Rpb25fc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKVxcblxcbmRlZiBmb3JtYXRlZERhdGUgPSB0cmFuc2FjdGlvbl9zZGYuZm9ybWF0KGN1cnJlbnREYXRlKVxcblxcbmRlZiByZWFzb24gPSBwNi5waXBlbGluZS5nZXQgJ3JlYXNvbidcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSAnUmVqZWN0ZWQnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlID0gcmVhc29uXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNEYXRlID0gZm9ybWF0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5cXG5kZWYgaXBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSygnVHJhbnNhY3Rpb25JbmZvJywgdHJhbnNhY3Rpb25JZClcXG5cXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDEwMDM0NzgzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiSGFuZGxlUXVvdGVUcmFuc2FjdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVF1b3RlVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIHRoZSByZWNlcHRpb24gb2YgYSBRdW90ZSAoZmxpcCB0byBhIFB1cmNoYXNlT3JkZXIgVUJMIERvY3VtZW50LCBjcmVhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyBUcmFuc2FjdGlvbkluZm8sIHN0b3JhZ2UgdG8gZmlsZSBzeXN0ZW0pIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgQmxvY2tjaGFpbkV2ZW50SGFuZGxlciBzY3JpcHRcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDcyNDc5MDYsXCJyZXZpc2lvbklkXCI6XCI3YTE4NDhlZDZkMGIzMGNiYTRlM2M5NjA2NTZmZTJmMFwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmltcG9ydCBqYXZhLnV0aWwuVVVJRFxcbmltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5cXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG5kZWYgcXVvdGVDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICd1YmwnXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoZmFsc2UsIHRydWUpXFxuZGVmIHF1b3RlID0gc2x1cnBlci5wYXJzZVRleHQocXVvdGVDb250ZW50KVxcblxcbmRlZiBhcHBsaWNhdGlvbklkID0gJ0RlbW9BcF9EZXYnXFxuXFxuLy8gQ2FsY3VsYXRlIGlzc3VlIGRhdGUgYW5kIHRpbWVcXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZURhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXktTU0tZGRcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZVRpbWUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcIkhIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5cXG5kZWYgc2VsbGVyTmFtZSA9IHF1b3RlLlNlbGxlclN1cHBsaWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuZGVmIGJ1eWVyTmFtZSA9IHF1b3RlLk9yaWdpbmF0b3JDdXN0b21lclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiB0b3RhbEFtb3VudCA9IHF1b3RlLlF1b3RlZE1vbmV0YXJ5VG90YWwuUGF5YWJsZUFtb3VudC50ZXh0KClcXG5kZWYgdG90YWxDdXJyZW5jeSA9IHF1b3RlLlF1b3RlZE1vbmV0YXJ5VG90YWwuUGF5YWJsZUFtb3VudC4nQGN1cnJlbmN5SUQnLnRleHQoKVxcblxcbmRlZiBxdW90ZUlkID0gcXVvdGUuSUQudGV4dCgpXFxuZGVmIGNvbW1lbnRzID0gcXVvdGUuTm90ZS50ZXh0KClcXG5cXG5pbnQgbmJMaW5lcyA9IHF1b3RlLlF1b3RhdGlvbkxpbmUuc2l6ZSgpXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdQdXJjaGFzZU9yZGVyJ1xcbmRlZiBwdXJjaGFzZU9yZGVySWQgPSBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpXFxuZGVmIHN0YXR1cyA9ICdSZWNlaXZlZCdcXG5kZWYgc3RhdHVzTWVzc2FnZSA9ICdSZWNlaXZlZCBieSBEZW1vIEFwcCdcXG5cXG5kZWYgc291cmNlVVJJID0gXFxcImZpbGU6Ly8kUDZfREFUQS9yZXNvdXJjZXMvZG9jdW1lbnRzL1F1b3RlL1xcXCIgKyBxdW90ZUlkICsgXFxcIi54bWxcXFwiXFxuZGVmIHRhcmdldFVSSSA9IFxcXCJmaWxlOi8vJFA2X0RBVEEvcmVzb3VyY2VzL2RvY3VtZW50cy9QdXJjaGFzZU9yZGVyL1xcXCIgKyBwdXJjaGFzZU9yZGVySWQgKyBcXFwiLnhtbFxcXCJcXG5cXG5kZWYgb3JkZXJMaW5lcyA9ICcnXFxuXFxucXVvdGUuUXVvdGF0aW9uTGluZS5lYWNoIHsgbXlMaW5lIC0+XFxuXFxuICAgIG9yZGVyTGluZXMgKz0gXFxcIlxcXCJcXFwiPGNhYzpPcmRlckxpbmU+XFxuICAgIDxjYmM6Tm90ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTm90ZS50ZXh0KCkpfTwvY2JjOk5vdGU+XFxuICAgIDxjYWM6TGluZUl0ZW0+XFxuICAgICAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuSUQudGV4dCgpKX08L2NiYzpJRD5cXG4gICAgICA8Y2JjOlF1YW50aXR5IHVuaXRDb2RlPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUXVhbnRpdHkuJ0B1bml0Q29kZScudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5RdWFudGl0eS50ZXh0KCkpfTwvY2JjOlF1YW50aXR5PlxcbiAgICAgIDxjYmM6TGluZUV4dGVuc2lvbkFtb3VudCBjdXJyZW5jeUlEPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uTGluZUV4dGVuc2lvbkFtb3VudC4nQGN1cnJlbmN5SUQnLnRleHQoKSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uTGluZUV4dGVuc2lvbkFtb3VudC50ZXh0KCkpfTwvY2JjOkxpbmVFeHRlbnNpb25BbW91bnQ+XFxuICAgICAgPGNhYzpQcmljZT5cXG4gICAgICAgIDxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlByaWNlLlByaWNlQW1vdW50LidAY3VycmVuY3lJRCcudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5QcmljZUFtb3VudC50ZXh0KCkpfTwvY2JjOlByaWNlQW1vdW50PlxcbiAgICAgICAgPGNiYzpCYXNlUXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5CYXNlUXVhbnRpdHkuJ0B1bml0Q29kZScudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5CYXNlUXVhbnRpdHkudGV4dCgpKX08L2NiYzpCYXNlUXVhbnRpdHk+XFxuICAgICAgPC9jYWM6UHJpY2U+XFxuICAgICAgPGNhYzpJdGVtPlxcbiAgICAgICAgPGNiYzpEZXNjcmlwdGlvbj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uSXRlbS5EZXNjcmlwdGlvbi50ZXh0KCkpfTwvY2JjOkRlc2NyaXB0aW9uPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX08L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOkl0ZW0+XFxuICAgIDwvY2FjOkxpbmVJdGVtPlxcbiAgPC9jYWM6T3JkZXJMaW5lPlxcbiAgICBcXFwiXFxcIlxcXCJcXG59XFxuXFxuXFxuZGVmIG9yZGVyQ29udGVudCA9IFxcXCJcXFwiXFxcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPE9yZGVyIHhtbG5zPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpPcmRlci0yXFxcIlxcbiAgeG1sbnM6Y2FjPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25BZ2dyZWdhdGVDb21wb25lbnRzLTJcXFwiXFxuICB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gIDxjYmM6VUJMVmVyc2lvbklEPjIuMTwvY2JjOlVCTFZlcnNpb25JRD5cXG4gIDxjYmM6Q3VzdG9taXphdGlvbklEPnVybjp3d3cuY2VuYmlpLmV1OnRyYW5zYWN0aW9uOmJpaWNvcmV0cmRtMDAxOnZlcjEuMDwvY2JjOkN1c3RvbWl6YXRpb25JRD5cXG4gIDxjYmM6UHJvZmlsZUlEIHNjaGVtZUFnZW5jeUlEPVxcXCJCSUlcXFwiIHNjaGVtZUlEPVxcXCJQcm9maWxlXFxcIlxcbiAgICA+dXJuOnd3dy5jZW5iaWkuZXU6cHJvZmlsZTpCSUkwMTp2ZXIxLjA8L2NiYzpQcm9maWxlSUQ+XFxuICA8Y2JjOklEPiR7cDYudXRpbHMuZXNjYXBlWG1sKHB1cmNoYXNlT3JkZXJJZCl9PC9jYmM6SUQ+XFxuICA8Y2JjOklzc3VlRGF0ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvY2JjOklzc3VlRGF0ZT5cXG4gICA8Y2JjOklzc3VlVGltZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZVRpbWUpfTwvY2JjOklzc3VlVGltZT5cXG4gIDxjYmM6Tm90ZT5JbmZvcm1hdGlvbiB0ZXh0IGZvciB0aGUgd2hvbGUgb3JkZXI8L2NiYzpOb3RlPlxcbiAgPGNiYzpEb2N1bWVudEN1cnJlbmN5Q29kZT5TRUs8L2NiYzpEb2N1bWVudEN1cnJlbmN5Q29kZT5cXG4gIDxjYmM6QWNjb3VudGluZ0Nvc3RDb2RlPlByb2plY3QxMjM8L2NiYzpBY2NvdW50aW5nQ29zdENvZGU+XFxuICA8Y2FjOlF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPlF1b3RlSUQxMjM8L2NiYzpJRD5cXG4gIDwvY2FjOlF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpPcmRlckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPlJqZWN0ZWRPcmRlcklEMTIzPC9jYmM6SUQ+XFxuICA8L2NhYzpPcmRlckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpPcmlnaW5hdG9yRG9jdW1lbnRSZWZlcmVuY2U+XFxuICAgIDxjYmM6SUQ+TUFGTzwvY2JjOklEPlxcbiAgPC9jYWM6T3JpZ2luYXRvckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpDb250cmFjdD5cXG4gICAgPGNiYzpJRD4zNDMyMjwvY2JjOklEPlxcbiAgICA8Y2JjOkNvbnRyYWN0VHlwZT5GcmFtZXdvcmtBZ3JlZW1lbnRJRDEyMzwvY2JjOkNvbnRyYWN0VHlwZT5cXG4gIDwvY2FjOkNvbnRyYWN0PlxcbiAgPGNhYzpCdXllckN1c3RvbWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNiYzpFbmRwb2ludElEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAwMDcyMzExMTE1PC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAwMDcwMDExMTE1PC9jYmM6SUQ+XFxuICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEPlBhcnR5SUQxMjM8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKGJ1eWVyTmFtZSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+MTIzNDU2Nzg5MDEyMzwvY2JjOklEPlxcbiAgICAgICAgPGNiYzpQb3N0Ym94PlBvQm94MTIzPC9jYmM6UG9zdGJveD5cXG4gICAgICAgIDxjYmM6U3RyZWV0TmFtZT5Sw6VkaHVzZ2F0YW48L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT4ybmQgZmxvb3I8L2NiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+NTwvY2JjOkJ1aWxkaW5nTnVtYmVyPlxcbiAgICAgICAgPGNiYzpEZXBhcnRtZW50PlB1cmNoYXNpbmcgZGVwYXJ0bWVudDwvY2JjOkRlcGFydG1lbnQ+XFxuICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgPGNiYzpQb3N0YWxab25lPjExMDAwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5SZWdpb25YPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPkpvaG5zc29ucyBCeWdndmFyb3IgQUI8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIlNFOk9SR05SXFxcIj41NTMyMzMxMTgzPC9jYmM6Q29tcGFueUlEPlxcbiAgICAgICAgPGNhYzpSZWdpc3RyYXRpb25BZGRyZXNzPlxcbiAgICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+UmVnaW9uWDwvY2JjOkNvdW50cnlTdWJlbnRpdHk+XFxuICAgICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgICA8Y2JjOklkZW50aWZpY2F0aW9uQ29kZT5TRTwvY2JjOklkZW50aWZpY2F0aW9uQ29kZT5cXG4gICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgIDwvY2FjOlJlZ2lzdHJhdGlvbkFkZHJlc3M+XFxuICAgICAgPC9jYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpCdXllckN1c3RvbWVyUGFydHk+XFxuICA8Y2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNiYzpFbmRwb2ludElEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj43MzAyMzQ3MjMxMTExPC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEPlNlbGxlclBhcnR5SUQxMjM8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNlbGxlck5hbWUpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjA5ODc2NTQzMjExMjM8L2NiYzpJRD5cXG4gICAgICAgIDxjYmM6UG9zdGJveD4zMjE8L2NiYzpQb3N0Ym94PlxcbiAgICAgICAgPGNiYzpTdHJlZXROYW1lPkt1bmdzZ2F0YW48L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT5zdWl0ZTEyPC9jYmM6QWRkaXRpb25hbFN0cmVldE5hbWU+XFxuICAgICAgICA8Y2JjOkJ1aWxkaW5nTnVtYmVyPjIyPC9jYmM6QnVpbGRpbmdOdW1iZXI+XFxuICAgICAgICA8Y2JjOkRlcGFydG1lbnQ+U2FsZXMgZGVwYXJ0bWVudDwvY2JjOkRlcGFydG1lbnQ+XFxuICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgPGNiYzpQb3N0YWxab25lPjExMDAwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5SZWdpb25YPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPk1vZGVybmEgUHJvZHVrdGVyIEFCPC9jYmM6UmVnaXN0cmF0aW9uTmFtZT5cXG4gICAgICAgIDxjYmM6Q29tcGFueUlEIHNjaGVtZUlEPVxcXCJTRTpPUkdOUlxcXCI+NTUzMjMzMjI4MzwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICAgIDxjYWM6UmVnaXN0cmF0aW9uQWRkcmVzcz5cXG4gICAgICAgICAgPGNiYzpDaXR5TmFtZT5TdG9ja2hvbG08L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PlJlZ2lvblg8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgIDwvY2FjOkNvdW50cnk+XFxuICAgICAgICA8L2NhYzpSZWdpc3RyYXRpb25BZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5TGVnYWxFbnRpdHk+XFxuICAgIDwvY2FjOlBhcnR5PlxcbiAgPC9jYWM6U2VsbGVyU3VwcGxpZXJQYXJ0eT5cXG4gIDxjYWM6T3JpZ2luYXRvckN1c3RvbWVyUGFydHk+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+MDk4NzY3ODMyMTEyMzwvY2JjOklEPlxcbiAgICAgIDwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICA8Y2JjOk5hbWU+TW9kZXJuYSBQcm9kdWt0ZXIgQUI8L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOlBhcnR5TmFtZT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gIDxjYWM6QW50aWNpcGF0ZWRNb25ldGFyeVRvdGFsPlxcbiAgICA8Y2JjOlBheWFibGVBbW91bnQgY3VycmVuY3lJRCA9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKHRvdGFsQ3VycmVuY3kpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwodG90YWxBbW91bnQpfTwvY2JjOlBheWFibGVBbW91bnQ+XFxuICA8L2NhYzpBbnRpY2lwYXRlZE1vbmV0YXJ5VG90YWw+XFxuICAke29yZGVyTGluZXN9XFxuPC9PcmRlcj5cXG5cXG5cXFwiXFxcIlxcXCJcXG5cXG5cXG5kZWYgdGFyZ2V0RmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCh0YXJnZXRVUkkpXFxuXFxuRmlsZVV0aWxzLndyaXRlU3RyaW5nVG9GaWxlKHRhcmdldEZpbGUsIG9yZGVyQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHtwdXJjaGFzZU9yZGVySWR9PC9JZD5cXG4gICAgPENyZWF0aW9uRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9DcmVhdGlvbkRhdGU+XFxuICAgIDxUcmFuc2FjdGlvblR5cGU+UHVyY2hhc2UgT3JkZXI8L1RyYW5zYWN0aW9uVHlwZT5cXG4gICAgPFRyYW5zYWN0aW9uTnVtYmVyPiR7cHVyY2hhc2VPcmRlcklkfTwvVHJhbnNhY3Rpb25OdW1iZXI+XFxuICAgIDxTb3VyY2VTeXN0ZW0+RGVtbyBBcHA8L1NvdXJjZVN5c3RlbT5cXG4gICAgPFRhcmdldFN5c3RlbS8+XFxuICAgIDxTZW5kZXIvPlxcbiAgICA8RmluYWxSZWNpcGllbnQ+U3VwcGxpZXI8L0ZpbmFsUmVjaXBpZW50PlxcbiAgICA8VHJhbnNmZXJQcm90b2NvbD5CbG9ja2NoYWluPC9UcmFuc2ZlclByb3RvY29sPlxcbiAgICA8RGVsaXZlcmVkVmlhPkFtYWx0bzwvRGVsaXZlcmVkVmlhPlxcbiAgICA8U291cmNlRG9jdW1lbnRGb3JtYXQ+VUJMPC9Tb3VyY2VEb2N1bWVudEZvcm1hdD5cXG4gICAgPFNvdXJjZURvY3VtZW50VVJJPiR7c291cmNlVVJJfTwvU291cmNlRG9jdW1lbnRVUkk+XFxuICAgIDxTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlPnRleHQveG1sOyBjaGFyc2V0PXV0Zi04PC9Tb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8UGl2b3REb2N1bWVudEZvcm1hdD5VQkw8L1Bpdm90RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxQaXZvdERvY3VtZW50VVJJPiR7dGFyZ2V0VVJJfTwvUGl2b3REb2N1bWVudFVSST5cXG4gICAgPFBpdm90RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvUGl2b3REb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRGb3JtYXQ+VUJMPC9UYXJnZXREb2N1bWVudEZvcm1hdD5cXG4gICAgPFRhcmdldERvY3VtZW50VVJJPiR7dGFyZ2V0VVJJfTwvVGFyZ2V0RG9jdW1lbnRVUkk+XFxuICAgIDxUYXJnZXREb2N1bWVudENvbnRlbnRUeXBlPnRleHQveG1sOyBjaGFyc2V0PXV0Zi04PC9UYXJnZXREb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzQ29kZT4ke3N0YXR1c308L1RlY2huaWNhbFN0YXR1c0NvZGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNNZXNzYWdlPiR7c3RhdHVzTWVzc2FnZX08L1RlY2huaWNhbFN0YXR1c01lc3NhZ2U+XFxuICAgIDxUZWNobmljYWxTdGF0dXNEYXRlPiR7Zm9ybWF0dGVkRGF0ZX08L1RlY2huaWNhbFN0YXR1c0RhdGU+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzQ29kZS8+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzTWVzc2FnZS8+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzRGF0ZS8+XFxuICAgIDxGbGFncz57XFxcImFhdmlzaWJsZVxcXCI6IHRydWV9PC9GbGFncz5cXG4gICAgPE9yZ1BhdGg+LyR7YXBwbGljYXRpb25JZH0vPC9PcmdQYXRoPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5TZWxsZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChzZWxsZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QnV5ZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChidXllck5hbWUpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgICAgPEtleT5Db21tZW50PC9LZXk+XFxuICAgICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoY29tbWVudHMpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+SXNzdWUgRGF0ZTwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgICAgPEtleT5MaW5lIGl0ZW1zPC9LZXk+XFxuICAgICAgICA8VmFsdWU+JHtuYkxpbmVzfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PlRvdGFsIEFtb3VudDwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEFtb3VudCl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkN1cnJlbmN5PC9LZXk+XFxuICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHRvdGFsQ3VycmVuY3kpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QXBwbGljYXRpb248L0tleT5cXG4gICAgICA8VmFsdWU+cDZfZGVtbzwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT4gICAgXFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoJ1RyYW5zYWN0aW9uSW5mbycsIHB1cmNoYXNlT3JkZXJJZClcXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUodHJhbnNhY3Rpb25JbmZvLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNjQ3MjQ3OTA2fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uRGVjbGluZSIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvbkRlY2xpbmVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFJGUSBUcmFuc2FjdGlvbkluZm8gdXBkYXRlIGZvciBEZWNsaW5lZCBSRlEgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBIYW5kbGVSZXF1ZXN0Rm9yUXVvdGF0aW9uIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE2NDUxMjIzNDQsXCJyZXZpc2lvbklkXCI6XCI2NjU2Y2JkNzNkMzhhMjhkYmYwN2UyZTFmMjliZWVkMVwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuaW1wb3J0IGphdmEudXRpbC5VVUlEXFxuXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgcmZxSWQgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5kZWYgcmVhc29uID0gcDYucGlwZWxpbmUuZ2V0ICdyZWFzb24nXFxuXFxuZGVmIG5vdyA9IGhlbHBlci5ub3coKVxcblxcbi8vIEZldGNoIHRoZSBSRlEgdHJhbnNhY3Rpb24gaW5mb1xcbmRlZiByZnFQayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIHJmcUlkKVxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZ2V0KHJmcVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG4vLyBEZWNsaW5lIFJGUSBsb2NhbGx5XFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcblxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZSA9ICdEZWNsaW5lZCdcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSByZWFzb25cXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHJmcVBrKVxcblxcbi8vIERlY2xpbmUgUkZRIG9uIHRoZSBibG9ja2NoYWluXFxuZGVmIGRlY2xpbmVJZCA9IFVVSUQucmFuZG9tVVVJRCgpXFxuaGVscGVyLmRlY2xpbmVSRlEoZGVjbGluZUlkLCBVVUlELmZyb21TdHJpbmcocmZxSWQpLCBub3cpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTY0NTEyMjM0NH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXIiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVBPLUhhbmRsZUFjdGlvbkFjY2VwdE9yZGVyXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkhhbmRsZSBQTyBUcmFuc2FjdGlvbkluZm8gdXBkYXRlcyBmb3IgYW4gQWNjZXB0ZWQgT3JkZXIgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBIYW5kbGVQdXJjaGFzZU9yZGVyIFdvcmtmbG93IFN0ZXBcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ4NjcsXCJyZXZpc2lvbklkXCI6XCJhZmUwNzhkYzQ3MjEzYzA4YmYxMTJkNjdhZTUyNTM4NFwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXRcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpdGVtSWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGl0ZW1QayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGl0ZW1JZHMpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5leGlzdHMoaXRlbVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXFxuU2ltcGxlRGF0ZUZvcm1hdCB0cmFuc2FjdGlvbl9zZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpXFxuXFxuZGVmIGZvcm1hdGVkRGF0ZSA9IHRyYW5zYWN0aW9uX3NkZi5mb3JtYXQoY3VycmVudERhdGUpXFxuXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gJ0FjY2VwdGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNEYXRlID0gZm9ybWF0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG5cXG5kZWYgc2FsZXNvcmRlcm51bWJlciA9IHA2LnBpcGVsaW5lLmdldCAnc2FsZXNvcmRlcm51bWJlcidcXG5cXG5pZiAoc2FsZXNvcmRlcm51bWJlciE9bnVsbCAmJiAhJycuZXF1YWxzKHNhbGVzb3JkZXJudW1iZXIpKSB7XFxuICAgIFxcbiAgICBpbnQgbmJLZXlWYWx1ZXMgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuc2l6ZSgpXFxuICAgIHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZVtuYktleVZhbHVlcy0xXSArIHtcXG4gICAgICAgICAgICAgS2V5VmFsdWUge1xcbiAgICAgICAgICAgIEtleShcXFwiU2FsZXMgT3JkZXIgTnVtYmVyXFxcIilcXG4gICAgICAgICAgICBWYWx1ZShzYWxlc29yZGVybnVtYmVyKVxcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblxcbmRlZiB0cmFuc2FjdGlvbklkID0gdHJhbnNhY3Rpb25JbmZvLklkLnRleHQoKVxcblxcbmRlZiBpcGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdUcmFuc2FjdGlvbkluZm8nLCB0cmFuc2FjdGlvbklkKVxcblxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIGlwaywgJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTAwMzQ4Njd9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJCbG9ja2NoYWluRXZlbnRIYW5kbGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQmxvY2tjaGFpbkV2ZW50SGFuZGxlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJIYW5kbGUgZXZlbnRzIHJlY2VpdmVkIGZyb20gdGhlIGJsb2NrY2hhaW5cIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg0MTIsXCJyZXZpc2lvbklkXCI6XCI2MmExZjI0NmMyZmZlZDU0ZmFiOGVkOGJjOGVkMjhjYlwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiB0b3BpY3MgPSBwNi5waXBlbGluZS5nZXQoJ2xvZ1RvcGljcycpLnNwbGl0KCcsJylcXG5kZWYgZXZlbnRIYXNoID0gdG9waWNzWzBdXFxuZGVmIGRhdGEgPSBwNi5waXBlbGluZS5nZXQoJ2xvZ0RhdGEnKVxcblxcbmlmIChldmVudEhhc2ggPT0gUkZRU21hcnRDb250cmFjdEhlbHBlci5SRlFSZWNlaXZlZEV2ZW50SGFzaCkge1xcbiAgICBkZWYgKHJmcUlkLCBpc3N1ZWRBdCwgdWJsKSA9IGhlbHBlci5yZWFkUkZRUmVjZWl2ZWRFdmVudCh0b3BpY3MsIGRhdGEpXFxuXFxuICAgIHA2LnBpcGVsaW5lLnB1dChcXFwidWJsXFxcIiwgdWJsKVxcbiAgICBwNi5jb250cm9sLmNhbGwgJ3A2X2RlbW8uUmVjZWl2ZVJGUVRyYW5zYWN0aW9uJ1xcbn1cXG5lbHNlIGlmIChldmVudEhhc2ggPT0gUkZRU21hcnRDb250cmFjdEhlbHBlci5SRlFEZWNsaW5lZEV2ZW50SGFzaCkge1xcbiAgICBkZWYgKHN1cHBsaWVyLCByZnFJZCwgcXVvdGVJZCwgaXNzdWVkQXQpID0gaGVscGVyLnJlYWRSRlFEZWNsaW5lZEV2ZW50KHRvcGljcywgZGF0YSlcXG5cXG4gICAgbG9nLmluZm8gXFxcIlJGUSBcXFwiICsgcmZxSWQgKyBcXFwiIHdhcyBkZWNsaW5lZC5cXFwiXFxufVxcbmVsc2UgaWYgKGV2ZW50SGFzaCA9PSBSRlFTbWFydENvbnRyYWN0SGVscGVyLlF1b3RlUmVjZWl2ZWRFdmVudEhhc2gpIHtcXG4gICAgZGVmIChzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0LCB1YmwpID0gaGVscGVyLnJlYWRRdW90ZVJlY2VpdmVkRXZlbnQodG9waWNzLCBkYXRhKVxcblxcbiAgICBwNi5waXBlbGluZS5wdXQoXFxcInVibFxcXCIsIHVibClcXG4gICAgcDYuY29udHJvbC5jYWxsICdwNl9kZW1vLkhhbmRsZVF1b3RlVHJhbnNhY3Rpb24nXFxufVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg0MTJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGUiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFJGUSBUcmFuc2FjdGlvbkluZm8gdXBkYXRlIGFuZCBRdW90ZSBjcmVhdGlvbiAtIFNjcmlwdCBjYWxsZWQgYnkgdGhlIEhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb24gV29ya2Zsb3cgU3RlcFwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQ0MTQ0NjI5MixcInJldmlzaW9uSWRcIjpcIjA3MzAxYjEwZGVhM2U4NzE0NWE4MmFiNWUwNjA2MGEwXCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsXFxuaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0XFxuXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIHhtbCA9IHA2LnBpcGVsaW5lLmdldFhtbCAneG1sJ1xcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIHJmcUlkID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuLy8gRmV0Y2ggUkZRIGZyb20gZGF0YWJhc2VcXG5kZWYgcmZxUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCByZnFJZClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmdldChyZnFQaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuLy8gQ2FsY3VsYXRlIGlzc3VlIGRhdGUgYW5kIHRpbWVcXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZURhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXktTU0tZGRcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZVRpbWUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcIkhIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5cXG4vLyBVcGRhdGUgdGhlIFJGUVxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZSA9ICdRdW90ZSBwcm92aWRlZCdcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSAnJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZSA9ICdIYW5kbGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG5kZWYgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCggdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKSlcXG5cXG5TdHJpbmcgcmZxQ29udGVudCA9IEZpbGVVdGlscy5yZWFkRmlsZVRvU3RyaW5nKHNyY0ZpbGUpXFxuZGVmIHJmcSA9IHNsdXJwZXIucGFyc2VUZXh0KHJmcUNvbnRlbnQpXFxuXFxuZGVmIHNlbGxlck5hbWUgPSByZnEuU2VsbGVyU3VwcGxpZXJQYXJ0eS5QYXJ0eS5QYXJ0eU5hbWUuTmFtZS50ZXh0KClcXG5kZWYgYnV5ZXJOYW1lID0gcmZxLk9yaWdpbmF0b3JDdXN0b21lclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiByZnFJc3N1ZURhdGUgPSByZnEuSXNzdWVEYXRlLnRleHQoKVxcblxcbnA2LnRyYW5zYWN0aW9uLnNhdmUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCByZnFQaylcXG5cXG5kZWYgbGluZXNDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICdsaW5lcydcXG5cXG4vLyBDcmVhdGUgUXVvdGUgZG9jdW1lbnRcXG5cXG5Kc29uU2x1cnBlciBqU2x1cnBlciA9IG5ldyBKc29uU2x1cnBlcigpXFxuZGVmIG15TGluZXMgPSBqU2x1cnBlci5wYXJzZVRleHQobGluZXNDb250ZW50KVxcblxcbkRlY2ltYWxGb3JtYXQgdWJsX2RmID0gbmV3IERlY2ltYWxGb3JtYXQoXFxcIiMwLjAwXFxcIilcXG5cXG5kZWYgcXVvdGF0aW9uTGluZXMgPSAnJ1xcblxcbmRlZiB0b3RhbEFtb3VudCA9IG5ldyBCaWdEZWNpbWFsKDApXFxuZGVmIHRvdGFsQ3VycmVuY3kgPSAnJ1xcblxcbmRlZiBxdW90ZUlkID0gVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKVxcblxcbnJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5lYWNoIHsgbXlMaW5lIC0+IFxcblxcbiAgICBkZWYgaW5wdXRMaW5lID0gbXlMaW5lcy5maW5kIHsgaXQuaWQgPT0gbXlMaW5lLklELnRleHQoKSB9XFxuICAgIGRlZiBpdGVtRGV0YWlsID0gaW5wdXRMaW5lLml0ZW1zLmZpbmQgeyBpdC5pZCA9PSBpbnB1dExpbmUuaXRlbSB9XFxuICAgIFxcbiAgICBCaWdEZWNpbWFsIHVuaXRQcmljZSA9IG5ldyBCaWdEZWNpbWFsKGl0ZW1EZXRhaWwucHJpY2UpXFxuICAgIFxcbiAgICBpZiAoaW5wdXRMaW5lLmRpc2NvdW50IT1udWxsICYmICEnJy5lcXVhbHMoaW5wdXRMaW5lLmRpc2NvdW50KSAmJiAhJzAnLmVxdWFscyhpbnB1dExpbmUuZGlzY291bnQpKSB7XFxuICAgICAgICBCaWdEZWNpbWFsIGRpc2NvdW50ID0gIG5ldyBCaWdEZWNpbWFsKDEwMCkuXFx0c3VidHJhY3QobmV3IEJpZ0RlY2ltYWwoaW5wdXRMaW5lLmRpc2NvdW50KSlcXG4gICAgICAgIHVuaXRQcmljZSA9IHVuaXRQcmljZS5tdWx0aXBseShkaXNjb3VudCkuZGl2aWRlKG5ldyBCaWdEZWNpbWFsKDEwMCkpXFxuICAgIH1cXG4gICAgXFxuICAgIGRlZiBsaW5lUXR5ID0gbmV3IEJpZ0RlY2ltYWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LnRleHQoKSlcXG4gICAgXFxuICAgIGRlZiBsaW5lQW1tb3VudCA9IGxpbmVRdHkubXVsdGlwbHkodW5pdFByaWNlKVxcbiAgICBcXG4gICAgdG90YWxBbW91bnQgPSB0b3RhbEFtb3VudC5hZGQobGluZUFtbW91bnQpXFxuICAgIHRvdGFsQ3VycmVuY3kgPSBpdGVtRGV0YWlsLmN1cnJlbmN5XFxuICAgIFxcbiAgICBxdW90YXRpb25MaW5lcyArPSAgXFxcIlxcXCJcXFwiPGNhYzpRdW90YXRpb25MaW5lPlxcbiAgICAgIDxjYmM6SUQ+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLklELnRleHQoKSl9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpOb3RlPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5Ob3RlLnRleHQoKSl9PC9jYmM6Tm90ZT5cXG4gICAgICA8Y2FjOkxpbmVJdGVtPlxcbiAgICAgICAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uSUQudGV4dCgpKX08L2NiYzpJRD5cXG4gICAgICAgIDxjYmM6UXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5RdWFudGl0eS4nQHVuaXRDb2RlJy50ZXh0KCkpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LnRleHQoKSl9PC9jYmM6UXVhbnRpdHk+XFxuICAgICAgICA8Y2JjOkxpbmVFeHRlbnNpb25BbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC5jdXJyZW5jeSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbCh1YmxfZGYuZm9ybWF0KGxpbmVBbW1vdW50KSl9PC9jYmM6TGluZUV4dGVuc2lvbkFtb3VudD5cXG4gICAgICAgIDxjYWM6UHJpY2U+XFxuICAgICAgICAgIDxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC5jdXJyZW5jeSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbCh1YmxfZGYuZm9ybWF0KHVuaXRQcmljZSkpfTwvY2JjOlByaWNlQW1vdW50PlxcbiAgICAgICAgICA8Y2JjOkJhc2VRdWFudGl0eSB1bml0Q29kZT1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC51b20pfVxcXCI+MTwvY2JjOkJhc2VRdWFudGl0eT5cXG4gICAgICAgIDwvY2FjOlByaWNlPlxcbiAgICAgICAgPGNhYzpJdGVtPlxcbiAgICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlucHV0TGluZS5pdGVtKX08L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX08L2NiYzpOYW1lPlxcbiAgICAgICAgPC9jYWM6SXRlbT5cXG4gICAgICA8L2NhYzpMaW5lSXRlbT5cXG4gICAgPC9jYWM6UXVvdGF0aW9uTGluZT5cXG4gICAgXFxcIlxcXCJcXFwiXFxufVxcblxcbmRlZiBxdW90ZVVCTCA9IFxcXCJcXFwiXFxcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPFF1b3RhdGlvbiB4bWxucz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6UXVvdGF0aW9uLTJcXFwiIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIiB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gIDxjYmM6VUJMVmVyc2lvbklEPjIuMDwvY2JjOlVCTFZlcnNpb25JRD5cXG4gIDxjYmM6Q3VzdG9taXphdGlvbklEPk9JT1VCTC0yLjE8L2NiYzpDdXN0b21pemF0aW9uSUQ+XFxuICA8Y2JjOlByb2ZpbGVJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiMzIwXFxcIiBzY2hlbWVJRD1cXFwidXJuOm9pb3VibDppZDpwcm9maWxlaWQtMS4yXFxcIj5Qcm9jdXJlbWVudC1RdW9TaW0tMS4wPC9jYmM6UHJvZmlsZUlEPlxcbiAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChxdW90ZUlkKX08L2NiYzpJRD5cXG4gIDxjYmM6Q29weUluZGljYXRvcj5mYWxzZTwvY2JjOkNvcHlJbmRpY2F0b3I+XFxuICA8Y2JjOlVVSUQ+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9jYmM6VVVJRD5cXG4gIDxjYmM6SXNzdWVEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgPGNiYzpJc3N1ZVRpbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICA8Y2JjOk5vdGUgbGFuZ3VhZ2VJRD1cXFwiZGEtZGtcXFwiPkJlc3RpbGxpbmcgYWYgY29tcHV0ZXJlPC9jYmM6Tm90ZT5cXG4gIDxjYWM6UmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPkc4NjdCPC9jYmM6SUQ+XFxuXFx0PGNiYzpVVUlEPiR7cDYudXRpbHMuZXNjYXBlWG1sKHJmcUlkKX08L2NiYzpVVUlEPlxcblxcdDxjYmM6SXNzdWVEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHJmcUlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgPC9jYWM6UmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgICA8Y2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+TEVWMDAxMjM8L2NiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYmM6RW5kcG9pbnRJRCBzY2hlbWVJRD1cXFwiREs6Q1ZSXFxcIj5ESzE4Mjk2Nzk5PC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUlEPVxcXCJESzpDVlJcXFwiPkRLMTgyOTY3OTk8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNlbGxlck5hbWUpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgIDxjYmM6QWRkcmVzc0Zvcm1hdENvZGUgbGlzdEFnZW5jeUlEPVxcXCIzMjBcXFwiIGxpc3RJRD1cXFwidXJuOm9pb3VibDpjb2RlbGlzdDphZGRyZXNzZm9ybWF0Y29kZS0xLjFcXFwiPlN0cnVjdHVyZWRESzwvY2JjOkFkZHJlc3NGb3JtYXRDb2RlPlxcbiAgICAgICAgPGNiYzpTdHJlZXROYW1lPkFybmUgSmFjb2JzZW5zIEFsbMOpPC9jYmM6U3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+MTU8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+S8O4YmVuaGF2biBTPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICA8Y2JjOlBvc3RhbFpvbmU+MjMwMDwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPkRLPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDxjYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgICAgIDxjYmM6UmVnaXN0cmF0aW9uTmFtZT5EZWxjb21wdXRlciBBL1M8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+MTgyOTY3OTk8L2NiYzpDb21wYW55SUQ+XFxuICAgICAgPC9jYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgPGNhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICAgPGNhYzpQYXJ0eT5cXG4gICAgICA8Y2JjOkVuZHBvaW50SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjU3OTgwMDA0MTY2MDQ8L2NiYzpFbmRwb2ludElEPlxcbiAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjU3OTgwMDA0MTY2MDQ8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKGJ1eWVyTmFtZSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgPGNiYzpBZGRyZXNzRm9ybWF0Q29kZSBsaXN0QWdlbmN5SUQ9XFxcIjMyMFxcXCIgbGlzdElEPVxcXCJ1cm46b2lvdWJsOmNvZGVsaXN0OmFkZHJlc3Nmb3JtYXRjb2RlLTEuMVxcXCI+U3RydWN0dXJlZERLPC9jYmM6QWRkcmVzc0Zvcm1hdENvZGU+XFxuICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QmVybnN0b3JmZnN2ZWo8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj4xNjE8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+Q2hhcmxvdHRlbmx1bmQ8L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgIDxjYmM6UG9zdGFsWm9uZT4yOTIwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+REs8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPkdlbnRvZnRlIEtvbW11bmU8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+REsxMjM0NTY3ODwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICA8L2NhYzpQYXJ0eT5cXG4gIDwvY2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcblxcdDxjYWM6UXVvdGVkTW9uZXRhcnlUb3RhbD5cXG4gICAgPGNiYzpQYXlhYmxlQW1vdW50IGN1cnJlbmN5SUQgPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKHVibF9kZi5mb3JtYXQodG90YWxBbW91bnQpKX08L2NiYzpQYXlhYmxlQW1vdW50PlxcbiAgPC9jYWM6UXVvdGVkTW9uZXRhcnlUb3RhbD5cXG4gICR7cXVvdGF0aW9uTGluZXN9XFxuPC9RdW90YXRpb24+XFxuXFxcIlxcXCJcXFwiXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdRdW90ZSdcXG5kZWYgY29tbWVudHMgPSAnJ1xcbmludCBuYkxpbmVzID0gcmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLnNpemUoKVxcblxcbmRlZiBzdGF0dXMgPSAnQ3JlYXRlZCdcXG5kZWYgc3RhdHVzTWVzc2FnZSA9ICdDcmVhdGVkIGJ5IERlbW8gQXBwJ1xcblxcbmRlZiBzb3VyY2VVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvXFxcIiArIHRyYW5zYWN0aW9uVHlwZSArIFxcXCIvXFxcIiArIHF1b3RlSWQgKyBcXFwiLnhtbFxcXCJcXG5cXG5kZWYgIHNvdXJjZUZpbGUgPSBwNi51cmkuZmlsZUZyb21Vcmwoc291cmNlVVJJKVxcbkZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZShzb3VyY2VGaWxlLCBxdW90ZVVCTCwnVVRGLTgnKVxcblxcbmRlZiBhcHBsaWNhdGlvbklkID0gJ0RlbW9BcHBfRGV2J1xcblxcbmRlZiBuZXdUcmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9JZD5cXG4gICAgPENyZWF0aW9uRGF0ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChmb3JtYXR0ZWREYXRlKX08L0NyZWF0aW9uRGF0ZT5cXG4gICAgPFRyYW5zYWN0aW9uVHlwZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0cmFuc2FjdGlvblR5cGUpfTwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9UcmFuc2FjdGlvbk51bWJlcj5cXG4gICAgPFNvdXJjZVN5c3RlbT5EZW1vIEFwcDwvU291cmNlU3lzdGVtPlxcbiAgICA8VGFyZ2V0U3lzdGVtLz5cXG4gICAgPFNlbmRlci8+XFxuICAgIDxGaW5hbFJlY2lwaWVudD5TdXBwbGllcjwvRmluYWxSZWNpcGllbnQ+XFxuICAgIDxUcmFuc2ZlclByb3RvY29sPkJsb2NrY2hhaW48L1RyYW5zZmVyUHJvdG9jb2w+XFxuICAgIDxEZWxpdmVyZWRWaWE+QW1hbHRvPC9EZWxpdmVyZWRWaWE+XFxuICAgIDxTb3VyY2VEb2N1bWVudEZvcm1hdD5VQkw8L1NvdXJjZURvY3VtZW50Rm9ybWF0PlxcbiAgICA8U291cmNlRG9jdW1lbnRVUkk+JHtwNi51dGlscy5lc2NhcGVYbWwoc291cmNlVVJJKX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3A2LnV0aWxzLmVzY2FwZVhtbChzb3VyY2VVUkkpfTwvUGl2b3REb2N1bWVudFVSST5cXG4gICAgPFBpdm90RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvUGl2b3REb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRGb3JtYXQ+VUJMPC9UYXJnZXREb2N1bWVudEZvcm1hdD5cXG4gICAgPFRhcmdldERvY3VtZW50VVJJPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNvdXJjZVVSSSl9PC9UYXJnZXREb2N1bWVudFVSST5cXG4gICAgPFRhcmdldERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1RhcmdldERvY3VtZW50Q29udGVudFR5cGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNDb2RlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHN0YXR1cyl9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChzdGF0dXNNZXNzYWdlKX08L1RlY2huaWNhbFN0YXR1c01lc3NhZ2U+XFxuICAgIDxUZWNobmljYWxTdGF0dXNEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGZvcm1hdHRlZERhdGUpfTwvVGVjaG5pY2FsU3RhdHVzRGF0ZT5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNDb2RlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNEYXRlLz5cXG4gICAgPEZsYWdzPntcXFwiYWF2aXNpYmxlXFxcIjogdHJ1ZX08L0ZsYWdzPlxcbiAgICA8T3JnUGF0aD4vJHtwNi51dGlscy5lc2NhcGVYbWwoYXBwbGljYXRpb25JZCl9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QnV5ZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChidXllck5hbWUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwodWJsX2RmLmZvcm1hdCh0b3RhbEFtb3VudCkpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkFwcGxpY2F0aW9uPC9LZXk+XFxuICAgICAgPFZhbHVlPnA2X2RlbW88L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIHF1b3RlUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdUcmFuc2FjdGlvbkluZm8nLCBxdW90ZUlkKVxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZShuZXdUcmFuc2FjdGlvbkluZm8sICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlUGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3NDQxNDQ2MjkyfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGV29ya2Zsb3dUYXNrRW5oYW5jZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWRkIEF0dHJpYnV0ZXMgdG8gV29ya2Zsb3cgVGFza3NcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTAwMzQ5MDIsXCJyZXZpc2lvbklkXCI6XCIxNTBkMGU3MDhhOGRlNTc1YTc1ZTQzNTE5OGRmMGU3MlwiLFwibWFpblNjcmlwdFwiOlwiZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGlkcylcXG5kZWYgaXRlbSA9IHA2LnRyYW5zYWN0aW9uLmdldChpcGspXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IG5ldyBYbWxTbHVycGVyKCkucGFyc2VUZXh0KGl0ZW0pXFxuXFxuZGVmIHRyYW5zYWN0aW9uTnVtYmVyID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uTnVtYmVyLnRleHQoKVxcbnA2LnBpcGVsaW5lLnB1dCAnVHJhbnNhY3Rpb25OdW1iZXInLCB0cmFuc2FjdGlvbk51bWJlciwgJ3RleHQvcGxhaW4nXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9IHRyYW5zYWN0aW9uSW5mby5UcmFuc2FjdGlvblR5cGUudGV4dCgpXFxucDYucGlwZWxpbmUucHV0ICdUcmFuc2FjdGlvblR5cGUnLCB0cmFuc2FjdGlvblR5cGUsICd0ZXh0L3BsYWluJ1xcblxcbmRlZiBlbmRwb2ludCA9IHRyYW5zYWN0aW9uSW5mby5FbmRwb2ludC50ZXh0KClcXG5wNi5waXBlbGluZS5wdXQgJ0VuZHBvaW50JywgZW5kcG9pbnQsICd0ZXh0L3BsYWluJ1xcblxcbi8vIEFkZCBjb21tb24gd29yayBpdGVtIGF0dHJpYnV0ZXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkIGIyYm94ICdXb3JrIEl0ZW1zJyB2aWV3XFxuZGVmIHN0ZXBYbWwgPSBwNi5waXBlbGluZS5nZXQgJ193Zl9zdGVwWG1sJ1xcbmRlZiBzdGF0dXNNYXAgPSBwNi53b3JrZmxvdy5sb2NhbGVUZXh0IHN0ZXBYbWwsIFxcXCJTdGF0dXNMYWJlbHMvTGFiZWxbQG5hbWU9J1xcXCIgKyBwNi5waXBlbGluZS5nZXQoJ193Zl9zdGF0dXNJZCcpICsgXFxcIiddXFxcIlxcbnA2LnBpcGVsaW5lLnB1dCAnU3RhdHVzJywgc3RhdHVzTWFwLCAnYXBwbGljYXRpb24vYjJib3guaTE4bidcXG5cXG5kZWYgYXNzaWduZWVNYXAgPSBwNi53b3JrZmxvdy5sb2NhbGVUZXh0IHN0ZXBYbWwsICdBc3NpZ25lZS9MYWJlbCdcXG5wNi5waXBlbGluZS5wdXQgJ0Fzc2lnbmVkVG8nLCBhc3NpZ25lZU1hcCwgJ2FwcGxpY2F0aW9uL2IyYm94LmkxOG4nXFxucDYucGlwZWxpbmUucHV0ICdfQVNTSUdORURUT05BTUUnLCBwNi5waXBlbGluZS5nZXQoJ193Zl9hc3NpZ25lZFRvSWQnKSwgJ3RleHQvcGxhaW4nXFxucDYucGlwZWxpbmUucHV0ICdTdGFydERhdGUnLCBwNi5waXBlbGluZS5nZXQoJ193Zl9pbnN0YW5jZVN0YXJ0RGF0ZScpLCAndGV4dC9wbGFpbidcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDEwMDM0OTAyfV0sInBsYXRmb3JtNi5jb3VudGVycyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRSRlFzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRSRlFzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIiMgb2YgUkZRcyB3aXRoIFxcXCJSZWNlaXZlZFxcXCIgdGVjaG5pY2FsIHN0YXR1cyAob3ZlciB0aGUgcGFzdCA5MCBkYXlzKVwifSxcImVuYWJsZWRcIjp0cnVlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJhbm9ueW1vdXNAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1Njc0NDAwNjAwNTYsXCJyZXZpc2lvbklkXCI6XCI3YTYwYTAyZjViYzFiOWY4ZmVlNWY0YjZjMzJiYjMzZVwiLFwibGFzdFN5bmNEYXRlXCI6MTU2NzQ0MDA2MDA1NixcInZhbHVlXCI6MC4wLFwidHlwZVwiOlwiQ09VTlRcIixcInF1ZXJ5XCI6XCIvVHJhbnNhY3Rpb25JbmZvW1RyYW5zYWN0aW9uVHlwZSA9IFxcXCJSZXF1ZXN0IEZvciBRdW90YXRpb25cXFwiIF1bVGVjaG5pY2FsU3RhdHVzQ29kZSA9IFxcXCJSZWNlaXZlZFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1Njc0NDAwNjAwNTZ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJDb3VudFF1b3Rlc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFF1b3RlcyB3aXRoIFxcXCJTZW50XFxcIiB0ZWNobmljYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAxMTcyMDA1MSxcInJldmlzaW9uSWRcIjpcImQxMWE1YzM1YzA4ODMzMjQ4OTRlOGRjOWM4MzRjNTNmXCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3MDExNzIwMDUwLFwidmFsdWVcIjowLjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9UcmFuc2FjdGlvbkluZm9bVHJhbnNhY3Rpb25UeXBlID0gXFxcIlF1b3RlXFxcIiBdW1RlY2huaWNhbFN0YXR1c0NvZGUgPSBcXFwiU2VudFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjcwMTE3MjAwNTF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIiMgb2YgRmFpbGVkIFJvdXRpbmcgT3JkZXJzXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzQ0MjcwMDEyMSxcInJldmlzaW9uSWRcIjpcImI1YjVlYWUyZmNmM2QwNGMzMTJhOGZkNjg5NDBmYTI3XCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3NDQyNzAwMTIwLFwidmFsdWVcIjo4LjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9yb3V0aW5nT3JkZXJcIixcInRhcmdldFwiOlwiRmFpbGVkUm91dGluZ09yZGVyXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1Njc0NDI3MDAxMjF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRSZWplY3RlZFBPcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkNvdW50UmVqZWN0ZWRQT3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiIyBvZiBQdXJjaGFzZSBPcmRlcnMgd2l0aCBcXFwiUmVqZWN0ZWRcXFwiIGZ1bmN0aW9uYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiZW5hYmxlZFwiOnRydWUsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAwODI0MDAzNSxcInJldmlzaW9uSWRcIjpcIjBkMjYwM2ZkYTY2Mjc4MzQ3ZWY1Y2ViN2JhMjA3ZjAzXCIsXCJsYXN0U3luY0RhdGVcIjoxNTY3MDA4MjQwMDM1LFwidmFsdWVcIjowLjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9UcmFuc2FjdGlvbkluZm9bVHJhbnNhY3Rpb25UeXBlID0gXFxcIlB1cmNoYXNlIE9yZGVyXFxcIiBdW0Z1bmN0aW9uYWxTdGF0dXNDb2RlID0gXFxcIlJlamVjdGVkXFxcIiBdW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA8IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MG19XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMywyKSldW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA+IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEzLDIpKV1cIixcInRhcmdldFwiOlwiVHJhbnNhY3Rpb25cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImFub255bW91c0BhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzAwODI0MDAzNX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5jb3VudGVycyIsIm5hbWUiOiJDb3VudEFjY2VwdGVkUE9zIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRBY2NlcHRlZFBPc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFB1cmNoYXNlIE9yZGVycyB3aXRoIFxcXCJBY2NlcHRlZFxcXCIgZnVuY3Rpb25hbCBzdGF0dXMgKG92ZXIgdGhlIHBhc3QgOTAgZGF5cylcIn0sXCJlbmFibGVkXCI6dHJ1ZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiYW5vbnltb3VzQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTY3MDA4MTgwMDkwLFwicmV2aXNpb25JZFwiOlwiMjc5YmM0YTMyZjZmYThkNDA2YWZkZTRkODU0M2U0ZWZcIixcImxhc3RTeW5jRGF0ZVwiOjE1NjcwMDgxODAwOTAsXCJ2YWx1ZVwiOjAuMCxcInR5cGVcIjpcIkNPVU5UXCIsXCJxdWVyeVwiOlwiL1RyYW5zYWN0aW9uSW5mb1tUcmFuc2FjdGlvblR5cGUgPSBcXFwiUHVyY2hhc2UgT3JkZXJcXFwiIF1bRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSBcXFwiQWNjZXB0ZWRcXFwiIF1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpIDwgY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwbX1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEzLDIpKV1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpID4gY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTMsMikpXVwiLFwidGFyZ2V0XCI6XCJUcmFuc2FjdGlvblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiYW5vbnltb3VzQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDA4MTgwMDkwfV0sInBsYXRmb3JtNi5ob21lcGFnZXMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmhvbWVwYWdlcyIsIm5hbWUiOiJEZW1vIEhvbWUiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJEZW1vIEhvbWVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVtbyBIb21lXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE3OTY1LFwicmV2aXNpb25JZFwiOlwiMzFhYmNjZWUwYmE1Zjc0NWY3NjlhMjE5NDNiMmE2YTRcIixcIm1vZHVsZXNcIjpbe1wiaWRcIjpcInA2X2RlbW8uQ291bnRSRlFzXCIsXCJvcmRlclwiOjAsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9LHtcImlkXCI6XCJwNl9kZW1vLkNvdW50UXVvdGVzXCIsXCJvcmRlclwiOjEsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9LHtcImlkXCI6XCJwNl9kZW1vLkNvdW50QWNjZXB0ZWRQT3NcIixcIm9yZGVyXCI6MixcInR5cGVcIjpcImNvdW50ZXJzXCIsXCJ3aWR0aFwiOlwic21hbGxcIixcImhlaWdodFwiOlwibWVkaXVtXCIsXCJkYXRhXCI6bnVsbH0se1wiaWRcIjpcInA2X2RlbW8uQ291bnRSZWplY3RlZFBPc1wiLFwib3JkZXJcIjozLFwidHlwZVwiOlwiY291bnRlcnNcIixcIndpZHRoXCI6XCJzbWFsbFwiLFwiaGVpZ2h0XCI6XCJtZWRpdW1cIixcImRhdGFcIjpudWxsfV19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxMzkzMTE3OTY1fV0sInBsYXRmb3JtNi5kYXRhbW9kZWxzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5kYXRhbW9kZWxzIiwibmFtZSI6IlRyYW5zYWN0aW9uSW5mbyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRyYW5zYWN0aW9uSW5mb1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUcmFuc2FjdGlvbkluZm8gZGF0YW1vZGVsXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYxMzkzMTE3OTM0LFwicmV2aXNpb25JZFwiOlwiNzMyZWFjNmEwMzViOTdjZDgzNjViY2U4Y2I3YmU3NWRcIixcInNjaGVtYVwiOlwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIiBlbmNvZGluZz1cXFwiVVRGLThcXFwiPz5cXG48eHNkOnNjaGVtYSB4bWxuczp4c2Q9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hXFxcIiBhdHRyaWJ1dGVGb3JtRGVmYXVsdD1cXFwidW5xdWFsaWZpZWRcXFwiXFxuICAgICAgICAgICAgYmxvY2tEZWZhdWx0PVxcXCJcXFwiXFxuICAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PVxcXCJxdWFsaWZpZWRcXFwiXFxuICAgICAgICAgICAgZmluYWxEZWZhdWx0PVxcXCJcXFwiPlxcbiAgIDx4c2Q6ZWxlbWVudCBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIlRyYW5zYWN0aW9uSW5mb1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJJZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJDcmVhdGlvbkRhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHJhbnNhY3Rpb25UeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRyYW5zYWN0aW9uTnVtYmVyXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZVN5c3RlbVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXRTeXN0ZW1cXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiU2VuZGVyXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkZpbmFsUmVjaXBpZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRyYW5zZmVyUHJvdG9jb2xcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiRGVsaXZlcmVkVmlhXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50Rm9ybWF0XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50VVJJXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNvdXJjZURvY3VtZW50Q29udGVudFR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiUGl2b3REb2N1bWVudEZvcm1hdFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJQaXZvdERvY3VtZW50VVJJXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlBpdm90RG9jdW1lbnRDb250ZW50VHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudEZvcm1hdFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudFVSSVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUYXJnZXREb2N1bWVudENvbnRlbnRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkF0dGFjaG1lbnRzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkF0dGFjaG1lbnRzXFxcIi8+XFxuXFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJUZWNobmljYWxTdGF0dXNDb2RlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlRlY2huaWNhbFN0YXR1c01lc3NhZ2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiVGVjaG5pY2FsU3RhdHVzRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzQ29kZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzTWVzc2FnZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGdW5jdGlvbmFsU3RhdHVzRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGbGFnc1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIk9yZ1BhdGhcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJLZXlWYWx1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJLZXlWYWx1ZVxcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiSXNzdWVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIklzc3Vlc1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiQXVkaXRUcmFpbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlJlY29yZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmNvbXBsZXhUeXBlIG1peGVkPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkNvZGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJNZXNzYWdlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICAgICAgICAgICAgICAgICAgICA8L3hzZDplbGVtZW50PlxcbiAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIldvcmtmbG93XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIldGSW5zdGFuY2VzXFxcIi8+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgICAgPHhzZDp1bmlxdWUgbmFtZT1cXFwiVHJhbnNhY3Rpb25JbmZvXFxcIj5cXG4gICAgICAgICA8eHNkOnNlbGVjdG9yIHhwYXRoPVxcXCIuXFxcIi8+XFxuICAgICAgICAgPHhzZDpmaWVsZCB4cGF0aD1cXFwiSWRcXFwiLz5cXG4gICAgICA8L3hzZDp1bmlxdWU+XFxuICAgPC94c2Q6ZWxlbWVudD5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJUaHJlYWRcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHJhbnNhY3Rpb25JbmZvSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiQnVzaW5lc3NEb2NOYW1lXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIk1lc3NhZ2VDb250ZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkRhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIktleVZhbHVlXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIktleVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJWYWx1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiQXR0YWNobWVudHNcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJBdHRhY2htZW50XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkF0dGFjaG1lbnRcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJBdHRhY2htZW50XFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlVSSVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJDb250ZW50VHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiSXNzdWVzXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiSXNzdWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwiSXNzdWVcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJJc3N1ZVxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJMZXZlbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIk1lc3NhZ2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRmllbGRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRmllbGRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlZhbHVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlBhdGhcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiTGlzdE9mVmFsdWVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIkxpc3RPZlZhbHVlc1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIkxpc3RPZlZhbHVlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlZhbHVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkluc3RhbmNlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZsb3dOYW1lXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkFjdGl2ZUluc3RhbmNlSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJJbnN0YW5jZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJXRkluc3RhbmNlXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiV0ZJbnN0YW5jZVxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJpZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGFydERhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZW5kRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJsYXN0VXNlckVtYWlsXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInN0YXR1c1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJmbGlua1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJGTElOS1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJzdGVwXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIldGU3RlcFxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIldGU3RlcFxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGVwSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwic3RhdHVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImFjdGlvbmVkQnlFbWFpbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGFydERhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZW5kRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJhc3NpZ25lZFRvTmFtZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJhc3NpZ25lZXNcXFwiIG5pbGxhYmxlPVxcXCJ0cnVlXFxcIiB0eXBlPVxcXCJXRkFzc2lnbmVlc1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZGVzY3JpcHRpb25cXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiV0ZEZXNjcmlwdGlvbk1hcFxcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJwYXJhbWV0ZXJcXFwiIG5pbGxhYmxlPVxcXCJ0cnVlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJLZXlWYWx1ZVxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIkZMSU5LXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInZpZXdcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJpZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJ0eXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkFzc2lnbmVlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcImFzc2lnbmVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkRlc2NyaXB0aW9uTWFwXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiPlxcbiAgICAgICAgIDx4c2Q6YW55IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lc3BhY2U9XFxcIiMjYW55XFxcIiBwcm9jZXNzQ29udGVudHM9XFxcImxheFxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbjwveHNkOnNjaGVtYT5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTc5MzR9XSwicGxhdGZvcm02LndvcmtmbG93c3RlcHMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LndvcmtmbG93c3RlcHMiLCJuYW1lIjoiSGFuZGxlUmVxdWVzdEZvclF1b3RhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJvdmlkZSBRdW90ZSBvciBEZWNsaW5lIFJGUVwifSxcImVuYWJsZWRcIjpmYWxzZSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU2NzAxMTMxMzY4MyxcInJldmlzaW9uSWRcIjpcImYyYTBlYzk2ZDFjZmZkODdiMWQxMjA0ZmFmZWRlZDcxXCIsXCJ4bWxTdGVwXCI6XCI8V29ya2Zsb3dTdGVwIGVuYWJsZWQ9XFxcInRydWVcXFwiPlxcbiAgICBcXG4gICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgPEVOPlJlcXVlc3RGb3JRdW90YXRpb24gLSBBbnN3ZXIgb3IgZGVjbGluZTwvRU4+XFxuICAgICAgICA8RlI+RGV2aXMgLSBSw6lwb25kcmUgb3UgZMOpY2xpbmVyPC9GUj5cXG4gICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgXFxuICAgIDxBbGxvd1RyYW5zYWN0aW9uRWRpdD5BU1NJR05FRTwvQWxsb3dUcmFuc2FjdGlvbkVkaXQ+XFxuICAgIDxUcmFuc2FjdGlvbkRhdGFNb2RlbD5wNl9kZW1vLlRyYW5zYWN0aW9uSW5mbzwvVHJhbnNhY3Rpb25EYXRhTW9kZWw+XFxuICAgIDxWaWV3TmFtZXM+XFxuICAgICAgICA8SXRlbT5wNl9kZW1vLlRyYW5zYWN0aW9uczwvSXRlbT5cXG4gICAgICAgIDxXb3JrSXRlbT5wNl9kZW1vLldvcmtmbG93IFRhc2tzPC9Xb3JrSXRlbT5cXG4gICAgPC9WaWV3TmFtZXM+XFxuXFxuICAgIDxBbGxvd1JlY2FsbD5mYWxzZTwvQWxsb3dSZWNhbGw+XFxuICAgIDxBbGxvd0FwcHJvdmVyRGVsZWdhdGlvbj5mYWxzZTwvQWxsb3dBcHByb3ZlckRlbGVnYXRpb24+XFxuICAgIFxcbiAgICA8U2VuZEVtYWlscz5mYWxzZTwvU2VuZEVtYWlscz5cXG5cXG4gICAgPFR0bCBpZD1cXFwiZXhwaXJlXFxcIj4xMjA8L1R0bD5cXG4gICAgXFxuXFx0PFdvcmtJdGVtIHNjcmlwdD1cXFwicDZfZGVtby5XRldvcmtmbG93VGFza0VuaGFuY2VyXFxcIi8+XFxuICAgIFxcbiAgICA8QXNzaWduZWUgbmFtZT1cXFwiRGVtb0FwcFxcXCIgcGF0aD1cXFwiLyR7SU5TVEFOQ0VfSUR9XFxcIiB0eXBlPVxcXCJVTklUXFxcIiBzY29wZT1cXFwiKj0qXFxcIj5cXG4gICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICA8RU4+U3VwcGxpZXI8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Gb3Vybmlzc2V1cjwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICA8L0Fzc2lnbmVlPlxcbiAgICBcXG5cXHQ8U3RhdHVzTGFiZWxzPlxcblxcdCAgICA8TGFiZWwgbmFtZT1cXFwiUmVjZWl2ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+UmVjZWl2ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5SZcOndWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJDcmVhdGVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPkNyZWF0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5DcsOpw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiRGVwcmVjYXRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5EZXByZWNhdGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+QW5udWzDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJQcm92aWRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5RdW90ZSBwcm92aWRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlF1b3RhdGlvbiBmb3VybmllPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiRGVjbGluZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+RGVjbGluZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Ew6ljbGluw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvU3RhdHVzTGFiZWxzPlxcbiAgICBcXG4gICAgPEFjdGlvbnM+XFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJzZW5kXFxcIiBzdGF0dXM9XFxcIlByb3ZpZGVkXFxcIiB0eXBlPVxcXCJGT1JNXFxcIiBzdG9wPVxcXCJ0cnVlXFxcIiBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uUHJvdmlkZVF1b3RlXFxcIj5cXG4gICAgICAgICAgICA8U3R5bGU+aWNvbjpmYS1jaGVjayxidG46YnRuLXN1Y2Nlc3M8L1N0eWxlPlxcblxcbiAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgPEVOPlByb3ZpZGUgUXVvdGU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+Rm91cm5pciBRdW90YXRpb248L0ZSPlxcbiAgICAgICAgICAgIDwvTGFiZWw+XFxuXFxuICAgICAgICAgICAgPEZvcm1HZW5lcmF0b3I+cDZfZGVtby5XRkhhbmRsZVJGUS1Qcm92aWRlRm9ybUZvclF1b3RlQ3JlYXRpb248L0Zvcm1HZW5lcmF0b3I+XFxuICAgICAgICAgICBcXG4gICAgICAgICAgIDxQYXJhbWV0ZXI+XFxuICAgICAgICAgICAgICAgIDxOYW1lPnJmcTwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPnJmcTwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+cmZxPC9GUj5cXG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgPE1hbmRhdG9yeT5mYWxzZTwvTWFuZGF0b3J5PlxcbiAgICAgICAgICAgICAgICA8SW5wdXRUeXBlPlRFWFQ8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8UGFyYW1ldGVyPlxcbiAgICAgICAgICAgICAgICA8TmFtZT5saW5lczwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPmxpbmVzPC9FTj5cXG4gICAgICAgICAgICAgICAgICAgIDxGUj5saW5lczwvRlI+XFxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XFxuICAgICAgICAgICAgICAgIDxNYW5kYXRvcnk+ZmFsc2U8L01hbmRhdG9yeT5cXG4gICAgICAgICAgICAgICAgPElucHV0VHlwZT5URVhUPC9JbnB1dFR5cGU+XFxuICAgICAgICAgICAgPC9QYXJhbWV0ZXI+XFxuICAgICAgICA8L0FjdGlvbj5cXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJkZXByZWNhdGVcXFwiIHN0YXR1cz1cXFwiRGVjbGluZWRcXFwiIHR5cGU9XFxcIkFDVElPTlxcXCIgc3RvcD1cXFwidHJ1ZVxcXCIgc2NyaXB0PVxcXCJwNl9kZW1vLldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvbkRlY2xpbmVcXFwiPlxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLXRpbWVzLGJ0bjpidG4tZGFuZ2VyLGNvbG9yOmRhbmdlcjwvU3R5bGU+IFxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgPEVOPkRlY2xpbmU8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+RMOpY2xpbmVyIHF1b3QuPC9GUj5cXG4gICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIDxQYXJhbWV0ZXI+XFxuXFx0ICAgICAgICAgICAgPE5hbWU+cmVhc29uPC9OYW1lPlxcbiAgICAgICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICA8RU4+UmVhc29uPC9FTj5cXG4gICAgICAgICAgICAgICAgICAgIDxGUj5Nb3RpZjwvRlI+XFxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XFxuICAgICAgICAgICAgICAgIDxNYW5kYXRvcnk+ZmFsc2U8L01hbmRhdG9yeT5cXG4gICAgICAgICAgICAgICAgPElucHV0VHlwZT5URVhUQVJFQTwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgICAgICBcXG4gICAgICAgIDxBY3Rpb24gaWQ9XFxcImV4cGlyZVxcXCIgc3RhdHVzPVxcXCJFWFBJUkVEXFxcIiB0eXBlPVxcXCJFWFBJUkVcXFwiIGRpc3BsYXk9XFxcImZhbHNlXFxcIj5cXG5cXHRcXHRcXHQ8RXhwaXJ5IGVycm9yPVxcXCJmYWxzZVxcXCIvPlxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgIDwvQWN0aW9ucz5cXG4gICAgXFxuPC9Xb3JrZmxvd1N0ZXA+XFxuXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTY3MDExMzEzNjgzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LndvcmtmbG93c3RlcHMiLCJuYW1lIjoiSGFuZGxlUHVyY2hhc2VPcmRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVB1cmNoYXNlT3JkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWNjZXB0IG9yIFJlamVjdCB0aGUgT3JkZXJcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjcwMTEzMDI0MTIsXCJyZXZpc2lvbklkXCI6XCI4NWIzZmI0YjEzNDk1NGMxYzI2YjU4YjNjMTExNzkwZVwiLFwieG1sU3RlcFwiOlwiPFdvcmtmbG93U3RlcCBlbmFibGVkPVxcXCJ0cnVlXFxcIj5cXG4gICAgXFxuICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgIDxFTj5QdXJjaGFzZU9yZGVyIC0gQWNjZXB0IG9yIHJlamVjdDwvRU4+XFxuICAgICAgICA8RlI+Q29tbWFuZGUgLSBBY2NlcHRlciBvdSByZWZ1c2VyPC9GUj5cXG4gICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgXFxuICAgIDxBbGxvd1RyYW5zYWN0aW9uRWRpdD5BU1NJR05FRTwvQWxsb3dUcmFuc2FjdGlvbkVkaXQ+XFxuICAgIDxUcmFuc2FjdGlvbkRhdGFNb2RlbD5wNl9kZW1vLlRyYW5zYWN0aW9uSW5mbzwvVHJhbnNhY3Rpb25EYXRhTW9kZWw+XFxuICAgIDxWaWV3TmFtZXM+XFxuICAgICAgICA8SXRlbT5wNl9kZW1vLlRyYW5zYWN0aW9uczwvSXRlbT5cXG4gICAgICAgIDxXb3JrSXRlbT5wNl9kZW1vLldvcmtmbG93IFRhc2tzPC9Xb3JrSXRlbT5cXG4gICAgPC9WaWV3TmFtZXM+XFxuXFxuICAgIDxBbGxvd1JlY2FsbD5mYWxzZTwvQWxsb3dSZWNhbGw+XFxuICAgIDxBbGxvd0FwcHJvdmVyRGVsZWdhdGlvbj5mYWxzZTwvQWxsb3dBcHByb3ZlckRlbGVnYXRpb24+XFxuICAgIFxcbiAgICA8U2VuZEVtYWlscz50cnVlPC9TZW5kRW1haWxzPlxcbiAgICA8RW1haWxUZW1wbGF0ZSBtb2RlbFNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUJ1aWxkRW1haWxcXFwiPmZpbGU6Ly8ke0IyQk9YX0RBVEF9L3Jlc291cmNlcy90ZW1wbGF0ZXMvcDZkZW1vX1BPUmV2aWV3LmZ0bDwvRW1haWxUZW1wbGF0ZT5cXG4gICAgXFxuICAgIDxUdGwgaWQ9XFxcImV4cGlyZVxcXCI+MTIwPC9UdGw+XFxuICAgIFxcblxcdDxXb3JrSXRlbSBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlclxcXCIvPlxcbiAgICBcXG4gICAgPEFzc2lnbmVlIG5hbWU9XFxcIkRlbW9BcHBcXFwiIHBhdGg9XFxcIi8ke0lOU1RBTkNFX0lEfVxcXCIgdHlwZT1cXFwiVU5JVFxcXCIgc2NvcGU9XFxcIio9KlxcXCI+XFxuICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgPEVOPlN1cHBsaWVyPC9FTj5cXG4gICAgICAgICAgICA8RlI+Rm91cm5pc3NldXI8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgPC9Bc3NpZ25lZT5cXG4gICAgXFxuXFx0PFN0YXR1c0xhYmVscz5cXG5cXHQgICAgPExhYmVsIG5hbWU9XFxcIlJlY2VpdmVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPlJlY2VpdmVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+UmXDp3VlPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQ3JlYXRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5DcmVhdGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+Q3LDqcOpZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIkRlcHJlY2F0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+RGVwcmVjYXRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPkFubnVsw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQWNjZXB0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+T3JkZXIgYWNjZXB0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Db21tYW5kZSBhY2NlcHTDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJSZWplY3RlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5SZWplY3RlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlJlZnVzw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvU3RhdHVzTGFiZWxzPlxcbiAgICBcXG4gICAgPEFjdGlvbnM+XFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJhY2NlcHRcXFwiIHN0YXR1cz1cXFwiQWNjZXB0ZWRcXFwiIHR5cGU9XFxcIkFDVElPTlxcXCIgc3RvcD1cXFwidHJ1ZVxcXCIgc2NyaXB0PVxcXCJwNl9kZW1vLldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXJcXFwiPlxcblxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLWNoZWNrLGJ0bjpidG4tc3VjY2VzczwvU3R5bGU+XFxuXFxuICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICA8RU4+QWNjZXB0IE9yZGVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjY2VwdGVyIGNvbW1hbmRlPC9GUj5cXG4gICAgICAgICAgICA8L0xhYmVsPlxcblxcbiAgICAgICAgICAgPFBhcmFtZXRlcj5cXG4gICAgICAgICAgICAgICAgPE5hbWU+c2FsZXNvcmRlcm51bWJlcjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlNhbGVzIE9yZGVyIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TnVtw6lybyBkZSBjb21tYW5kZSBjbGllbnQ8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVDwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcblxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgPEFjdGlvbiBpZD1cXFwicmVqZWN0XFxcIiBzdGF0dXM9XFxcIlJlamVjdGVkXFxcIiB0eXBlPVxcXCJBQ1RJT05cXFwiIHN0b3A9XFxcInRydWVcXFwiIHNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUhhbmRsZUFjdGlvblJlamVjdE9yZGVyXFxcIj5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8U3R5bGU+aWNvbjpmYS10aW1lcyxidG46YnRuLWRhbmdlcixjb2xvcjpkYW5nZXI8L1N0eWxlPiBcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgIDxFTj5SZWplY3Q8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+UmVmdXNlcjwvRlI+XFxuICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8UGFyYW1ldGVyPlxcblxcdCAgICAgICAgICAgIDxOYW1lPnJlYXNvbjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlJlYXNvbjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TW90aWY8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVEFSRUE8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvQWN0aW9uPlxcbiAgICAgICAgXFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJleHBpcmVcXFwiIHN0YXR1cz1cXFwiRVhQSVJFRFxcXCIgdHlwZT1cXFwiRVhQSVJFXFxcIiBkaXNwbGF5PVxcXCJmYWxzZVxcXCI+XFxuXFx0XFx0XFx0PEV4cGlyeSBlcnJvcj1cXFwiZmFsc2VcXFwiLz5cXG5cXHRcXHQ8L0FjdGlvbj5cXG4gICAgICAgIFxcbiAgICA8L0FjdGlvbnM+XFxuICAgIFxcbjwvV29ya2Zsb3dTdGVwPlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2NzAxMTMwMjQxMn1dLCJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyIsIm5hbWUiOiJEZW1vU21hcnRDb250cmFjdCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkRlbW9TbWFydENvbnRyYWN0XCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkRlbW8gU21hcnQgQ29udHJhY3QgSkFSIGdlbmVyYXRlZCBieSBodHRwczovL2dpdGh1Yi5jb20vYW1hbHRvL3NvbGlkaXR5LWphci1idWlsZGVyXCJ9LFwiZW5hYmxlZFwiOmZhbHNlLFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTYzMTgyMzc0NzYxLFwicmV2aXNpb25JZFwiOlwiYzYxMzI0YmI4ZGFiZTExMjFiZGU2MjczYjBiYzgwNzNcIixcIml0ZW1CeXRlc1wiOlwiVUVzREJCUUFBQWdJQUU2YTJrNExsNHRkbkFBQUFCRUJBQUFVQUFBQVRVVlVRUzFKVGtZdlRVRk9TVVpGVTFRdVRVYU56ckVPZ2pBUUJ1Q2RoSGZvQ3h5aFlCQzdpUzZhTUVrYzNKcjJqQmRwYWNwSjR0c0xJMkZ4L2UrL0wzK3JQVDF4WkxoakhHbndTc2dzVDVPTEN6MDY5S3g1RHFFajdsRUppMjRBSFFLTVRrY0dNM2lPMnZDbXZyWnVBUTA5eWZ4SE5SL3FMVnp0RzVhL2hhZzMvbG56VEJTNVBFQmVRVkYxY3E5a3JZcnlrU2FuaVBQVlF2TlZvdFVUZW5HTTVrVVRSbEZtdSsyZTlkWTArUUZRU3dNRUNnQUFDQUFBVHByYVRnQUFBQUFBQUFBQUFBQUFBQWtBQUFCTlJWUkJMVWxPUmk5UVN3TUVDZ0FBQ0FBQVRacmFUZ0FBQUFBQUFBQUFBQUFBQUFNQUFBQnBieTlRU3dNRUNnQUFDQUFBVFpyYVRnQUFBQUFBQUFBQUFBQUFBQTBBQUFCcGJ5OXdiR0YwWm05eWJUWXZVRXNEQkFvQUFBZ0FBRTJhMms0QUFBQUFBQUFBQUFBQUFBQVNBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2VUVzREJBb0FBQWdBQUUyYTJrNEFBQUFBQUFBQUFBQUFBQUFWQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVRXNEQkFvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQVBBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZVRXNEQkFvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQWtBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2VUVzREJBb0FBQWdBQUU2YTJrNEFBQUFBQUFBQUFBQUFBQUE4QUFBQVRVVlVRUzFKVGtZdmJXRjJaVzR2WTI5dExtRnRZV3gwYnk1d2JHRjBabTl5YlRZdlpHVnRieTFoY0hBdGMyMWhjblF0WTI5dWRISmhZM1F2VUVzREJCUUFBQWdJQUUyYTJrN1k4NmZBb2dFQUFPZ0NBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpRdVkyeGhjM09WVWwxUEUwRVVQVk9XcmkyclZGUVVVZU1ETVMyWURrSGtCZEtYUmhKTjFRalk5OW5kMnpKa08xTm5aekg4STE1OU1DUTgrQVA0VWNTN0N3L0dHQU9aek55UE9mZk9PWk43Y1huK0M4QW1YalF3ZzhVbUFqd084U1RFa2tEZEgrcDhaVjFnYmFDdG5HYktqNnliYk1tVUpsYm1pZHlqYndYbGZ0ZTZMNFgxeW10cjhtMHUyOUZHKzU1QXQzMkx1czVRSU9qYmxBVG1COXJRcDJJU2t6dFFjY2FaaFlGTlZEWlVUcGZ4ZFRJbzZRbEU3NDBoMTg5VW5oT0gzWnUvdWJLeHlYUWIrM3BzbEM4Y3Qvd3dzRzRzdjFQODVraXFXTXVEa3ludDBZZ2NtWVIyL3JwTUZmZGhRQzdIeEF5VXAxUisxY1p2dk4zYTduSGo1cjR0WEVLN3VpUzc5QzhDM1NOMXJGanZPNU5rTnRkbS9KSDhvVTFEUEkyd2pHY1JabEdQRU9LNXdPdmJxQkpZL284T2djNk5td25NbWRoOUhwV1o4bmRmdFR0Ly9NTFVXVzhUbThuRU91TDZDWVA2S3N0WS9FeTdNOFJMSHFtQXAwdTBXcVdVMHVNZDRnN2JCbnM5MUhnQnpkVzFueENyWjZqOTRLaUdKcC8xQ251S09UNFhyMUNJY0Erb3ZObnFQc0I4aFcvaGZtVVg4SUJ0Z0lkNGhMc1Zqb2xVRmZnTlVFc0RCQlFBQUFnSUFFMmEyazZ3NEpEeG13RUFBT0FDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01UZ3VZMnhoYzNPVlVsRnJFMEVRL2phOTVwcDRtbGkxV3F2U2h6NGtyV1FWUlFvdGVUQllFS0pnVS9QU3A4MWxrbTY1N01TOVBjV2Y1WU1JUHZnRC9GSGkzT21EaUVqTHNqc3pPOTgzTXgvTTl4OWZ2d0Y0aWdjTnJHQ2ppUWkzWTl5SnNhbFFEMmMyMzNta3NEZTBySmVaQ1RQMmkyZDZTZ3ZXZWFxUDZWMUJlVGhpLzZiZ1lJSmxseDhJN2RBNkcvb0t2YzRsZU4yeFFqVGdLU20waHRiUjYySXhJWDlpSnBuOHJBODVOZG5ZZUZ2R3Z6K2pjanlGNUtWejVBZVp5WE9Tc0hmeG5qdVA5MlhjeHNqT25RbUZsNUtESWZ1NS9rQ1RKK2ZhVEt3KytiaWtZNXFSSjVmUzRWL0pxWkU2QXNqMTJ6RGJId1Z2M2Z5Z0x4V2JJeTU4U2tlMm5ITHpYNTE3NSthOUVhRXZYSnB4THJ4WEZNNTRHdU51Z2kzY1M3Q0tlb0lZOXhVZVhrYU93dFovQkNoMEwxeE1ZVzFPb1l5RjF1bWNQdS8rb1g3cE9YREttVTdaazlBWGdocVlMQlB0SzUzdUdOdXlTcEZzbFdxM1N5V2xKemZHbXRpR2VIM1U1QUROM2IzUFVMdGZVUHNrVVExTmVlc1ZsbkZGM28xZktDUzRCbFRlYXBXUDBLcndiVnl2N0RwdWlJMXdFN2R3dGNMSklCVURQd0ZRU3dNRUZBQUFDQWdBVFpyYVRzU0M1K0JDQVFBQUdnSUFBREVBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVE0TG1Oc1lYTnpsVkZMUzhOQUVKN3RLMjJOVnVzRHhLc0hxK2dLaWhSYWVyQllFS0pnVzN2ZkpOTjJTN3BiTnh2Rm4rVko4T0FQOEVlSmsraEpSSFJnWHQvTWZEdkR2cjIvdkFMQUtXeFZJUTkxQjlZZDJHQlFha3NsYllkQmZxOHhZbERvNmhBWjFEeXA4RHFaKzJpR3dvOElxWHM2RU5GSUdKbm1YMkRCVG1YTXdMMVVDazAzRW5HTWxCNTZVdk5GSk94WW0va1pEM0d1ZVJ6d1B0NGxHTnVlTmplSnRzSktyZUxkWm90QlpTQW5TdGpFRUdQWDAyYkNIOUEvbVhIaFN6NThYR0FmeDJoUUJkaitWZ3dGMFZCRHpHL3R1RG13UnFwSnEwT00xWUZPVElBOW1TNjUvZFBEUnpOeEwrak9DeFZFT3FhNUs3UlRIVHF3NlVJQmlnd08vbkVEZzUxZnRtYlErRE1YSEVPT2ZpY1ZSa3Fia0M5UnhNbW5TSEgvR2RnVEJUbHd5Sll5OEJ6S1pOM1BCcWpBVWpicVpsM0xzSkw1R3F4bTZCclphcWFNMEZUS0gxQkxBd1FVQUFBSUNBQk5tdHBPYW14THF6UUNBQUFhQkFBQUpBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKR1VWTjBZWFIxY3k1amJHRnpjNDFTNzAvVFVCUTliK3ZXcnBUQktxSWdJcitVYlNBRm5IN1pRaUFJQ2NrQ1FuSEpZdnpRZFk5WjByV21QL1ozeVVqRWFEUjg5bzh5M2xjWEE1R0FyOG05T2UrZWUrNTVyKy9ucjY4L0FGUlF5VUhDb29vaVNqTEdaSlJWNUxFa3dyS0NFWldLeTRMeFhFRkI1QlVGdXNpR2pGVUc1WWpiM09ueE5zTk0zZkdOajY0Vm5maEI5NVhSNWwzZkNHM2phUGZRakt3b0RxdkVmczF0MS9FRWUvZ3c5aVArSnZCN1RsdGdlYUd4VlgrN1l6TE12cnRiS051ejNKaUhEUFBGMG4vUXBXMi96UmxHNmpSN1ArNjJlSEJzdFZ6YWtST2RneE9HU3JGK2F2VXN3N1c4am1GR2dlTjFxcVc3bGZXNmIxdHV3d29jSVRoUWxUeXJ5MFh0SDBWeVhuTThKOXBnR0w5aDRGNnBRZDNSQjRkT2xqT2Rqa2RUQWxKS0YwVkJxWW5MUzVyWHIvVHVlSEczZHBmVERScXRtbjRjMkh6WEVSNXp4enlNVm9TS2hudml0NDlwV01NNncvVHRTaG9tOEVMRE5KNW9HTUdvaG9JSU9rWVo4dGM5TVdSczEvZG8xbGl4ZE1YdlFldVUyeEg1ZVhuMUJyWmRLd3lyTi8yRDY2clZ6VlY2ZkhsNnVkTG1oSEFBVUM0TXNpN3k2S1E0a1dBZ2gvc1lCOE1EUW5PVXhWTDdZSitSdWtUNkV5R0doeFN6U1cyZitCT1lIUEFyU0NXN3FpNlZ2eUJ6Q1Vud1U5ZjRqeWhxZjFpWXd1T2tUbGREVVNpc0lVMGZJSmVYcGk2UVBidWxYY2FNc0k3WmhETUhCZk9KWVNIem5nNGkxdFkzU0UxZFRsOUFPVWN1QWFxVWdLRUVhSmtFREdlL0UwcjM2UVUxcFQ2R3pHYW1qMkh6SE96czczbFZHZ0ljWUpGTXBBWkRGL0EweWM5K0ExQkxBd1FVQUFBSUNBQk5tdHBPZ3dUMmhxTUJBQURqQWdBQU1nQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTFMbU5zWVhOemxWTEJiaE14RUgxT3Q5a21MRFFVV2lnRnhLR0hwRVV4Q0ZwVmFwVURFUkZJQWFscHlRVUp5ZG1kYmwxdDdOVHJCZkZaSEJCU0QvMkFmbFRGN01JQklZUmFXZmJNZU42TTM3TjljWGwyRHVBbEhqY3doNVVtQXR3TGNUL0Vxa0RkSCt0OC9abkE1bEJiT2N1VVA3SnV1aTBUbWxxWngzSkVwd1hsZm1EZGZtRzk4dHFhZkpmTDlyVFJ2aWZRYlYranJqTVdDUG8ySVlIRm9UYjB2cGhPeUIycVNjWTdTME1icTJ5c25DN2ozNXRCU1U4Z2Vtc011WDZtOHB3NDdGNzl6UFhuVzB5M2NhQlRvM3podU9XYm9YV3AvRUtURnlkU1RiUTgvRHFqRVIyUkl4UFQzbC9KUkhFZkJ1UXlKV2FnUENYeWd6WitaN2ZIYlpzSHRuQXhEWFJKZGZWZngzZFAxR2ZGYWwrYk9MTzVOdWs3OHNjMkNmRWd3aG9lUnBoSFBVS0lSd0pQcjZOSllPMC9LZ1E2VjI3R2I1bVNIdzMyQmRydGo2ODZmMXpBekZsdlk1dkoyRHJpNHFuMTFGZFp4c3JuMnAweG52QnZDdmhqaVZhcjFGRjZQRU1zc0cydzEwT05COURjMlB3T3NmRUR0VzhjMWREa3RWNWhQK0VHcnl1L1VJaHdDNmk4K1NvZllMSEN0M0M3c2t1NHd6YkFYU3pqWm9WaklsVUZmZ0pRU3dNRUZBQUFDQWdBVFpyYVRzL0NvRTJnQVFBQTVRSUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4T1M1amJHRnpjNVZTWFU4VU1SUTlYWVlkZGgxbFJVRVJOVDd3c0F0bWk0RVFDR1FmM0VnMFdVM2tZMTk4NnM1Y2hwTFpkdWwwTVB3c0g0eUpEL3dBZmhUaHp1aURNY1pBbXZiZTI1NXplMDdUcSt1Zmx3QTI4TEtCS1N3MEVlQkppS2NoRmdYcS9rVG55MnNDcXdOdDVTUlQvdGk2OGFaTWFHeGxIc3Q5T2lzbzkzdldmUzZzVjE1YmsrOHdiVmNiN1hzQzNmWWRlSjJoUU5DM0NRbk1EclNoVDhWNFJPNVFqVExlbVJ2WVdHVkQ1WFJaLzk0TVNua0MwUWRqeVBVemxlZkVaZmYyZHk2LzJXYTVqUU9kR3VVTHh5M2ZENnhMNVZjYXJaOUtOZEx5OEdKQyszUk1qa3hNdTM4ZEpvcjdNQ0NYS2JFQzVTbVJSOXI0clowZXQyMGUyTUxGdEtkTHFZdi91cjU3cXM0VnUzMW40c3ptMnFRZnlaL1lKTVN6Q0V0NEhtRWE5UWdoWGdpOHZvc25nYVgvdUJEbzNMcVp3RXhLdnF5WjFtNS9lZHY1NHdrbXpub2IyMHpHMWhIVHg0enFxeXhqNzFQdHpoQ3YrRDhGL0xWRXExVTZLVE9lSVdZNE5qanJvY1lEYUs2c2ZvZFkrWUhhTjY1cWFQSmFyN0FXOTNoZCtJVkNoQWRBbFUxWDV3Rm1LM3dMRDZzNGgwY2NBenpHUE81WE9CWlNNWEFEVUVzREJCUUFBQWdJQUUyYTJrN0ZrczQ1b3dFQUFPWUNBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpNdVkyeGhjM09WVWwxUEUwRVVQVk9XcnEyckZGQVVVZU1ESVMyWWpnSGxCZEtYeGlhYXFxRmczMmQzYjh1UTdVeVpuZFg0Yy93SlBoZ1NIdndCL2lqajNkVUhZNHlCVE9aK3pKeDc1NXliK2Y3ajhodUE1M2pjd0FMV21naHdMOFQ5RU9zQ2RYK3E4ODFuQWp0RGJlVThVMzVpM1d4ZnBqU3pNay9raU00THl2M0F1cVBDZXVXMU5ma0JseDFxbzMxUG9OdStSbDFuTEJEMGJVb0NTME50NkcweGk4bWRxRGpqazVXaFRWUTJWazZYK2UvRG9LUW5FTDB5aGx3L1UzbE9uSGF2L3VibTdoN1RiUnpycVZHK2NOenk5ZEM2cWZ4SThkNlpWTEdXSjUvbU5LSUpPVElKSGY1MW1TcnV3NEJjVG9rWktFK3BmSytOMzMyeGY5RGp4czFqVzdpRUJyb2t1LzR2QXQwejlVR3gzcGNteVd5dXpmUU4rVk9iaG5nUVlRTVBJeXlpSGlIRUk0R24xMUVsc1BFZkhRS2RLemZqOFpqWXZadU1Ca2NjYjdVN2Y4eGc3cXkzaWMxa1loMXg5Y3g2NnFzc1kra0w3YzRZVC9oREJmeTNSS3RWQ2lrajNpRnVzRzl3MUVPTkY5RGMzdmtLc1gyQjJoZk9hbWl5clZmWXo3akpkdTBYQ2hGdUExVzBXTjBIV0tyd0xTeFhmZ1dyN0FQY3dWM2NxbkJNcEtyQVQxQkxBd1FVQUFBSUNBQk5tdHBPMkliNzBJRUJBQUNDQWdBQVNBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpGSkdVVkpsWTJWcGRtVmtSWFpsYm5SU1pYTndiMjV6WlM1amJHRnpjNlZSVFU4VVFSQjl2YnV3c0s3eW9TS29GeE1QNG9FK1NMeG9URnhrRTVLSmhzVnc4ZFF6VTh6MlpxWnI3ZTVaZjVjbkVnNzhBSDZVc1dZZzhRS0pDWmYzcXJvKyt2WHJxejhYbHdEMjhYS0FMcDcxc2RQSGM0VnV5WVhDWHNLKzBMOG9mVGZUYzgrUk15NTF4cDUwUlhIS2VkQ2V3cHhkSUoxdzhVR2hZM09CSHlPRkZSdENUZm5ucUxDVnpNekM2TXJFcVI3WjRzaEZLc2hMZDdkT1M0WE42M0pwWEtGUG9yZXVXYlQ4MFRvYlAwblBtOTFUaGQ0QjU2U3dsbGhIWCtzcUpmL2RwQ1UxdzV5Wjh0UjQyK1EzaDcwNHRVRmhlekkrbmxCR2RrSDU0WUpjbk55SVZSZ2VPVWYrb0RRaGtIUitTU3pyZVduaUdmdnF2YzZwWWgweVBhR2ZOWVU0Wm45Y2N6VFJ5dkRydTVhSzZNRUoxejZqc1cxRTdOdzJ2ZGM4ZFlnaEh2YnhRbUYwLzJzVjF2L1o5eTJkVVNhTzcvNzNYcnhDUi80ZDZFRjh3NUpFWWo3NkxhOWd0ZVVCSHJTc0d1R0NqeVRUYlE0c3ZUMkgraTFCQjJ1Q3k4MmhHbU5kNHVGMUF6YndwSzAvYlhFTGo0VUhVdXRnRzV0WS9RdFFTd01FRkFBQUNBZ0FUWnJhVHFJeTErZElBUUFBSVFJQUFERUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTNMbU5zWVhOemxWRkxUd0l4RUo3S1l3RlJGQitKOGVwQk5GcmpBdzhRRGhKSk5LdUpnTnpMN3JDVUxDMTJ1eHAvbGljVEQvNEFmNVJ4ZHZWa2pORko1dlYxK3ZXYjlPMzk1UlVBam1HOUJCbW9PckRpd0NxRGZGTXFhVnNNTXR1MUFZTnNXL3ZJb09KS2hkZnhkSWltTDRZaElWVlhleUljQ0NPVC9ndk0yckdNR0pRdmxFTFREa1VVSWJWN3J0UjhGZ283MG1aYTV6NU9OWTg4M3NXN0dDUGIwZVltMWxaWXFWVzBkZHBnVU96SlFBa2JHMks4ZExVSitBTU9qeVpjRENYdlA4NndpeU0wcUR4c2ZqdjBCZEhRUU1RREpBSENvczl2cGJLSEovVkdpNGhMUFIwYkR6c3kwYnJ4MC92N0UzRXZhTjF6NVlVNmtpcTRRanZXdmdOclpjaENqc0h1UDFaaHNQbUxlQWExUDNQQkFjelJKeVhHeUVrSjVUeFZuSEtDNUhhZWdUMVJNUWNPeFh3S25rR0JZdmx6QUlvd24xNHRwMU1Mc0pqbUNpeWw2RExGVXVxTTBNUUtIMUJMQXdRVUFBQUlDQUJObXRwT0ZGaXBBUkVjQUFCSmFRQUFMd0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpMbU5zWVhOejFWd0pnQnhGdWY0cnU5bmVuVXhDV0VnZ2dBbEh3TTNtMkw2bk95U1I3R1lES3lHQmJCSmNFTENucDJjelpET3p6TXlHUkgzS3FZaUFJQ0lpeWlFSXFNaWhrQkFDSXFpbzRJbWllSXYzOWU1TGVlL3ArLy9xNnA2ZWEzY21HVjU0aE8ycXJ1TS92L3JycjU2ZWVlNnZqMzhPQUhUMnB4aTBNWmt1aXNUVVRxYkY0RmFtMDhXZ2kwbVhoTVNzVHZpS3hHeUpMWTlCbkowY1l5dllTb210a3RnYllqQ2JuU0t4MVRIb3BySS9Cb2V6VTJMUXhRWWt0a1ppZ3pFNGtxMk53UkhzMUU3NGxzUk9pOEV4Tkc0b0J2T3BmR01NanFYeTlCZ2NUK1c2R0N5azhvd1luTVRXZHNJTEVsc2ZnMFZzUTR5ZHljNGlPVGQyd3ZjbE5oeURaV3hUSi95b0UzNHFzYzB4VUduV0ZocHdkaWU4TExFM3hTREJUdW1FWDBoc0pBYkxxZmVjTHV3OWw0YThXV0xueldEbnN3dGk4QWIyRnFvNU0xaVN1WFJKU2N5VFdEb0dhOWxvREFiWjFpNnNaYWgySVEzY05nTm1zREVKbnFmbTdYVEowaVZIbE1hSndVVXpXSjRWSkZhTXdTYTBCSnRnT3lSMk1YSGRHWU96MmE0WWV5dDdHOVhlVG0xL1IxUGVJYkYzeHVCOE50cUZGODdxRXFwZFNwZkw2SEk1WGJKMHlVbnNpaGlNa29uYjJKVTArVjBTZTNjTXR0SGtiU3hEbDB2cGNobGRMcWRMVm1KWHhTRHZUM2tQWGE2bXkzdnBjZzFkcnUxazExSDVQcnBjVDVjYjZQSitpZDNZeVQ0Z3NadGljQWtibGRnSFkzQVpsVGZINEFxeXpUdlloenJaTFJMN2NBeXVZcmRLN0NNeHVKcjZQeHFEYTZpOExRYlhVWGw3REs1bm81M3NEb25kR1lNYmFlakhZbkFUZGQwVmc1dXB2RHNHdDFENWNRWkhibHg3MWhyUEhjdGt2ZFRnRGk5YjNPZ1Z4blBaZ3NjZ1BwVE5ldm1CTWFkUThBb01qanBySWxmME5ucXVsOWxSTlpiSTFPbnE2QjlhdjNyakNJUHVkUmM2TzV5K01TYzcyamRjekdleW95Y3ptRG1BbzRwT3RyakZHWnZBMFRQV2JsNC9jTUdwZzV1UUlQWUdkMmR0M3JCcGtNRWgvSDdONE1DNm9mV0RmTVJzM2pLOHVmK01vV0RRckVnVEgrTTNyTy9mdUdFdDNnOEhrM2dEbjROTmh3ZWMramVQREc1Y3ZXYk54c0ZoYkQ2VTlCb2NHQnphTXJqbWdzRXRnK3MzTVZpd0xwY2Y3YnZZUzJvWDlqbkpURi9LS1RyRlhlTmVvWTlyamtvZHhxbFd6aU5hUXZTd3JXTkZKcHNwcm1Ld3E2ZmFPaEUrNC9sY01lZm14dnJPcHR0b2o1dmZOVjdNOVEza3ZSUXl6emhqaFpOOVN0dWQ0dGErL3N6b1VMYm9qWHI1T3EyTHRqQm9IOGlsMFBTSHJFTVFySi9ZbnZUeW01emttRWNleTduTzJCWW5uNkY3MGRoZTNKcEJPQ3hlbDhuMWpZODV4WFF1djkzc1MzbmJjMzBGdDIramQ5R0VWeWl1emVVSkxrNHhnKzVGaXh6aTVyTEZ2T01XVjZkU2VhK0E4NmR6OFJGVzliVkVOTGdsdFJqTW4xeHRCcDJqVHVITWZNWkZLZWZXVnRjZnN5NnpQVk5rRUZ2amplYzkxeWw2S1Fiek5rNGduZTNlbGt3aGczcXV6bVlEOFVOaTNEZWxPVWlzMEVxdmxYcUxPL3RReXI0QlliTlRTYXZjamt4SytPc3d0N3FEd1VtTkVXRHc5djBWR3FsdXlqdlpBbEpFdTV6aFpKMzZ1S3FQdHU1aUZRMEd4MDNKaHNHT0ZzdmRzTDA3UnIwaUR5UTlQZWYyTDZyRjBzM2xQWVQrZGd5UUE4N1lHQW83TFlPWW1uWnVQd0l1UFpIbGpCa2NYemR5ckJWamNHYlhjR1kwNnhRbjhvamlheHRrdUNLcXpNVDRHRkljOVRCNEUwejdObEdEdG1JeVA1V1p0T2E0VmZpUEZvOVg1TnNBZ3p0YkpwcHhnS0tkMjE4OTBoYzNsdkozTnU2OFUxRGdZR2dWTGh0ejZ2UjgrcUloOUd0bnBsQ1k4RktyTVlhODh3Q3BycWc3WnJ0WDNKcExGZnJ5WWllTllwaHZ0ZU5GcnVTTXdrUVN3NWx3eThaSjVLazJVNE42dDAwa3h4amMwSExTQjY1OGw2ODhkL0NaUFMxWC9IMHRKdGtDaGJQSi9JWTA2b3ZiMGtrOURhcXhxcUdCZFpZaHh4am55aUdHZkEvQktOQS9zY3ZMaDV2NThtWVlsSzlUVEwzODhGcVdQaUxORFQwSFpLeEZQck9KWW1hc2IxMm1RR25aVElxMXFWSm11cWJ4RkdaaHZmeVdqT05SQTg5ZlVlenV3ZExkMlpuaTFuVzVVUWE5NVp0TnNORXNyQjU3Y3ZrR0tiUmhzUEtBaklHNDJVRmN5QkNZL2xhYnBpdVlqUnJNaVhTdnp1ZWRYV0xNM1BKc0VHMHBNc0lWRmZSV05LNHQrZi9jV3Z4V3RNSTNSSDNtY05GeHQ1M2hqSE5oSlhZUEhrWWxkaStEbTFxTHI1WUpmR1Mrb25mdFdPNWkzOURyR2hHWjgrc2JMRzVkbXhrcjhsMElCY3Q3SlAwT2IyZGZRQTA1ZGFUNUNBYmFmcEJsOFA0V1N0TXk2MTFjWDZnMVh0cVpHQ3YyaitYY2JXYzZlUWVGTEU4REd4bGUzNW94UE1ibS9lRU0rcG9raXptRmwwMkp5VThlSEIxYTVvTzVRWlpZR2RMWE5zR2gvdE1HNUhEZWdZYU1TYWlUQmpjZnZOZ3doV1JIWFZUVlg0b1BIemhJSzNJS21aOTY3ZU41Q2cxRWlsTDJvS3pRZEFKUjh6bGJpemJBMnJSSjlvTzd6OVdYaS9hNXN0NFNqZy9pemxKZjN2OGZVYm0rL08xak9RZlBybmNkckFlTlRUMHZ2T2NnUHFOcVN0Q1AvdDgvQVd4S3Zqc095a096cGtUc1NIbmpZN2xkREs2b3VjSmFhYm1HVHNzUHZ3YkVhR0xWODhYOTdzWmtQakNuTm1TOVIxNGJralJyd0t2MzMrbE54WmFHYkxqbk5TTk1zMmE4OW9DODMzcExQdjVha3FkWlk4WWMxL1VLaFlXeUxETzRvS2VKMlZOL3psRGo4ZGkwblRKZEZHUTh1TlAxeGprcGlkMVhFa1FoUVlJYmxXN3Vib2xVL3VlbWphZXA5T1JvVWJuN0puK2tObTJueW1CWmN3eEttbXBSdFhXNjZWeEJXUmIvNExhdGh6NGlpZzNuSnZLdWg2bW9SeDhsMXRCK0dkazd6ajdCUGhsbm4yTDNNMWpVc09IWVVjK2FzaVdic2k0YnFxWmJzbUtZNkFwRk5oSW1Zc09TMHlramFXQy9qSDJHanFYaS96bXlrcFExeFZaTVRWTVN0bXpRdkpTbUlDMmNyNmswVzdQcG10YlNYcU04Tk95Z1BzdnkrelREbEQxWmNYRzJsblJOMTBpNmlxTFFDSnlSS0d2VnNWWFRiYjgxcGVpS2Eyc1diMFcyZm1zNm9kbTJpNUx6VmlVdFdoM1pWUXhGODF2VkJITDJKVENOSlBYTGxxZWpEbW5lTDFzcGY1WmllSnFIeXZOV1JiZjhWczFOcC9XVTRmSldWVXY0clpabEpmU2txdnF0bG1va2pHUkpjNkthMUgwTGF5YjlyOHFXb2dnck9WcTVsY2dpZ1ErczBBY2t1WjRraWJtVjBRdVdiaW1HU3JSazhvbGZJbTNranhiMGFidWVrVWg3TkFlMU15UGpjWXlzb1p3cVVjRjJwZFJuS3dieU5SUmIwTFR4enRJNFpmUUoxZ0xKRlprOGhETmxtby9VNUpBRzhVNXJKSzBoKy85cy9rZGppYTVDMGdncUdyY3N6dGFJcXltMFFDb2E1NEVHOGkxUUxpRlJ0dldBdWlFSFZyRlJMNXQ0azlVVk0xM0g2dWpjQnExdUdGcVoxYzBhVnVkelE2c3JsbDNINm5wTkhqWGFJbk8wcWhWcFZyZlU5S3k1LzU1Tlc1TjRWdkhraGp5cnFzWitlOVlzZWJhdWQxWFRpM3JYTEhsWHhSVmFHWGtxYkd3cG1vSGpUV1RQY1lFNE5HeWtqeTJjRzkxVHFFTFpoUGU1NWRERGlrSFdKU3RhK09mamluU3ZMWlVWa2NxMm9sTFZrRWtWTXFsVk1pbGNBcFczS0NWclc3ekdkZWQ5cHM3dHl2OEw4YWltOUNoZkd1bjdnV3JCR004c0d5TVQ1OEFuUG00dERTT0xUalBLdUdqWWtPQTBNSTVHYWRnK3ZqZ21aTi9LNUQ5ZERwREVmV29MRFdqbndIN05WbjM5b2lzQS82R3NscTV4NnJaS01wRmQwQXQ0WnhzRzdTaVduWXJHQSs2MXlUQ2lHZW1wdlZHQkR5V3d1eGxLUFluZEVhbFQybDF6MUFPM3U2c2ZSTHM3S2JlRzNYVTVoVmRYdDhwWHo2UXJKNWpqQlRUVU5OMGJlcFJHWmV4RGVWU01JUFhwVnZzVmRlSXhOTlRXdHhMVmtJZUNOWjJva3BkdDFKNXFOTmRmaVg0T2tVaE5nUjNkNTBBU2xUZ0UvSFNpaTVLclBQNGlITW5QS2xtSDloUkR0MHpVaFVjQ3NjL0tNcysyVUNVZUhVZzZXU2Yva2c5UlFrSTQrdGN5Nkk2R29XOW9aOWNObFNJcGVnM25FQ2YwcGlxaXM2RXFQSGVoaUUxKzFOTW16NHNvQThLeGhrNkl3VkwxVndENVhzd3lmU3piZkNYSXNvOFhxcW0wRnlSUlI1Nlo4RjZ4WHZ6ZGtqQkxOR1RFcTZYNm51TDdCYWNXN0NqVjFrUjl6RnIyRkxiMHVYTTcycnFOSzVhUVNYVFNhWnlwY1lzcElUWWJ3WU0yT1I3UWQveVBhUGplVUpJQ0dZYmxUSUdNU2swNHIrQU90VkhJTWx3amhlK2RBVHBVN3I4QUhWcGRkTkNLMENMb01EZzZETm1mYjBUUWdXc0dkeVJmQTZVQ0haZ1VsNkhEcEF4N1NuVFFyQU5GaDRuaHRGbDBXTFZzU3JFZ1FJaXRxQ0pINGRZa2YvSzZuYkJ0bTF1QjBNTDNYcUVsSDZHTGxXOUcrUVk1RjBVOThuMGs3dFhDbHRaWXJLRVl6U05NZ0NUVG1XcC93dTIybHQ2bFZXRUkrUVZTekZSRi9oRkVWSmRiaHZCUUM2OWtGZTV6UHl1UktjSllDZUpvR1R3akp1UWsrRnpxOVROUFN4YlIzcWVHOUN6S2tNa2pWdEpLa055MFIxbE9hVS9STkxJdHRmampiTlBuaWRtalNVajF2WWljeUpLNmJlUHh6L0lqQTNwUnRoTktBdVZCdFBQWVNWSFE0RWczYkkya3BOM0hKcnNtVEI3Ui9XanBZNStqRUhjYVUvZnoyaUNmNHJ1TkZrUmxuczJMZkoxeTVYQ2ZKMXZ3ZkY5Vy9YT3k0V2RtcXA4L2N4cGk3WEpkVmNVTjF5MHZoY1d0RU0rMEVQd1ROMXBFWUZVcDRiYldPZDNmQjZ0UDczNjd3SmFnS2RkWVJWVllxaE5oL1ROTjJTbVRRZ2JYSDQvay9GN3pjNW9HOThUeVZlcnppZHE3SkRsZkJXcWdQWG1OdEtuTUN5THJJK0ZuQmo3ZS9MeUxzaDN1VVlOanJFWkdRU3ZXVmhKcDNkQmtMMkVpSGhLeW9xWVVCVVZFeERuSlJNTEFrNitoNlRoR1NiaHBUSjd4UktTcExxSTRwYWZjbEs0bDdZUnNSL0lSazRkbnpQWDhtbzZZbEtlSUcvcCt4ZzNMVFU0Wk4ycnVRWFhqaHBYVzl5TnVKR3JHRFl2SERkekRncnFQUnB5WGlNUUhNNHdQZGxWOHNNUDRZQWpPR3E1N2xXSUFjakZGZExBd09sQlVvQXplNUZFaWdkbVFJVTZoS0VsVlhDQ1B0VFl1MlBRa2FhcTRZSW4xVEpuRmxIRkJDN0kvb29jMjhlT0R4dlVKNG9OV0p6N29Zb1ZYeDRkSXRLbnlvazFlck1aaEtaTWx2OUxlYXB0VjFxQ2NVd2trdFFSaVpVWGM2Mmg1UDROUXJSU3RVNjRGM1pGRkhEOHErT2NzLzBtWGhjNUVMVlMrZnVqWmoycFp2QVZYTnoxd01aS09ZdG1hUmtFMjZhVTkzRUJNTGVFWWpxYnJIbG9PTnltVGduOWFkZ3hQOTF4Yk14TzJtbkF0Vy9HOFpEcUJlSEx4ejhPL2xQK0hmRlE2R1FXSUlOVGFISDJVYzlOZjJWTVR4OVltZVdyaUpKSU5QVFZ4WEhtL241b1k5WitaaExISHFEcXRJVzQ0WG1TN1JwYWorYzgvbmJUWmREYWlUQnBWa3NwVStZMGVZSy91S1FyeFJKR0ZJMHNUTVlNQ2hJdXJYVU9NQlhIZXNPZ29qenhOc2NhNUg0M3E5VjF2ejVvYy9iWDJMTTVUSUo3TG92Q3NuVkRyci9sRWdIQ2J4eU9LQ3BRNThWVVJSQ0RWejdFU2FWZFBvSmVTbm1VbVpCTnovSlRyeXFacXBwTzY1V0dRU1JwYTBrMjU2UlFldU0xa1NqYlRLVDJKdTVMdFdDbGttVXpoS3JGTGZ4elZZdmNveDdhL1k5VkV0eXVyazZBNzZUa05vZHRWMDYxLzJ1c29BdHRhUlRZdTg3T0dYMWNqZGIzRzV4ellZNHZUU3hBL0xUNGllczRTVDEvcGRLTFhPdCtVbnJud1V4ZnBqMmVxOEJUbE92eUpLT250NDRTZXNDQUhucmxTZjBvTkpQQ2xJL3dTanBXZ04rRS9KZUJqZ24yR3QrTmVTRHV4VVRxUFJVNVlPQ2FaRUJpbjhaNS9JcWE2cC9ydGR2RGtCdmNnbWt2UG9wQnZ3Q0Y0V3E3NHV3VDN1ZXRaaHBuMkhOVTBURFhoNEQ4VnozOG9ucTJuOWJRbXF3azVvYVJTRGg0OGROdlJ2WFRLVXpCbFNCcWVuVXBqQXAvRVNaaG9tV21GTXRTMGl2SFlSQkptMHRRVG1wazJYVlBUTlRJeHVralcxRGc4eUQ1Tmx3Zm84aUJkSG1KdzdGUWZWakk0cHQ0UWVndWR3YUo2M2FWdkd2WHZLbm9GeFNTV0QwdnNNM0gyV2ZZSWc2UExKeEsxamJqdjVMMHNmWWR3U2VOdlhpa2FVWDYwdVRsNmM4TU5Zckdid2ZGVGY5TGNIR0Z1bFQxMGVheTVpWW5taGx2TkRiZWJHcTdLelExWG1odXVOb1N5elpsc0VWY2ptWEt2eEI2UHMzM3NpVGg3a24ydXpHdmxzemNYMDViL1loWk5lNm81c1RRR2g5ZDZIeUhPUHMrZWJvNVVjMmhVRFFheks5OHNpOE9uNEg3NmpQc1pCb2ZWZUtkVll2ZkUyUmZZRjBuUkw4WFpzK3pMRXJzM3pyN0N2aHBuejdIbkdmUTArcGsrZy80RGYxbWR4RmdhWjE5alg0K3piN0JGY2ZaTjh0YTMyTGZqN0FYMmZCeWVBN3k4Q0UvRTRRZHdaNXg5aDMwM0RudmdNWW05R0dmZmcxZWFzNWNwc2UvSDJVdnNCd3lVcGw5dWpiTWZzaCtSdUQrVzJFL2k3S2ZzWjNIMmMvWnlIUDRDcjhUaDAzQS9neld0ZU5rNXpuNUJKdmdscWd2ZlJlM1pyK0Q1NXRSTXhKbEVNajFBTWpYbm96by9ROUFNZHl2T1poSDNCK0VodWhEUTRHbTZmSmtCeE5tdjJXL284bHU2L0k0dXYyZnd1a2xmU21Fd0k0SWVCb3ViaUY5TmpWYWJHczEzbXo4d21Gbm15cVpJNkVUaWowMU5NWm9hYlRZMU90SFVhTXYzUzRDWXB1WTJ0NjBvelcwclNuUGJpb0p1bjFNejVqR1lWZjZDRm9QdVVzTlFrVGFjWEQ0SXM4aHhhRVA0MGhhQzJ0dkpxWEFNaDYrWWw0TG5ycDZEOXk3V2ZHK241MDc0ZWNvWkUyUEZ6UGlZeDhkczlJb1RlUlJlcnkvY1pLK3Z2YmZXbTg0SDdUYzFybngxcFduNHR3dXVhNTBjcmZuNWg2dGVkWUVhdHMxMCtnbURMVUVlVTBwVkNndzY2RWRDYU5HZDJITnVSTG9OeVFzOXQrWjNpNWMxOHlJa01UWHEycUZFdHZLZTVwM1o0dmRBa2VUeFBSRkdiaTdyVHVUeEJGVHNveFhLdjl4SWcrYjExUGZwbk5MMGdkelltT2VLMzAzcDhyYVBGM2VKNk5WVHcyckhpRmhRT3JsRUhNcmd0SVlpUVVNdkFzK3BZVzZ1ZTVVRXc5aFZFWkZHR3BBalFwNy9aRktqZ21WYkY0b2IreFo4ZXlIelZvKy90enFFTnoxRFpJWE9UTGloekMzelU3RFI0RHhwcTFOWWovc0tuM29PVHMzeW04T0Q4ZEVGNHY5bUN0OXE1RWwrR3FET2U3ZHRZelR4TUtTd1BwY2R5cWJRUmFuZzYvVnQyRXJlSEtySmxYNmZSUHlRVkp1VFNsVzRQVmk5S1B5UjllSUw3cnNlMzZsSzMwYWJVL043V2NoaHV6Tk9QMzFRL3IydDROZGV5aUJhN3p2RDNTanZRT1V2STVWYk5QeWxyTUtyL1AyejJ1dmpxSEp3Y2tnT1p0MGMvOG1oRG8vWEdHaFRnYmltUnJQUVJmNXEyNVFiejdoNGhxbTFTQnYrS21ENHhmVFphTlVLMkhRV0pzYkh4eklrdE1TL1FVcy80ekxiLytKUjlMSEozcDZxZGZ6cTd0R05iSVlOUnBJbjlsUDJBOWxHV3lqK1V5MDBmUk01U1FzMWVLYTFEamc0U3B6WVFGN0NmelN1NTV4RlcrQTRhSU5iQWMvV2NCVGNBWGNDZzQvaDNUUm9oM2x3VitRK2h2ZDNSKzZQeHZ1UFIrNTc4UDZleVAxU3ZMODNjaS9qL1gyUmV3WHZQeEc1Ti9IK2s1RjdHKzgvQmZkamZSNDlIdUhsQTd3OEFXVjdFQjVDdVIvR3V5eEkwSUhsck43dTlzVkxsczVybnpkOUQweC9tTlA0REY1aldBS2NEak5oSFh3V2E2djgwZkFJUEFyQWE3czVWNnJ0Z2NmNDZGbXdGeDVIK2xUYkIwOGdQNm85aWJYcDhEays2eW44NjhCWm44ZVNwSGthNjhRemlhM1R5WnFCTkh1Z28xS1dEVEFEenVTeTZQN1lVSlo0S0VzOGxDVWV5aEtIWitBTHlJMzRmWEV5N2FWS2pwdFErODFOYVA4bGVMWXA3YjljWC92T1NsbmVoTnFQTktGOUlFdWdQWU92d0ZleGoramVqalNwYi9NKzZCcnBqclUvQ1RORzJ2WkJmR1R4SHBnNS9Cak02bmdTRHFHVzJTTzllK0RRNFpIMmZkQk4xY09HUjZidmc4T3BPb2ZHN1lHNVoreURJMGIyd1pFanZVdjJ3THc5Y05SRG9lRGQzQVJ2aGpsd0hxeUU4MkVOWE1BVk9OWm5IaXF3bVo0M29vQnI0RkQ0R253ZFozK0QwL2dtdG4wckZQcFJJZlEyTHZUUjFVSjNDcUdQSWZGZXg0V2VUOVVGWE9oanFYcmM4RWpIUGppZXFpY01qMGo3WUNGVlR5eFg1U1N1eXV0cnFMSWRWY25DTU9UZ0hCaVBxTEl0VkdXYlVPV2NDbFcralcwdndIZUVLcmRDRi9maFNxNUtUMGU1S2lSNGZHUUpyNkxnaTBhVzdvRmVFdkV4d1A2NXk5dDc1N1h2aGlXVndsMENpK0V5V0FaWFlraDRWd1FvSzBQaFZncmhxUFpkckUzanRSY1JvRzA0UitJQ3R3dUJ2NGZqdmc4dkNZRWZSb0ZwQVF4eGdaZEtqUWhNbGw0MlFsanVpd2cvdlhmZTlCckNYdzBKdUFhV3cvWFFEemRFVnR4UUtQeFFLUHhRS1B5UUVKNXFQOEExMEk2emZUV21DelYraUROK0JEK3VhWGU1aHQwWGtScTlYSTFscEViZjFIYS9DZTErTTlyOXcyakRXNmUwT3duczI1MEVycmI3VDNEY1QrRm5RdUJ0WXZFdjVnSXJiU2d3eXRNdWdLNFNlRFVCM25XOWk3djEzV0JVaWtkci9RNDRCcG1kZ0RzRWlUZlhKeW5FT3dFNnVRQk1DUEJ6ckwxY1J3Q3pRb0FFQ1dCTkljQTlTT0plRk9BK1pQV0pCZ1g0UlIwQjdBb0JscE1BSjBjRVdGRkRnRThqaVFkUWdBZVIxVU1OQ1BCTHJQMEtmdTBMd0M1QUowbllmbC92WjJEbDR0MndDcVBFRzBhVzdJVlRHRWJiMWV1eDFvOW5vZlo1N1h0aGdNRXRjQW5WMWxDUUgxeU9NRm83c2dkT1hkNHhyNE53Zjlxak1PVFgzdGkyRjA2ZmhvTm03SVYxTlBnTS9QOVJXQzk2Mnl0NjlVZGhnK2lhWHRHMTRsRTRjK204anQxdzF0bjMvdTN0U3gvaWV3dHB2d3gzREVBZHUxRExJM0NQTUZEZVZiZy9uSVk3WXhyM3hrdHhsL29Jd3ZFdTNLUHV3UjBxV0hXcndJUGZ3Ryt4Wm1DMCt4MzhnY1A1dmhETzk4RWY0VTlvb3k3RTF0L0RQNkNkanNBMSs0L3dUMmlwZnhiVzlmditKZXo3Vit6N04rdzdGS2I5RlJaSThPOFMvSWNFLy9rS1JpcmY2SDlHZ24rQlY0VFgzNGdxa0l2bTlqNENHeGZ2aGVGcEtPc21jdmJtM2JDbDVPQU92cXFlaVRoMWJpam1YUGd2K08vUXFmL0Q2ZjlWME0raFNnU05CZnZnN0pIRlMzcDN3NXYyd01qNnBlaml4K0NjM1hEdTJiMUxkOE9iUzR4bThTanpiU3hmd0h6cU81eGhyMDhpWkxnQS9vYlNrRUFMR0dNMGN4YnFTMEswK1VLd2FjQllXNGlzT3dTeVhrWmtuZGNJc3ZhV0krdDhSTllGRVdTOXhhODVsY2hDZ0NRbkJaMWJCM1IrYjZvTzdoQ1NudWpxcU9hWURpRTVFSUdraVFrVjRMN1NoVHZMRVJnQkRRelFxekJBbjRZaDJzWFlkeW5HdnR0eDdUK09VZUJGREVNLzVwSGdseEZvM2dhL1llMGNtdmVHMEh3NWRNSExJVFJmQ3FINVhCVTBYd3FoaVgxc2VqMW9QaVc4aGlDalQvWW1nK1lvUVhOckRXaitkbXBvc2s1T2YycG9uaGVCWnFZU21uL0c4aThJelZmMkU1cGRLRVFzaE9hbEFwclBJalF2YkFTYXQ1VkRjeHRDY3l3Q3plMzFvWm1kRkpxNVNhRTVYaCthRjRYNE96K0NQeFhUWVVCVGQ4SGY0QWkwZzRIR1dJWEw4alJjbGk3aTZsSkV3KzNvOE1mUklVK2pZNzZJZGlsaDczTEUzZ3lPdld0QzdEMGIydmpaRUh0UGh0aDdzQXA3VDRiWXd6NFdyNGU5dTRWYlpxSmJaazJPdlR4aHIxQ05QWnc3TmZZTzRmU254dDZGRWV3Vks3REhYZ2V6Mkh5WXh4YnNKL1ptUXhjN2xIV0xvOWxiRUhsazJWbjdvRzJrVnh5SEppcVZXeGpKdFB6REdFQndHUE9QWlhUODg0OWwrMFNTNkIvRzJtc2N4b2ovWVpQeDMxSEpmOUdVL09rQTFnei93OFZoY0JPMmtnWGpBZjg5Y0hFbDk2VVJTOGREN3ZHUWV6elUzai8rdFhFT2MrcHoyRm5KUVptU1E2QmZpY05jZG9RQTB1bEloVFNlMmQyRzlMdmJ1M2M5Qm0rdFpHRkVUbEF6T1dIZ05SS2Q4Um9SRmljb2RpUm5NRzhTQm0rclpHRFhZVUNTVnpNNGlqTTRHalVtQmxzUUJmd0F6eGtzOVRtOHZaTERxb2lWWm9VY1pvVXErTDZmRnZxK1RmamU1M2hNQlFibTRrcWFoUHZmVlhJZnFNTTkwRzl5N3ZPajNHZDNzZ1hzV0dIYzVWalNySTVlRFAzVEtyZTAza2hZNldESGlWWGV3WTZuRkpxZEFCUnJHVnVJRkU5c09jV1QyT3NGaGdkUkcvS3JoUGJaRGF3MlNkLzFVa2hTUXBMMzgzNko5ZUFTbm9Za2UxdFBjbkdMU1VJblc0SkwzaWY1Szl4RTZMOUg5c0U3UnJyZkdUeXB1UVIzM0V2NUVmWXlyRjNPVDdCWFlPMUsvM0QwcnMvU29SY252RHQ0U25MVkNJYTE5L0FaVitPNDkvSVoxMkR0V241eXZ3NXI3K09QU0s3SDJnMGhsZk00bGZkTGdzcU5ST1VEbk1wTk9PNkRuTXJOV1BzUXAzSUwxajRjenIyUTVHZGMvL2s4dlZnSlBiaXRLckFhenhuOWNER2E2NU93Rm0weWlQQmN4a0hhQngvRktkUFFSdHZRU2g5QjNjL0g4allzMTJKNU81WjU4UDhiRmVVbVVTNFhaVUtVcWloUEV1VkNVUjR2eW1ORk9WK1V4NGp5U0ZFZUxzcHVVYzRXNVMzODJnazNpL0ltVWQ0b3l1dEZlWjBvcnhIbDFhSzhTcFJYaVBJeVVWNGl5a0c0Rlg0UFhmOExVRXNEQkJRQUFBZ0lBRTJhMms3S01QTytCZ1FBQU1BSkFBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNall1WTJ4aGMzT3RWdnR6RTFVVS9tNmFkRW02UUtFdFVrVHdVU0ZOSDdjQzFrZHJ0WStOUnJmQlBpd2lJbTUyTCtsMnRudmo3azBwLzQ4ei9vcU9CWkVaaG5IR0YvNVBqdWR1WWlOdEdKcVJKSHNmNTl6N25mT2RlKzdaUFA3NzU0Y0FMc0hMb2grVE9RemdyU3hOMzg1Ujg0NkJkM1BJYUVrR1V6bWN4M1FQM3NPTWdmZDdrTU1IQm1hMVpzN0F2TzRYREZpNkx4cjRNRWRvSHhrb0dmall3Q2NNM1dyZGo0Y21HRVpzWC9KYTRLaWJNdHFjNUo3WWxEeDIrYkw0cGk1aVZaVFJVbDBxUi9reWpLZG8yN1FmK21xR1lUemZ3YjdoTlliMHZQUUV3MUhiRDBXNXZsa1IwYXBUQ1VoeTNKYXVFNnc1a2EvblRXRmF1OGRnbHNKUVJQT0JFOGVDcHVNSHR6bDBZWkxjelRpMVduQ2I0ZVJ5Y1dsWnVNTGZFcDYxSlVLMUxPSWFyU0pMS20vTHFNcHZpY3JGRFY2THBKS3VETGdySThFM2hWcVhYc3lqNW1KdXkrclVjQWMrUE0wcWVkWVZ5S29tMUpGdGhoNmhjZGFjZ0l3WldLVG9XUzNCRlYrdDJ4cTI4QjlZdGMzblphZ2l4MVZEKzljUzVHRjF1eWE4VmtBV25nL0JjM2w3dzlseWVPQ0VWWDY1c2lGY1JiSGJKMkxJV2R1dXFDVjRCc29NMlJXL0dqcXFIcEV2MyszZm9MMkxCTEVobzl2OFpqMTBrNjI4MkJ4TmR4YlM1MEYyUnJOWWtmWElGVVZmWis5Z3UvM2ptZ3BkQUN0MEF4bjdZWFV4OGNmQVpST2ZZc25FQ3pocFloRExKbGF3YXVJejBLMlorLy91bVJqQzZ5YXU0SE1EVjAxOGdXc01wMXN4Y2lvKzl4d0NvU3lJK1NxMUpyN0VkWWJVdFRrVFgyR1dvVDg1aEUxSHJmTTV2MW9LbGFpS3lNUU5mTTNRMnpxZ0ZSVVJLeE1PS2d5am5aeUNpVmZ3R3UzcDVIWS9ZYnFSR3d4bm41RWNCbHlHL0VFdkIwTmZ5OFJ1bGpJTUg5aFBxanpSbm1NcEJ2SldvOGJaQjZrOENTYTMxRHBsbGhKUm8veTBLUDZMcGl0S1hwZlpZem9OckhtcnRHWXQzTERXclBJcVJjVisybkVuSHVuc2RWeFh4QlRXQ1hvamZOdEphWDhHZEtlMXRZTzYxVmNWcWl6RFV1aUpiZUUxdEZRUDg4MGlVMWQrd0cwLzF2U09QQ21oV05GZWhvRjhxVzFGT2tUYUJJOVNQOTkyUmNyM2FKa2Z4M1hoelJMU0NidmRGZEdIVXE4RStoVzM5NWFRYXFBdFY3eE1MK29CRUNSWWI2K3VDZlJ2b0l1ZVFad2k2WXMwbWtHS3ZrQ3VNTElEVnJpSDFQYzBTK0UwdGQyMEJ2Z0ZMMUY3b3JFS1p3Z1R5VWlqTWZyU2JXdGkvVW5ZYWVyOXdvOWdQNkJyNUNla0Z4OGdjL1VldXN0amhHK01qZDdGb2E3N3lLYndDTG43NkdIVW0vVGJ3ZUZFbDk2ak83S0RvNGtpczBmUnU0TmpZM2QyWFQwRGc5cGZZZUkzb3Z3N0Vmd0RiNUpEWlR4R0ZYOGxGQW9ONTNZcCtMcVdrZXNtcnVNY2hnbXBuK3BrQVNQbzZwMGxXcU1rMGJRdU5rT1VMWXc4d3ZHNzZMdlROa0ptTXM0MjRjZm9TWk5rbkZxZXJKL0FHMGwvZ1FDMTdoSTVlSlpHcHlocS9XaDhNaVI5bFRET3cwWWUyWDhBVUVzREJCUUFBQWdJQUUyYTJrNU8xN0xkbFFFQUFMQUNBQUJLQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rVVhWdmRHVlNaV05sYVhabFpFVjJaVzUwVW1WemNHOXVjMlV1WTJ4aGMzT3RVc3R1RXpFVVBVNmFUaG9DTFFVS0xRK3BFZ3ZLb2w2QTJJQXEwVUtrU0NNZUtlcUdsV2ZtZHVMSVkwOXNUL2d1VmtoZDlBUDRLRlI3T2hJYmtGaXd1ZWNlMy9lOS92bnI0aExBU3p3Wm9ZL2RCQThUUEdMb0sxTXlIS2JHbHZ3YlpTOFd2TGJHbTl3b25odEx2Q0kvTjRYamxseHR0Q09lbXZJMXc5QTFkYTBrV1lidGRDRldnaXVoUzM3cXJkVFJQckRueTJuQjBQdDZ6SkFzRytNcDBxRjBycUhpcldmWXVRNnJoSi96WTFsT3RhZVNiQWp0TjVsaVdIOGp0ZlJIZ1Q0N09HTllPekVGTVd5bVV0T0hwc3JJZmhHWm9samQ1RUtkQ1Nzajd4N1gvRnc2aHIzUHNlNk1jcElyS3Q2dlNQdFpOd2JEZUtvMTJSTWxuS1BnTzBtbDRiVVMvdHpZNmhVdnFETGM1WHhHeTRhY254Z2Jjd2t2US9EVHY2Y043WTlPVFdOem1zall5TzZmNGcvajRHUGN3bWFDeHd6di9rZGhocTNmVi9pWUxTZ1BLejc0NTh6WVJ5LzhDbUFkWVhzWUJDMmNBRW1MUTJ5ME9PcndCc1l0M3V6c0xJNFM1Rlpndk9YQTRQa1BzTzlCNmVGMmx4YnNFN2FEUHI1MndCM3N0UGI3clh5QWV3Rkh3ZGJESHU1aTR3cFFTd01FRkFBQUNBZ0FUWnJhVG5JdHpmMUhBUUFBSXdJQUFESUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhNQzVqYkdGemM1VlJTMHRDUVJRK2syKzdaZGtEb20yTGpIQ1V3bzNpSWtrb0xFakYvWGp2VVVldU16WXp0L0JudFFwYTlBUDZVZEc1dDFZUlVRZk82enRuUHI3RHZMMi92QUxBT2V3WElRWGxIT3prWUpkQnRpV1ZkRzBHcWVQS2lFRzZvd05rVU9wSmhiZlJZb3htS01ZaEllV2U5a1U0RWtiRy9SZVlkak5wR1hoWFNxSHBoTUphcExiYWs1b3ZRK0VtMml3YVBNQ0Y1dGJuZmJ5UDBMcXVObmVSZHNKSnJleFJ2ZFprVUJqSXFSSXVNa1I1M2RObXloOXhmRGJuWWl6NWNMWEVQazdRb1BLeDlXMFlDT0toQmN1blNBcUV3NEJmckJ6YWVxUFpKdUxpUUVmR3g2Nk14Ujc4SktBNkZ3K0M3cjFVZnFpdFZOTWJkRE1kNUdEUGd6UmtHSnorNXhZR2g3K29aMUQ1TXhuVVlJMitLVFpHVGxJb1o2bmlsR01rYy9JTTdJbUtOY2hSekNaZ0YvSVV2YzhGS01CNjh0Ukx0alpnTThrbDJFclFiWXJGeEJtaHNlVS9BRkJMQXdRVUFBQUlDQUJObXRwTzV3TGUyRVlCQUFBaEFnQUFNUUFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKRFV1WTJ4aGMzT1ZVVXRQQWpFUW52SUdVUlFmaWZIcVFUUmFqY29Gd2dFaWlXWTFFUWozc2p0Q3lkSmkyOVh3c3p5WmVQQUgrS09NczZzblk0eE9NcSt2MDYvZnBHL3ZMNjhBY0FaYkpVaEROUS9yZWRoZ2tHdEtKVjJMUVhxdk5tU1E2ZWdBR1ZROHFmQW1tbzNRRE1Rb0pLVHFhVitFUTJGazNIK0JHVGVSbGtINVVpazBuVkJZaTlRZWVsTHplU2pjblRhek9nOXdwcm4xZVEvdkk3U3VxODF0cEoxd1VpdTdlOTVnVU96THNSSXVNc1I0NVdrejVvODRPcDF5TVpKOHNKaGpEKy9Rb1BLeCtlMHdFRVJEQTVhUGtRUUlod0Z2THh6YWszcWpSY1Nsdm82TWoxMFphOTMrNmYyanFYZ1F0TzZGOGtOdHBScGZvNXZvSUErYlpjaEFsc0hCUDFaaHNQT0xlQWExUDNQQk1hVG9rMkpqNUtTRWNvNHFUamxHc3Z2UHdKNm9TRUdlWWk0QjIxQ2dXUDRjZ0NJc0pWZkx5ZFF5ckNTNUFxc0p1a2F4bERnak5MYkNCMUJMQXdRVUFBQUlDQUJObXRwTzRqYzdQa2NCQUFBakFnQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREV4TG1Oc1lYTnpsVkZMUzBKQkZEN2o2NnBabGowZzJyYklDQ2NwM0NndWtvVENnbFRjai9jZWRlUTZZek56QzM5V3E2QkZQNkFmRloxN2F4VVJkZUM4dm5QbTR6dk0yL3ZMS3dDY3cxNFIwbER4WU51REhRYTVsbFRTdFJta2o2b2pCcG1PRHBCQnVTY1Yza2FMTVpxaEdJZUVWSHJhRitGSUdCbjNYMkRHemFSbFVMcFNDazBuRk5ZaXRiV2UxSHdaQ2pmUlp0SGdBUzQwdHo3djQzMkUxblcxdVl1MEUwNXFaUS9yOVNhRHdrQk9sWENSSWNycm5qWlQvb2pqc3prWFk4bUhxeVgyY1lJR2xZK3RiOE5BRUE4dFdENUZVaUFjQnZ4aTVkRFdHODAyRVJjSE9qSStkbVVzZHY4bkFiVzVlQkIwNzZYeVEyMmxtdDZnbStuQWc5MFNaQ0RMNE9RL3R6QTQrRVU5ZytxZnllQVVVdlJOc1RGeWtrSTVSeFduSENQWjQyZGdUMVNrd0tPWVM4QXU1Q21XUGhlZ0FHdkowMUt5dFE0YlNTN0Rab0p1VVN3bXpnaU5MZjhCVUVzREJCUUFBQWdJQUUyYTJrNHZqTHpnVVFFQUFCb0NBQUFxQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVMmx0Y0d4bFUzUnZjbUZuWlNReExtTnNZWE56alZITFRrSXhFRDFGQkVFVW4yaml6aGlqTHFqdmhSbzJSQk1OdWhCMTRhN2NPMXhLTGkzcExUNCt5NVdKQ3ovQWp6SU9WemU2VUp0TXp6eE96OHlrYis4dnJ3QjJzVmpFQ09ieW1NK2pJcEE3MGtiN21rQjI3WGI5aHFGdVF4SW9ON1NoaTBHdlJlNUt0V0xPekRSc29PSWI1ZlF3L2twbWZVY25BcVZUWThqVlk1VWt4T0ZxUTF2Wmo1VnZXOWZibHlIMXJFd0MyZFM5Zmt4TmI1MkthR1hyVUNEenNDa2diZ1VLVFIwWjVRZU9OYzhhMWtYeW5sbzdYYWxhV2w0OTl1bVMydVRJQkhUMG94Z3FyendURWhrUmo2QThoZkphRzcrOXQzOVk0dzdGcGgyNGdFNTB1c0szQ2FwZGRhZDQwMk1UeERiUkpqb24zN0ZoSGdzbFpERXFzUEtmTFFTV2ZobFhZUGx2RVd3aXcxOHlQSUtOZXpQbTJEdmdmSVl4dDdIMERQSEVYZ2I1WVp6eXFoamp1L0xKUUFIanFVSU9KVXh3UFl2SmxGL0dWSXJUbUVtMVova3VwaWJTbDhEWUIxQkxBd1FVQUFBSUNBQk5tdHBPb1djZnMwWUJBQUFoQWdBQU1RQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERXVZMnhoYzNPVlVVdFBBakVRbnZJR1VSUWZpZkhxUVRSYWlZWUxoSU5FRXMxcUloRHVaWGVBa3FYRnRxdmhaM2t5OGVBUDhFY1paMWRQeGhpZFpGNWZwMSsvU2QvZVgxNEI0QngyU3BDR2FoNDI4N0RGSU5lU1NybzJnL1JCYmNnZzA5RUJNcWg0VXVGdE5CK2hHWWhSU0VqVjA3NEloOExJdVA4Q00yNHFMWVB5bFZKb09xR3dGcWs5OXFUbWkxQzRzVGJ6Qmc5d3JybjFlUS92STdTdXE4MWRwSjF3VWl1N1gyOHlLUGJsUkFrWEdXSzg5clNaOEVjY25jMjRHRWsrV0M2d2gyTTBxSHhzZlRzTUJOSFFnT1VUSkFIQ1ljQXZsZzV0dmRGc0UzR3ByeVBqWTFmR1duZC9ldjlrSmg0RXJYdXAvRkJicVNZMzZLWTZ5TU4yR1RLUVpYRDBqMVVZN1AwaW5rSHR6MXh3Q2luNnBOZ1lPU21obktPS1U0NlI3T0V6c0NjcVVwQ25tRXZBTmhRb2xqOEhvQWdyeWRWeU1yVUthMG11d0hxQ2JsQXNKYzRJamEzd0FWQkxBd1FVQUFBSUNBQk5tdHBPaWRnQ3VDUU9BQUNOTXdBQUtBQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVXVZMnhoYzNQTldnbEFITmQ1L2g0c0RLeEdXRUlTRXJKc2JBbkpIRUk3dTdNWE1sYURBUjBKd2k1Z3FUaHQ3V0gyTGF5MTdKTGRBVW1PMnpSdG5UcE83SnhOWStkdzJyVE4zVHFIUVFwMjRpWnQycVQzZmQvM2ZhZXQwenI5LzVuWmcyVlhHZ1Myak1TYmQvNy85My92Zi85Nzg0YXZ2Zmo1THdBSWkzNC82dkMwZ2s4MzRUTituTVJuT2ZrY0o4OXdzcVJndVFscEJaZjh1SXpQSzFoUjhLd2ZXL0djSDAzNGdvSXY4dmpubTVCVDhGTis3TUNYL1BneWZwb3JmNllKaXdxKzRzY2VQTmRNNVovbHlwOVQ4TlV0K0JwKzNvOTkrQVhPL2VJVy9CSittWk5mVWZDckNuN05qd1A0ZFQvMjR6ZWFLZmViblBzdDd2amJXK0RINzNEZDczTHlleXpoOTFud0gyekJIK0tQRlB5eEh3SEc5U2Y0VXdWL3h0ciszSThRL3NLUHY4UmZjZTZ2dWU1dk9QbGJUdjZPazcvbjVCLzgrRWY4RStmK21aTi80ZVJmT2ZrM0JmL2VoUDlROEo5K0RPSHJDdjdManhGODNZOUIvTGVDL3hHNGVjTEs1bVJpMkxDTW9Wa2pNeU1USTRzeVk0M0wvSHcyazVjQzZxbE1SdWFHMGtZK0wvTUNqWGVlR2hzY254Sm9IWDNBV0RRQ2FSb1RtTEJ5cWN6TTdRSmJoMmlRWldTc00wWjZnUWJmY1B5ZXNhSDdKaWJ2R2g4WkhoNmNIQlJvY21wR0pndlpFNXpkWGVveWRISnc3TVRJOEgwalowYkdxS1ZqTkp1YkNaeVgwL29EQVdNNkZVZ1FVT3Zpdk13SGJKeWtzM0VnbFVsWnh3UXVkcTJGVkRaNlBwZTFzbVkySFRqTHhmSVdNM2R4M3NvR2hvZ0hFcGt5MHZuYkhVbHpoalVidURNMWN5cGp5Um1acTFIYmZVYkFONVJOc0wyanFZd2NXNWlibHJsSll6b3RtYWFzYWFUUEdMa1VsOTFLbnpXYklpNDdSMVBad0h6YXNKTFozRncwa0pCejJVRGVERXlrNXViVGt1ZkZtSkZrNEExbU5tUGxETk1hVENSeU1rOERHMnpjQW50cm15ZXd4U3paUS9OOFpYdHBObWFNL04yNWxFbncycXJiNmZRWlRjMmxMQUgvc0p6UFNkT3daRUtnZlh5QjVNekpNNmw4aWd3Y3pHU3lORXNwOG9XaU1IdFNTbU5JV0g0enA2dlVhbDBJRU1yQWtNdlpDYllxdTVoS3VCTzF3MXpiSUhESW13Q0JoNjRWTkVtZHpCbVpQRWtrWGs0YkdhTzJROVYyczFacmpReUJXNitxUm1CeGszRjc1dHVmTDhZWG9ybXJ1NXBTazNvRXhzbjdMVGxrcE5Qc2FNbUZqSzFRWUgvTkFIRGM3VVA5bXlkU014bkRXc2lSOXg3enBHU2dPc25IU0ZoOVhwS0REM1RWbUFhUEZtVGtlVGNJdm40RGtnWnE5cG1UMW13MmtRL2szRWhkUGszajBwU3BlY3V4Wm9hdDJVdHA5VWhQUy9TdXJnMXA2WGJNVzdCUzZjQm9Lczh4ZVN2UFVLSzBpUXg1aUhTZFY5NkpPS0pKcnJCWkpkU3RJNlhTMlpRMU81cWRFZWhaN1prRnIreGMyL2YyMWF2Sk5VYmdqZzF4UWE2NHlGcVlCNEZ0YTVscExvd21DM2FWTlEvbWNzWkZ0MC9iNmoyRHFIVDNqWUVLZVFQZXJXVlh1TGVhdm9GTm1Cb1d2blhDTXN4enA0MTVHNnVDRitpZ3BPQWJBdS9lWE8vYUxMdzM1NnYyT1o3T25uZklIdldDKzNWRXNSVVlzV2FQcDlLV3ZhWUpYVTZ5Q1l2eVFxQWdqWThwU2J1SGdINE5ZZ1hlc1lsb05vdkM4N1V4RGN1a3NaQzI3a3huelhOM0d6bURNSzdlTnJ4MHIwMG03U3BHenVrdUVGaW5XQXJPTXBOd0J6OTdmV3pZckNud3BiTUdIY0RlZjcyT3Z0NU9zRTlkeDFPVE40VHZlZmtQbzk2QVBYRmREbTdlc0RVbTVIdzZlMUhneWFxTGFQTzQydEJKVE9YWHd4VHZwL1pwckZWbVRIcFhTOWh2cXJrRms2d1JlUDRWYTRDWFFHRkhnZzk0TTJFamJyR2hhZmp5S3htZlo1WS9kTzJPc282Z3RTR2l2L0lLaCtpWjZ3OXZ5R05lTHJxLytzcEg2Wmx4djJHYU1wL3YxRFRORGlnZWhsM2xlczc3MFo5ZlVycFhFM2JsdDdlNkN4b25RVTVDQWtmV3A0b09nUU5tMnIwNXJPK3lyeW9tc2dzNVU5TFptYmVKVldZZVllNVYvQy8rVDJELzFWa1JkYm1vRnRlaVdsaUxoUFJ3WEF0R29rRk5DMnFSV0pTNGpXdkpSR1E2NHJRSHFTV285K3R4amY0NytiaE92OEU0NVIwSlVTMmt4WU5CVjRxdXI1WkNFcWdVaVVTMXBDTkJDMGU1UnUvbk5La241Um9zVkYySlJBdnJORFNxNmFiVG9sTXZxUVZOR3FtSGpLQ1JOQlA5d1RCSkNVWmlYRWZhWkRnMkhlUzZTTDlibHdpYk1xcWJYQmVMUkdLUjZaSU9Ha2x5WTlPUnFKMm4ya2l3UHhnUFJVTDBKT3Y2U1NYYnFWRXVxWE9mbU02bzRseXRsekdnUlJPcnNUUFNlSkRsRWd1dW51bTRvNGRxd2s2Yk00SktJZElaY1pqdjF3aUI3dnpHa29hTWhhTjZUQXNGcGE0WlJHRTRGT3ZYdzFvd0dJOGtRMlk0bkRDVDlFNGFqWnV4WUxBL0hqZU51R2JFa3JvWkN5VkRzUmpKTW5TYURhMmt1Wi95U1dtRW9wRm9LR2JRdjVDdVJlSWhMUnBOUnJWRVdBOGEwMGFNeFBTSFpGeFBSSU94ZUV4cWlYNk5LWlQ5WmpRU1pPT2lab2dLWkhNd0tDVmgwV1UwVE53a28yWlVEK3VzU0RPSXZKQ0tDYnpJeVRjcG9XTVBKVUxnbHF2ZG5nbnNxOVdGYng0VVVhZUtldUVUdUhGMU4yNGNsMG1aby9NVXJaZE9EKzh6T21OcTRLUlJZR2UxY0tZS1JUUUpkTmRDTkNNek1zZjN4NEY3VWhrckZJbXlzR1pGK0ZXeFJhaXEyQ3BhdkVFSnEvaFdqTk9LRmpjSTdLaHlMYUxnQlZWc0U5dFpRYXNxZG9pZENyNmhpbDJpVFJXN3hSNkJMcStoU21Cd3crOTZQSzJmVWtXNzJLdUtHL0VKVmV3amE3RW9ibExGeldLUEtqcHd2d3FMRW5HTHVGWEZhL0h0aXRpdmlnTjR6QnNkRVVWMHF1S2dPQ1FRWFBjMWd5cHVFMTNNVTdjaWVsVFJLdzZyb2s4Y1VmRldQTWJBSnptWjVjUzI0NXdpQXFyUVJGQVZJYUZ6RXVZa3drbFU0S1lyYmlnQzI5Y3c1YzNFSUNPTWVldkxhMG5FQlhaVm5XT0JsdFZYVXJSYmxDcE9XZXloL0ZKeGs3eGc5N2VCRjI4RVNtNXhzZXY2Ylo1dnFmWmFlZDIrbmozODBxTHgvTEhpOGMzRHNUbmZleDU1eVFGNTVtWmJSWkRrYjhIOE5aRGQvMkRYYTh0UTNUWDlnRFNyZmhhNHpkT1JrclZGYWhwZWtsZFo1bkg3NVFWcExsaXlkUGlkb0tGcGFmdi91TFFXY3JUaFRkVmVlTVZ2U21YcTdXL2ZYbDhIMm10OTdDRnd1MHFBaDdMcHREVGRUNlROY203ZXV1aEdrcTRxdk8xYlkxWFpWQXFjOUdDUFIvaVp6WXRKM3I0VStmS3BCNlY5QWo5RmhhNVR6Rk5UcWhoRDIxYlJVWWl0TkU2Wk5mSmpGR0R0b2ZmUzBJeGQyRm5vWCs2SjVLa3owckpqcm5hRmo0TTEzaFBxMHp4d0cwazRsVW5RUkNRS0g2QjJFZHBxeXBxb3EzdloxSlJOSjl4c3ZaRkk4SmdxQzRYZzc2bTFoR216a1hiUUxuMlkyRlgxUnBrMHpCbnpBa2U3VnQ4NEY3NmtydktGV3ZmcXJRUjlxUEt2RFZaeld2eGJqL3hMZkhPK1ZpZjd4dDdWN21rNzVZaDlvMGZlMHVqYzdRbm9WM1BqcWhhMTBCUTU0V0l5TzU4eUJZYXJSQ0V2L3VNY2tJcmZiaXFPTklWNUtNTGU3c0JlZFNQWjJiVW12RldEdk0yNWdpMnRZWUhMWFd0aTE4dHh1WG5sTGNwaitIbjJHckZ2L05ad1UrQi9jUk9wWC9mTjBLWlk4S1hObllEclk0U3Y2MTRPRlFjOW5DRzZ6K0JXMU9Fa2dBYnN4V3N3Q29IVFZLcERQZG94VmxadXB2SmRaZVZXS3Q5ZFZ0NU5aWHFucFB4TytQaTFoeVRjUTZVTUZEVFNzNldudGI3M2NGKzdyNzFoR2I1UDIyUE9VTXAvcGdmbzJJb3d6bEx1bU5NYjM0WXB3TTdkYTJ2aEhMM1kyYjFiOEIzNFRwTFB1ZnR3UCtuam5FRzVCa3pibzB6NmJhUlJDWG95R2tsNVJqTk50UTMwVkF0b2x0RlFpU1dHTFlqYldNSk8zeUlXdFloRkxXSlJpMWhVSkRGRDJsamY3SldzYjZ6VU9FRFczN0VPNjFONFlGM1duNnR0dlZLSjVWVmsvZUE2ckM5Z0tWZ3ZrTVljdGJHK2M2N00zaFUwVGJVMjF6OEgveVZzOFQwSGRhcCtCVnVuZXBiUk1rRTF5N2hodEtlM2Rkc1N0ajlkaE5OcUd6WU0vb3ZOZlRpT0F6aGh3MnB6Ukxxd0RxQ0pTTTZTMm5sNzVPc29sMFBlQlpBbHQyVndCMjBBcmFUWno1cDNUUFV1WXlkcnZvUmRwUHgweitFbHRGV3FmZzEya1cvdm9WWFFRWjdQcW05eGhCVVpPY2lYRHFTd2czaGxFSFV1aUFXcVc2ekJ3dTRLRnZZd0MrMVhZV0dDUkV3U0MvZVF2V2M4c25BZUZ4d0E0ZzZDclZEOW96MmZ3ZDdlSmR4NGVnWDdwZzVmeGswQ3k3aDVqSElkZEhMeXRmc3U0eGFCSnpETnVWc0Zuc2Yrb3cwck9EQzFqTTZqamUyTjdRMUxPUGdNRGptNTIrb3ZvNnVPT3Zrdm81czdiM3NHUFc2VGIyMVRiMTk3NHhJT24vM0lONS9zZTlwMlRMYXZoeXdET1ZZenVkUnVjcW9JTGFkanRLQk9rbXViUk81M2syTS9USTc3Q0pVS0MrUVllY0pGUEVpNUNJV2cxK083YkVkOXREZ3RqOUtvTnhBRHpYZ2p2b2QrT1RqbDhiMzRQdUxoKzEzdW5MYUhpMjF2b3JZZm9MYnRxSHNSSFFvZVVmQm1CWSsrUUN2Wm9mUXRKUEN0ZU15ZDAxY1RmSjZBdHA3UG9hLzNNbzdVWVFVQm5rcHRDY0hTOURYYTYyV21iTXJhaWpEYjhEamVWcHl5dDl2eTMxRjAzQVo3NGp0V0VKcnFQZHl6QkgwWjRiRSttc0JMaUN3aGVyYW5id214a3FJVzJ6VVg2TGxJZ2ZpOHJiREhFVkZVMklGMzRsMDJvQTY4bTNKMTFIdTdEYUxlQmZHRHhNdDc4RU51OExxZnZJYVpiVmxCM1ZTUEd6RGlsY1k5VkJZc25IQ0ZZcmdTeFdCZFZ3eFg5Y1Z3NWFzU3Jsai9lNitrdjc5Uy94dXZxcDlEMUhyMFArR0d5MG1xWlFiVmd2NWxISzNVL25BWjAycFJ1MXJVcmhhdGR3Smt2YTNoeWRvYWJxL1U4T2FyYWlqWVY5THdQcnpmZGFRSDNaRGZXWXA5ZmNYWU4zRFUxMXBIYWx2cjIzMlhjRWRKc3hPd0hxTzE4WGdadTUyMlR0ZzV0a3JZT2RaWlorYytZTE83bXphekR4SktuK3RUVDlsNFByUitQTWNxOGJ5VFpMK3JCaDdtd0J1ZUg3YngvQWlWR2MrYjNBMzZVQWtQZTFrUlVJTU5xSThRTlZ6Q3QxUWllaTl0RDArVWJkeUhpb2dPRlJrNlpIdGRuWjB6WFA4N1pHUHowZWdXRzF0aDQzWVFmcmpDSTkrSEg3MFd0SytxUlB0QjB2ZFVEYlFGL3RhUDlzZkswVzVyd28vakk2NTNqOUJvSHE4UXBpV0lTc2Z1TE50VEZYelVEVklLUGthblNHSG5QbzVQMElnbWZCS2Zja1crbXVqZ241NFZERTYxM3RuZ2JxSkRVOFRDOE1TVWJ3VWpuRDN1N0tjblBvdTlmTDRSWlNHeWp6UWVRVGM5Ni9BVE5xS2ZKS25BVWRKM2dFcW5TRU1BenM4ZTk3blZmWTdZYVJPRzNPZCsycVllUXZQL0ExQkxBd1FVQUFBSUNBQk5tdHBPWTFJN2xWRUJBQUFhQWdBQUtnQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtNaTVqYkdGemM0MVJ5eTRFUVJROU5jYjBHTU40azlpSkNCWkt4bU9CMkFnSkdSWUdDN3ZxN2p1dHBMdHFVbDNqOFZsV0Vnc2Y0S1BFbldiREFwWGNPdmR4NnR4N1UyL3ZMNjhBTmpGWHd3Q21Ba3dIbUJHbzdHbWovYjVBZWZsNjVZcmh3TVlrMEdocFEyZTlMQ1Izb2NLVU14TXRHNm4wU2puZGo3K1NaWCtqYzRINnNUSGtEbEtWNThUaFVrdGIyVTJWNzFpWGJjdVlNaXZ6U0xaMTFrMnA3YTFUQ1MwMmR3VktEK3NDNGxwZ3FLMFRvM3pQc2VaSnk3cEUzbE80Y1N0VnFPWEZZNWZPcVVPT1RFUjdQNHF4OHNveklaY0o4UWpLVXl3dnRmSE5yZTNkZmU1UWE5dWVpK2hJRnl0OG0yRHRWdDBwM3ZUUVJLbk50VWxPeWQvWU9NQnNIV1VNQ2l6K1p3dUIrVi9HRlZqNFd3VHJLUEdYOUk5ZzQ5Nk1GZloyT0Y5aXJLek9QME04c1ZkQzBJOEwzaHFxZk05OE1qQ0U0VUtoZ2pwR3VGN0dhTUZ2WUt6QWNVd1UycE44MXdvVHhVdWcrZ0ZRU3dNRUZBQUFDQWdBVFpyYVRpRmN6aUtlQVFBQTNnSUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TkM1amJHRnpjNVZTWFU4VFFSUTlVNVl1cmFzVVVCQlI0d01QTFpBT0JrSk1JSDJ3c1lsSk5hSEZ2cENZVExlM1pjaDJwc3pPU3Z4WlBoZ1NIL3dCL0NqQzNkVUhZNHlCVEdidXg1eHo3ejJadWI3NThSUEFQbDVXTUlmVktnS3NoWGdhWWwyZzdNOTB1cmtyc04zVlZzNFM1Y2ZXVFEva2lLWldwckhzMFVWR3FlOVlkNXhacjd5MkpqMWsycEUyMnJjRW12Vjc4Qm9EZ2FCdFJ5U3cyTldHUG1iVElia1ROVXc0czl5MXNVb0d5dWs4L3AwTTh2RUVvdmZHa0dzbktrMkp3K2JkZTI2KzN1ZHhLMzA5TWNwbmprdTJ1OVpONUNVTjk4NmxHbXA1OG5WR1BScVRJeFBUMFYrWEk4VjFHSkRLVDM3OHB1K2ROcFBERmxlczltM21ZdXJvZk1yMWYzVnVucXN2aW9XK00zRmlVK1o5SUg5bVJ5R2VSZGpBOHdqektFY0k4VUpnNXo1eUJEYitJMENnY2VkaS9Jd1Q4cjNPc1VDOWZ2cTI4WWYybWJQZXhqYVJzWFhFNUtuMTFGWkp3c3JuNm8wQlh2RkhDdmhQaVZvdDE1Rjd2RU1zc0sydzEwS0pGMURkMnY0T3NYV0YwamVPU3FqeVdTNnduL0dBejlWZktFUjRCQlRlZkhFZllMSEExN0JVMkdXc3NBM3dHRS93c01EeElBVUR0MUJMQXdRVUFBQUlDQUJObXRwT2ZZS3ErNlFCQUFEbEFnQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREV6TG1Oc1lYTnpsVkpOYnhNeEVIMU90MWtTRmhvS0xaUUM0dEJEMHFJWTZNZWxWUTVFUkFJRnBLWWxGeVFrWjNlNmRiV3hnOWNMNG1mMVVGWGl3QS9vajZxWVhUZ2doRkFyeTU0Wis4MzRQWHN1THIvL0FMQ0ZKdzNNWWJtSkFQZERQQWl4SWxEM3h6cGZleTZ3TWRSV3pqTGxqNnliN3NpRXBsYm1zUnpSNTRKeVA3QnV2N0JlZVcxTnZzdHBlOXBvM3hQb3RxK1IxeGtMQkgyYmtNRENVQnQ2WDB3bjVBN1ZKT09keGFHTlZUWldUcGZ4NzgyZ3BDY1F2VEdHWEQ5VGVVNGNkcTkrNTlxTFRhYmJPTkNwVWI1d1hQTHQwTHBVZnFYSjVvbFVFeTBQdjgxb1JFZmt5TVMwOTlkaG9yZ09BM0taRWpOUW5oTDVRUnYvY250bnQ4ZUZtd2UyY0RFTmRFbDI1VjhFdWlmcWkySzlyMDJjMlZ5YjlCMzVZNXVFZUJoaEZZOGl6S01lSWNSamdXZlhVU1d3K2g4ZEFwMHJGK1BmVE1tUEJ2c0M3ZmJIVjUwL25tRG1yTGV4eldSc0hYSHkxSHJxcXl4ajVYUHR6aGhQdVo4Q2JpM1JhcFU2U285bmlCdHNHK3oxVU9NQk5OYzN6aURXejFFNzVhaUdKcS8xQ3ZzSk4zbGQvb1ZDaE50QTVjMVg1d0VXS253TGR5cTdpTHRzQTl6REVtNVZPQ1pTWmVBblVFc0RCQlFBQUFnSUFFMmEyazRVT1JSWDJnQUFBTkFCQUFBUkFBQUFVMmx0Y0d4bFUzUnZjbUZuWlM1emIyeHRqOEZPd3pBUVJPLzVpamxTQ1ZWdzRGUnhnaitJeExHU2F5OWhKY2VPN0hWTGhmcnZiQjBTa3NKeGQzWm4zZ3pKZEwxQmpwNGR5eG43aCszVDluSFhORFlHU2NZS1d1NEhUNjFFdlNSOE5VRGhJQmpLd2JORjFqMjVWeU5HZndBNmttcnR2SHo1TUtFamQxZGZPRGo2SklmbzNadnhoZTZ4V2djNjFmV21PbWwrbGxTc1drM2ZMR3o4ZURMRlgzR3dnTUR6Nm02bjh1WHE5bDZDRlk0Qm1XUzBtOVBXVmxXYkFOVnQyZTlQMU9SUmdiVjh6LzkxLzYyN2FIakwxU25YakhKa09pR1JsQlF5Umx5ZDlIWHpRemxxTjNCcWVHbStBVkJMQXdRVUFBQUlDQUJObXRwT3NsOGJkVmNEQUFBWUNBQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl5TG1Oc1lYTnp4VlZwVHhOQkdINm1GQmJLU3VzQjNoZFc3WUVzb3VMUmV0QktCYTBuaHNRUVk2YmJzU3paN3BiZFdSUi9rcDgwRWZGSWpKLzk2djh4dnJNMEFxVXFSaFBUZG1mbW1mZDRubmZlMlg3NTl1RVRnTE80MVlNK0RLdUhFVU1jSXpFTTRiU0cwVjZjd1ZrTjUzcWhZVXpEZVEwWE5GeU1vUk9YWW1TYzA1RFhjRm5ERlFaOWtkdkpwNEZqU3N0MUdBYkxybGN6bm9uS21YbURWeXlqeWlXWFN3M2hHNldtVFk2aFM4NVpmbktFSVZ1MlhLTmhjL25VOWVwalJsWFVYY00zalFkaUlSQytMTG5lL2NBbGYvTHlsVnZlY2l4Sk9lK2wvc0R2OTRUU013elJvbHNWRFBHeTVZZzdRYjBpdkllOFloT3lvK3lhM0o3aG5xWFdUVENxQkpEMktjY1JYdEhtdmk5b09ieDFWc25SVVJJVXBjZzJ3L0ZVZWgxSkdUUnNZbGNURkpwTFVUVWVLdUFjbVd1ZThBTmJVcVpFZVo0dmNpT1FsbTJVTFYvUzVzQkducVN3eVhXa3hUYi8wNElvcDl3VmloV2JlRzZLUmtoVXcxV0dubW1yNW5BWmVCUnVhU3RrODZzNTYxek9HUVdyTnVWSVVSTmViaFcxdVZNenBxVm5PYlZjZTd2WndtWkx4V3NYNVY3YnVGdVpGNmFTL25JenVFNno2VHBtNEhuQ2tVYVJ5cTJLa3Y5UENzTGFUcnVCWjRxU3BjNW1iN3ZlR0ZhZTFJb1RqbW03UG5uZUZuTE9yV3E0cG1NY0JSMDdzVXZIZHV6UTBZK2lqdXVZWURqNlcwVWFTanB1WUpMaHdLOGFRTWNVVGxLcDI4bWl4bXRWeFJDWkxTZ2lOM1VjeENHR29UKzVBeHNDcmg0ZHc4RmZuaDNEempXWEgzM0trTjV5WG9idW1wQnFUY0ZTcWRuQytvWnVlSzUwVFZlbDlnUzUxOGxLcGFhVDYwaXBGMFdNbTZidy9lVHBFWHAvUGZuSEw2TE4xN3B2STBJc2lEdERmMnFxN1ZWUXltYTRIWkN5eDZtZlhZdS9SOUl6T0VML0EzSFFBU0tTU0todUJHaWsxcVEvbGc3NjlXT0FkbmZUckloSWlNUXoyV1d3ek5BeUlwa1ZkTHdtS0lJOTlPd2lRMkFCZStrNVFCaVpZaDhPQU9GTWhXVDBvZTZpTUNyZ1YzU0hWZ3VaTnhUdkRTTHZFQzEvUk9lamJNZDdkRVh3R2RwN2RETWFlN0xSRmlTVzdkeGswOVdDOU5JM3E3VTZya0IvRldwVGxBZUpBaUNoSXlEbGkwamlHY2J3SEpOWXdtTzhRSVB3TlRrTFRUazZCQTVUNWVpNmhpdldSQVpwZG95UUtJMUpIQThMY3lJeFRwSlAwa3hKTnNJU0FKMlp0OWoycW0zbDlGV0RacXExY05GbXdCVFM0WmhCTnR3YndpbnNwMW1NclByQ1d1TTdVRXNEQkJRQUFBZ0lBRTJhMms1b01pR25TQUVBQUNNQ0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNVEl1WTJ4aGMzT1ZVVXRQQWpFUW5zcGpBVmRSZkNUR3F3Y3hoaW9xRndnWElvbG1OUkdRZTlrZG9HUnBzZHZWK0xNOG1YandCL2lqakxPckoyT01Uakt2YjZaZnZrbmYzbDllQWVBVXRrdVFnWW9ER3c1c01zaTNwSksyelNDelh4MHl5SFowZ0F6S25sUjRIYzlIYUFaaUZCSlM4YlF2d3FFd011bS93S3lkeW9pQmU2RVVtazRvb2dpcHJYbFM4MFVvN0ZpYmVZTUhPTmM4OG5rUDcyS01iRmVibTFoYllhVlcwZDV4dmNtZzJKY1RKV3hzaVBMUzAyYkNIM0IwTXVOaUpQbmdjWUU5SEtOQjVXUHIyekFReEVNTEVaOGdLUkFXQTM0cmxhMmZOWnB0SWk3MWRXeDg3TXBFN001UEFtb3pjUy9vM25QbGh6cVNhbktGZHFvREI3WmN5RUtPd2VGL2JtR3crNHQ2QnRVL2s4RVJMTkUzSmNiSVNRcmxQRldjY29Ma0RwNkJQVkd4QkE3RmZBcDJvVURSL1Z5QUlpeW5UOTEwYXdWVzAxeUd0UlJkcDFoS25SR2FXT0VEVUVzREJCUUFBQWdJQUUyYTJrN2tmVjd3UndFQUFDRUNBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWk1amJHRnpjNVZSUzA4Q01SQ2U4bHJBVlJRZmlmSHFRVFJhZzhvRndvVklva0VUQWJsM2R3Y29XVnJzZGpYK0xFOG1IdndCL2lqajdPckpHS09Uek92cjlPczM2ZHY3eXlzQW5NSldHYkpRZFdEZGdRMEdoWlpVMHJZWlpQZHFJd2E1amc2UVFhVW5GVjdIY3cvTlVIZ2hJZFdlOWtVNEVrWW0vUmVZczFNWk1YQXZsRUxUQ1VVVUliV0hQYW41SWhSMnJNMjh3UU9jYXg3NXZJOTNNVWEycTgxTnJLMndVcXRvdDk1a1VCcklpUkkyTnNSNDJkTm13aC9RTzVseDRVaytmRnhnSDhkb1VQblkrbllZQ0tLaGdZaFBrQVFJaXdHL2xjcld6eHJOTmhHWEJ6bzJQblpsb25YN3AvZVBadUplMExybnlnOTFKTlhrQ3UxVUJ3NXN1cENEUElPRGY2ekNZT2NYOFF4cWYrYUNZOGpRSnlYR3lFa0o1UUpWbkhLQzVQZWZnVDFSa1FHSFlpRUYyMUNrNkg0T1FBbVcwcXR1T3JVTUsybXV3R3FLcmxFc3A4NElUYXo0QVZCTEF3UVVBQUFJQ0FCTm10cE94NjhWUTZJQkFBRG5BZ0FBTWdBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFM0xtTnNZWE56bFZKZFR4UXhGRDFkaGgxMkhXVUZSQkUxUFBDd0MyWXJxUGdBMlFjM2trQldFL25ZRjU2Nk01ZWhaTFpkT3gySVA4c0hZK0tEUDhBZlpid3ora0NJTVpDbXZmZTI1OXllMC9UbnIrOC9BTHpDc3dhbXNOaEVnSWNoSG9WWUVxajdNNTJ2dmhCWUgyZ3JKNW55cDlhTnQyUkNZeXZ6V0I3UXA0Snl2MnZkeDhKNjViVTErVGJUZHJUUnZpZlFiZCtDMXhrS0JIMmJrTURzUUJ2NlVJeEg1STdVS09PZHVZR05WVFpVVHBmMTM4MmdsQ2NRN1JsRHJwK3BQQ2N1dXplL2MzWGpEY3R0SE9yVUtGODRicmsvc0M2Vmx6UjZlUzdWU011anp4TTZvRk55WkdMYXVYYVlLTzdEZ0Z5bXhBcVVwMFFlYStNM1gyOXQ5N2h4ODlBV0xxWmRYWXBkK3BlQTdybTZVT3ozbllrem0ydVR2aWQvWnBNUWp5TXM0MG1FYWRRamhIZ3E4UHcycmdTVy8rTkRvSFBqWmdJektmbXlabHE3ZmZLMmMrVVJKczU2Rzl0TXh0WVIwOGVNNnFzc1krOVQ3YzRRSy95akF2NWNvdFVxblpRWnp4QXpIQnVjOVZEakFUVFgxcjlDckgxRDdRdFhOVFI1clZkWWl6dThMdjVCSWNJOW9NcW1xL01Bc3hXK2hmdFZuTU04eHdBTGVJQzdGWTZGVkF6OEJsQkxBd1FVQUFBSUNBQk5tdHBPRXBNYStLSURBQUJxRUFBQUdBQUFBRkpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6TG5OdmJPMVhUVy9iTUF5OTUxY0lQU1Z0bHJTSDdWSmtRTGVoUUE5RjF3NDlEZHRnVzNRbXpMRmNXYzRhRFAzdm95VExrdndScDFpMzAzeHBZMUVVK2ZnZUtSY2lXbThpVXZLTVVTWjM1T3ZwNHZYaTdId3ltU1E4bHlKS0pMbURod3BLZWNuRmJjVmxKQm5QUy9Kck1pSDRMSS9KSy84aGQ1ZTM1SnBUeUZydmo1ZG1BK1RWUmhsOVFrY1Z1cm1EQk5nVzZKeDhnQ1JqdWZwUEhRTWZCZDh5Q3ZUSjdDdWxxUHBqd1ZCSS9jUTdDZVhaRzhMb09Wa3V5WDBKYVpXUmxBdFNDQ2doVDRCc1FiQ1VKWHBuczY5aXVTU3NMQ3VnRi9LOGVZMW5zbnhOcWpoejcxem9wZjVqVnVvZ1lRdm9DRTFzVmxNWDBUdzhaZTU1bnltNGU5SFVTSXpqcWMwc29qZHBDcUtCTTRUUCtQdW5nUG14K1pENXg0djA0WXE2MXhHbGVEcWFWMFdSTVJBOUdHdXZEY3AyQThzcFBBSnROczdERTl6UEI3WDlhcVFtUVVVdE8xL3FyT0dhS3dVcHZHQ2c0dHBOZ1NHeWhPU3h1RWx4QTJKcW5DM0pkVlNVUkg0SHJDbVJYUCtIQm5wMUV4VUZwdGVRY3ZXMlQwOHpsVUE1UXNsbkJhaTM3QTlSZ3pRVXBONC9NemJEZ1NuY2tpZ25QTTkySkFZc1RMeGhVbUtKNGgySlNGenRRQXhFYkd0YUNMWlZlV25iT2w1c2cwWThYRXhuTmkxUFFkcnRpbXpLOVFJRlExdHNUYXM4MFUxcURmS2RNcjB3UnpsWFd3WS9pUUJaQ2V5cWxsMHo3d1N6Wm1QeWZHODRSV1hpNlNwajdYd2E3bnVvbUlDcGk0eXNWc2JOekdudFcrTnlHTldNcnpIUWZ1ajhCTkhXYTNnREdmYjNrSG03aDJ4Z3c4Vk9LZEV0dFh1dlh2QlQxdHo2b1VvdndES2Z3Q01yWmRtQlJaSDhNNk5mRmtoQ3hBWGpyUXV1SGhzV0Z0YlpkZG9kQnVjYkJHM1BST2d2OTh5TEJqekQxUkMvb2Via2tHa1FiZ2pnWUk0NXowYWhZYVduRXEwYmppMS9ES3JUeDFNZnEyQlZUWktlRlFkbkYwVWZQelFJVUd5Qmg4c05CeGEyKzN1aE5PM3c1TVQ1QU13dm1Na0tXb2RxUFg5ZHpscHRxSGdZVVlacGhJZHFRMXYvVlhWMEI2MWJDMGZUNEtBZEY1VHV3VU9TTWczNkVGSDVsZ095OGt6NmhlVVp0TzhWT3MzUXBIWEZzQm0zL1BSZE9Gb2liUmV5TS9jUFZ1M3p0THF2amVtVExlajZoNC83UUJFUEZIK25xQzM1by9mM0F0VFVkSzZqSE85Rk9ERHhFRGxJdHA2aHFSNTNIaG9Zc0R1Q25mdGtYOVFYM2hwKzY3NFY0MzFCYll3SkZ4aEl3WE9xQ21NdlJ6VnZHakI3T2s3d1hkSnVPK2FTMDJrODRVWFZYUmJyYUovZGl3SkdVbk1wYmMrTmZZVDh6NzQvWTkvUlVVaSsrcnZnUmVqSFVqTHRvMkRmMVBNcmRnQjE3ZWVMeS9UcE1QNzZuejU3MlR0QzNLZkpiMUJMQXdRVUFBQUlDQUJObXRwT2xnQUJZYjhRQUFBVExRQUFId0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxUmxjM1F1WTJ4aGMzUEZXb2Q3SE1kMWYwdVVCVTVIbTZJRVNTQmxOZG95U0JHODdRVlVaWXVnZ0tSRTBsUW9LYkcyZ2ljZjd1QzdBeVU2anUwa1RuRjZjeElyMVhJU0pYSnN5MHBDUWxic09EMXhtdE43cjM5RHZpOXhmbTltOStvZURxTDhmUUY1ZTdPemIxNzl6WnMzZS9PRi8vM001NGpJb3Y4cVVZWENFa1VVbHlpaGxGdXJKYnBJMVJJOVErOHFVWTNXWnFsT2pSS3QwN3Y1dHNrUFdrelhacm9Odmx6aXk3UDg0TGtadWx5aTk5RFg4dVc5UE9qclN2UStldjhNZmFCRVgwL2ZNRXZmU0I4czBUZlJOOC9RdDZqMHJTWGFTeCs2anI2TnZuMkd2bU9HdnJORTMwWGZ6WmZ2VWVsN1MzUVg2L1o5OVAwbCtnSDZNTGQrOERyNklmcGh2bnhFcGVlNSswZjQ1a2RWK3JFU0hhUWZWK2tuVlBwSmhhYnZyZGFyN2ZzVm1sallmMTZoeWFPTk9GSG96U3ZWZW5KcVl5MU1tdWVDc0lhZTNTdU5LS2lkRDVwVnZzODZKOXNYcXkyRjlxNVVHNVgxV3RCT0c4MDFweEluYTQxS0s2cWNTMXJ0d3lCYUM2cDFoVzVhZUhMbG1lQlNVS2tGOWRYSzJYYXpXbDg5TEVRR3pWVXd1YUhnc1VJek5SWjdxdkdzUXZQeWVidTZsbFNFTXNlQ2RuSU9keUJUcWhBZ242OEY3WXVWSTlYVjVYbzdXVTJhZURoUkh4eitSS09leEQzRGQxUXh2cHkwTHg2dFZaTjYreDFuVnRqZ0FuV21uazFDOHhtRjlxdzBtcXNWY1ZOWmJ6YmFqYWhScXp6T3R5QzZMbW9tTWRoVWd4cnN1cTJITkdwZVhtODNLa2U3ejBFK2ZXVDUxRU5uTHJBQ3o3V2JRZFErZmdrUEZYcDZvV2RrRUZZcmNkQU8ycGZYazFaRlVCd2VWckRBd1FNOHhNanpRVzBqWWRGVGw3alZyMk8vcEhPNHNuK1hRWnhJdlc0Zm81WkNzN1hHNnJuR2VqV0MrU3JhOEhRQU85dFoxMXhTajRDeVdKQ2ZyYTdXZy9aR0UxcnNyTmJqNUxra2x1b3B0RXVhczlHdTFpb3JWWUdsWGZWR2ZibWY2dnBzMUtOQk0xaEwya216eFZEb0F5dVV5d0NyRGJDOGQydkQ3NGZJMDJPR01PR1pKRTJhc0NvWnk0ODU3anpiRHFKM25ReldoVklxTGFuMFVaVmVVT2xqQ3BYT05qYWFVWEtpeXRyTzhndzZ4T0xMcEpHdTBrK1Y2UUg2YVpWK3Brd3YwcytXNmVmb0paVStYcWFmcDArbzlNa3lmWXBlVnVuVFpYcUZma0dsWHl6VEw5RVZsYTZXYVpOZUxkTm42T1V5dlVhL1hLYlAwdWVZMGErVTZmUE01YlAwcTN6N0NVaS9qTC9Ga3ljWDQxaWxYeXZUcjlOdmxPazM2YmVZdzIrcjlEdGwrbDM2Z2tJSHo1eDQ3RXdTSmRWTFNid1FYbTRuTGQwNXVGR3RINm9nMkhmZ3IyM1l6c0dXUU9CK2xYNnZUTDlQZjZEU0g1YnBqK2kwU2w4czB4L1RueWgwODhWMmUzMnBVdEZkNDVCdUh0SU9HZHFTWjF1MlF2c0taaGNUVng3RzVXelN2RlNORW5ZSmRQclRNdjBaL2JseTY0T081bW1PWm1tMllWcWVwdHVPcm1tNlpydU9wdUZKR3R1aGplY2FudGtXdm5WSEMvamV3SmVwKzdwam1ycnJhemFQaTVNRXZERGVOSGkwNmZNMU5kT2tLNE01bVNCaEtzKzFYVGVDc0d2OEV6SnN6WEpNelVzc3lFazlYYmNFNThoMklkSFU3Y1JNb0tMbzFlRWkwV3RHYVdyRmRpUjZEY2VRdlo3bnVWWm9HTEkzREdSdkdEbVJIVWFTcitrbHNqZldMVDN5VFUvMGdxdnNUVjNUOTZOQWs3MXVScHNHV3FUYnV0VEI4azFRaDEzZmRuM3Vld00rUjErVWVkNTArTCtod2I2TU9rajdxVTFieHNicml3MUxqQ3piWVlud3Z1NXBudVhwSEFVRDFFd3J2azBlQTk2NjVCM0Q5alRoTVdtcU96MzBvSUVQRE50Z0x1alh1ODk4M1lac1cvY3puajd1UEZOdzF1d1FyVnh6WFdkdllhVEc0OEZONi9CZzJXbksydHFhL09lTEQ5TXlYNTIxeWJoWUlwWVliYkpVSjdNQ1hCaGNqS2pNQS8wYU1tZmZ5cm5iV3U0VkgzYjVRR3BQUE1CektCNjY1NDJJaCs2NjI0eUhIYVY5OFhBSzRpSEdkdUtoQjhhSWVGaE9PdTVQU04wV1ZROWZjMmllTzhNOWhiaHdyaGtYaG1GdWdRdERDN2VGQ3dOUHJ4VVhUaGNYWTdCaE9Na1FOb3pBNmNXRzA4V0c0ZGxEMlhRQUdaNXUycUIzb0poQWxZWjdINUxSSS9UZ2UzQnlZVitHSGVGVDRFTzMyZS9zWHc4ZmlVcjJTcisra1ROT1g2OUgzemp1cFM3UTFzaTBOWWEwMVlWdWh1alJ1eEh5UkV0NFJUeHpyRzdXNytBY25IdmxNcVdNSGJkeUdpUHNvOUZZY2g1SHo1THhoc2N0SHRFbnhVU0hLM2xZZmZiNUVwTUNSNXIwUDhmYzBuTDBDUno0bVFXOGh1RzU2UnZTdnQ1WmczL1ExYk5Nd2QwM1dDZjJDK0tETzk4V2Z2Zk51RGNEY1R3N2NUTDk0SFhneWd6MThYRWF3SlNlUjhUcDJMTlZSQkpqZkVSUzZ3MUh4TktkLzhlSWhQN29pS0MyR0lxSTVVUmM2MmhKLzF6Y3hqeTB2T0g0WnR4MHExK3VudzVUQnA2Z0RIcmxEdVpsV0djZ3U0M1VwUUFsOEpESTd4M2ZTWjl6Q3pKMHRDem15cGp4NFV0dWRjWWJjdDdMMmliMXgrRFJrbkpZcjY2Y1hLckYzS0cvSVZZSXJ0WjRKUHVWVjBiYjhoeFlKUEtPWEJYQlNGU1pNRXprSXRZUjNnUm1HQmZRazJlTnhkbVg3NWdNOGViS3hiSU56dlZBQXNhd0pDREV5UHh1KzdHbzJuaE5ZWi9iTHM4QUlZMjFzaTFHSWI0Tk9hc1lUOWtvUjg0UFg4d3VUWk1ZNUpiQnExVUlHMFhsSlo1bWMxQ3UrVHdQbUlmSEs1Y2g0eVZXTk1FdFgvT0d2UWw3bkNKL1pyNlUwb1VmZmN0SEZtQzBNNTgweFVoVGVFelA4YjR0VkpoYm93S3hFNTh1SHhFUkkwTUh1c2VnWTlBYUlTKy9nMFU2ZTBkWXBZc1ZQa2VJSVdLWUk4UWNpUkNlRzJZUFFteUJFRnVUNCswZWhHRDJvQnJYQktiMEFZUTRRZEtIRU1jenQ0RVFIdlZHRVlJWWJvV1FRb3hnWithN1JYN2x6SkFqeGRlTnJKb1NIdVc0aWpaUTQwRmJWNkpHclBpT3RGUlFXSDE1d003bDk5YUkyTzFvWTFCbWJpLzM5R0JLNzJES05ZMHhtQUxvaXF6dnpoRzd6NG9NT2E2ZDlQUE5jMjBrdk1UNEtNSXZlMGhnUU5aRkdtY2R6Mlc1cUFCMW1kV3c1elVrNTZ4ZTlyUnM3WkFjd2RQajJwK2o0NFdlaUIxb2ZhNkdUWk85eTIzNTNMZXpjU2I0R3h4clNIVkU5VzBOZU16aVhPRnpsV2JyTHFqUkV0bVU4NkxvUlkvSk92Sks1Z3ZmSmo3N1hlWlBPUk1FSnJFQ0dZR3N4Zk42VHF4Q1pwNm54UzdGbHpzR3J1ODcxUVFVa3ZzWStGbThNYkJsWlRqRXdkWEc3VmZrdEpKWTdMTVU4enRiQ1F5NTBtZnZKdUMzRE5WNkYrRkNsamwyYzlTN2t5cGNiZnNsYVVYMS9TQUtSMlJxdWNQcjI0MTdnUzY5cGx2eVBwYVkzK2JhMmovTHBaemVLSFUxRi9QSHlOL3ljS3pabXQ0cVkyQm11YkxPa0JpVk5TRlhZaUtLdHNCblFYM0M4OTNYWFJTTnBwYTREbERrYXJvUjZ6cFVSTFlKUW15a3NkZXpUUXMwdWh1bG1wRWttbTBhRWZKSWJNVlJiSm1oNzJwK1QzWGppQlNQWGJKczhUdVdubHF1VUhmckRXUWQzeG0zUDlLSzE3SXhXY2YzL1d2SU9tNWgxdkZFMXNHS21MY2xMakhXN2NrdVRwWmR2SjdzMHNrK3ZwWHJMaXNtcmpmQTN4NlJYM2lud1Y1RDBFQnZaM3R2NkRLVVdRSzVjL3d5WnBiQU5Jc3ppNmQzZUppZW5uUHB6eGQ1cGJDOXJOT3BuWGptdTJJdkliT0xLV3pOczB0bmxnM2tDNHN6d2V2Sk9WbDluZWVXd2VqN0hQMWhKSGRyYXNZRHIrNitNK1JEcm43MTNBWXZ3N3ltWi9jVzRpWHJHTU9MZWFZTCsvaU8vUmpJdkNKM2tmS2RvZ2NJd0Q1RHpFQit5Mlo0bnVoeGVlVnhVenNNZE04M1RRc3dDSk0wQWFRYzB3M3N3TFNzQkQ3RjB1aTREalkrV21BblZoTDVwdVA2aGh1aEJFbVNNSFd4V2tYNEpQakU4dU56cnVlcU04TVJvOTBYNk9YcW56OTliNWhDOGY1MzFCdW0wSXkyOVlhSjY3UnJmY05rajM2LzFNbGU5dUJlbEJFbGtLVDVCUldXS2Q4cmg2SDd1aXNoZlJzNUtVek1jWHU2SElFamQzVkFGZWNsZ1M5VFpodzVIcm1HczRVSnRPVnJodTN4S3d0ZGk0d3NSNGlJMnNQNVlkVDZ0L1U4S0ZyL2hNd00rMElYWGV3aUdMOHlaN2c1MW4yUnp6aXJjT1VtNWtlZXdReFo0N2xwaE9wRnM4TEVjMXpOUWYwYlI1SG1HRTRhV2w2Q1pTTzB6VENLb3pTT2tKdkRXSFBTMkFxeHd2bUJGME5rR0dPKytOMlB3SGUyRXZXalhLNStoVGlQSW04TG5FZWh0aTJjUjZuOTVYL0RqbHBHb2h5enRnL2htdGo3eUxiUjA3WUtmblBDRTErVHU2azh4M3BDdjk1OVgvYk9tbmRMVnRGK3EvdHVTZXdDMlg3czhUcTd1aGlWaVN2dHp0Nk93d3Y4MndYWHp2d2NKVjJtZ2FiTGVvbWZZTStjUDNYbG13dEJrNjlUb2gvck9LL2xkbmQvMkxQakE0MGJaeGhITzdEa0xsMjBQZGt2YlJlendlV3gvTTROY2pNSlFmNDJUcGZyaFloNXpMdlBOTUhDYXp1R0crQ2ZZV284NlRRek5DSXo0TmN1bG1NWkJyL0U4U0luTk8zWU50SWtBaGpzVkV0U096VTFaRi9Ec3RJd2NnTXJ0dUFjRFVrRkRsWklPYWpTUjh2MEYvU1haZm9yK211RmJ1ais4dnRRc3hsYzVwOS9WWHFoVEg5RGY2dlMzNVhwNytrZnl2U1BmUE94TXYwVC9YT1ovb1grVmFHOVcveENYS1ovbzM4djAzOHcvL21Sdjgzemo1di9DWUtSNXlvVTJ0WDlyZjkwK0V3UzlYZkpuLzhWZXN1V3Y5VXI5S2IrSDdjVnVubkVJUXRZdGJCL2l4TVl1L3BQVnl6SEN1MXNYVzYxazdWalNScHMxTUQ2eGo0R2tvclBQd1J0Yml1MHVERDhlSEJFNzZtTm0wYzhVbWkyM1ZpdXQ5b0JXempYSnpYcnh1anJoem9WS3JjYng5Y2IwY1dUMVZxdEtvN0VQQUsxaTQ2VktLU0tzeE9uVTBScDRaSDlvODZlOUlaRWVBTmNHeHVzbGh5QkFEK0tTTFVScnlSWU81eGpycjhid3RiNXJsWm5jMVlHQXk5TzBjeldHdlhWOC9JNFI3bVI5cHB4VTBlL0FSZk1OdEtPNlE4dUZKQnNIWTlCQ093ZGltOXZ0TlRWSkl2ek5ZZ2FaSFpYOXhIUGphQmR5UitlRUxkdGpoRE1lMVEwNFRadm9laHN6SGd1akUvNVRDRy9WMitFY3IzUkRHcVlqYkx4VUJRbHJWYWptYlB0UHpnMFZ5UWZZYnV0Y0lhZk9mSFlXVXpValJha1g4ck91ZXhiMlA5azhUbXJEalhMR1RwczlIRFF1cWhRcVhVeE1QT2tjUGRvWi9ScnZiOVlYdkp1YU5TR2p4N2JhRUJ3dFZIbmN6aDhLT1Q0MGVQTDU0OGZlK2Z4ODhkUG5WTm9UMEdDT3k0Ty95QTgwL0lZa0VMbXVJTk9oYnJkTXVvRWxrSlQ0VWExaGdSMDM4TElZMXJaSVpLKzgxRkRCN21tV3V1MUtnTC85aUovRlI1WG00WnJ4S212d21uNkJISVdac0dwemhtbTNqTkx1L1BaMDN2ZWFWKy9ZMDVzMUNOMjk1bWt2ZEdzSDB0eVQ4YUo5S1JWb09nZzB3SXBOMEtwQW8wbVc5WDNKQ0lMTHVNS0dqWnJlZit3WVZCZWF0QjdORXVoMDBYYWJMRTBEaDFXR3pxR05oSEVNYytFUVJPR2JEeFBkOUlocWhEL1RaRENwNmR3TlhCWHdiZUM3NmtEVjBuNU5Cbzd5TVIxV25UZVNoYXVaVWxBTmpuNG5pV1hQRGxZV1FPeldmUjlhcE4yck55elNSTlhhUElLVFYyaDZVMVNUNzVDTS9kY29WbDhIYnhDcFUyNkRnU2JWRWJYSnUwOHRkZ2hYSm9FeWFLa25KK1VwTGg5MHlhOVdYWnUwaTdaMkgzOUp1M0dveHV1MEkyaWYyN0N5SjdjdEVrM3k5NVg2SlpObWtkNzk1NmxxZGRvNzRYNXFhdDA2eWE5WldsYVdWSjMzN1kwMHpYekVkcU42MjAwU2JmVEhOMEJnKytFUi9iaDJWdnBBWG9ibmFDNzZVbGFvSmdPVUlzTzB2dnc5RVB3M29kQjhSRTQ1MFU0NVNXNDVaTndDcnZxS2VrTzhta0ozNVAwY1RwTTk4SlpjL1E4M1VmM0M2bnZCZWNINGJnSGFKMGVRdDhrT04xRVIrZ29YUHdpemRBeE9nNzN2NFM3RS9RVnBJSzNRZy9qNlF4NEwwTmo2ZnIzWTF3Sk1qYnUyWDM3RmJyajFBSFl2RFM1T0dHd0IrOThucWFVbDEranV5NWNwWDFMVXdjUFhLRzNidExibHFiUnVIdEpuWEJtNW1ibTFWZnA3UXE5UUFjVzUyWW1uemJtMWJtWlYybGhCMzJlOW0vU2dhWForYW41MlZmcG5oMzArQWRubEJlLzlNWFg2Q0JjT1Q5OWxSWmZGc2F4QXcyZ2cyQ3NDa04zd3NSYllOQWVtTFVQQmkzQ0ZCUEdISUVoRjJCS2hIWVZCckNqVWloL0FaK3ZwQldZNVlEdVBqb0pFMkVRbmFMVEFxZ2I5Q2pNVmtUck1iUjJRRXFkemtEYUJHUmRwTFBvbTRTa00zU08zZ0YzTGNKTjU5R2FCcmNqOURoYUtuMFZSdDhCZWtsMW9VTjFvVVAxQktpZUJOVWhtdmdmMnFQU1V5cDk5WmRvTDgycTlEVm9pdjlQaWVzNzVYOG85Tit3VzZHbkJZeUMvd05RU3dNRUZBQUFDQWdBVFpyYVR0M2RzMUZSQVFBQUxBSUFBREVBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVE1TG1Oc1lYTnpsVkhKU2dOQkVIMGRZeEpqM0RVcXVYb3dpazVBRVZ3SVNqQWdSTUZFUE9UV21hbkVEcFB1MkQzajhsbWVCQTkrZ0I4bFZrWlBJcUlOVmErVzE2K3I2TGYzbDFjQXUxakpZd3lMV1N4bFVSVElIQ210b3FwQWVyMWR2bWFvbVlBRVpocEswMFU4NkpDOWtwMlFLL01ONDh2d1dsbzF5citLNmVoR09ZSENtZFprYTZGMGpqamRhaWpqRFVNWmRZMGQ3SGtCRFl6bmZLOUp0ekc1cUc3c1pXd2lHU21qM2RyK29VRHFvU0lnMmdJVExkWFRNb290U3g4M2pPMTU5OVRaNlh1eW83eXJ4eUUxcVV1V3RFOUgzNXFCWkQwbU9POGtDQ3c1ZDFobDNYekx4TmFudWhxTnV2clQ4OXQ5ZVNkNTIxUHRoOFlwM1R1bjZNWUVXU3dYa01hNHdPWS9OaEVvL1RLeVFQblBXcWdneFo4ME9vS05KMkhNY0hUQTlSUmpacVAwRFBIRVVRclpVWjd3NnNpeEwzNHlNSUhKUkNHREFxYTRuOFowd3AvQmJJSnptRSswRjlqbkV4UEpUU0QzQVZCTEF3UVVBQUFJQ0FCTm10cE9FL1NieG1FQkFBQldBZ0FBUndBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVa1UzUnZjbVZrUkdGMFlVTm9ZVzVuWldSRmRtVnVkRkpsYzNCdmJuTmxMbU5zWVhOenBWRzVUZ014RUgwT1IwSUk5OTBnZ1NpQUFoY2dHaEFTQkpDUVZpQVJsTjdaSFRhT3ZIYmtkY0wvOEFkVVNCUjhBQitGbUYzUzBFQkI0VGVIbjJmZWpEOCszOTRCSEdHampqRXNWN0ZheFpyQW1IR3B3RUhrZkNxZnFIUFlrMzN2Z291ZGtiSHpKRE1LWFpmazBsUGVkelluR2JuMFJLRG1UTkpXWmtBQ3ExRlBEWlhNVk9qS0M1M2UyRUFwK1lKajZXbkVtVHpWVm9jemJyZTcxeFlZYjdxRXMzT1J0blE3eURya0gxVEhjR1l4Y3JFeWJlVjFFWStTNDZHcmM0SE5WbUJCeWFVS3F0bFZOcVhrYWtnMjNJK0VDVFJ1ckNYZk5DclBpZm5OU0R2Wk55bzhPcDhkeTRReUovTll0blRXTjFUVVVpbnQvRjZUaDZpMzNNREhkSzFMZVQ4ZUh4UnpOekNGZWhYckF1Zi9iaWN3WDY3UzhKVzg2L1FvRGdMYmY1ZkZGaXI4cCtERDI4SUVlN3h5VkV0YkcxbFJDR1djNWtpV01UQ3gvd3J4d2s0RkRjYkpNdm1NR2NiR053R3pXQ2p2RjB0Y3dqemJva3dGSzVqRDFCZFFTd01FRkFBQUNBZ0FUWnJhVGhDZnpNOVJBUUFBTEFJQUFERUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTBMbU5zWVhOemxWSEpTZ05CRUgwZFl6YWowYWhSeWRXREN6b0Jnd2NUZ2hvVWhDaTQ0TUZiWjZhTUhTYmRzWHZHNWJNOENSNzhBRDlLckl5ZVJFUWJxbDR0cjE5WDBXL3ZMNjhBNmxnc1lBeHpXY3huVVJISU5KVldVVXNndlhLMWVzblFOZ0VKbERwSzAwazg2Sks5a04yUUsrV084V1Y0S2EwYTVWL0ZkSFNqbkVEeFNHdXk3VkE2UjV4dWRKVHhocUdNcm8wZGJIc0JEWXpuZk8rTWJtTnkwYUd4cDdHSlpLU01kc3YxaGtEcW9TWWdyZ1R5NTZxblpSUmJsdDd0R052ejdxbTcxZmRrVjNrWGowTTZvMnV5cEgxcWZtc0drdldZNEx5OUlMRGtYS1BGdW9WekUxdWZEdFZvMUtXZm50L3N5enZKMng1b1B6Uk82ZDR4UlRjbXlHS2hpRFRHQmRiL3NZbEE5WmVSQlZiL3JJVWFVdnhKb3lQWWVCTEdERWM3WEU4eFp0YXF6eEJQSEtXUUhlVUpieDg1OXBWUEJ2S1lTQlF5S0dLUysybE1KZndTcGhPY1FUblJubVZmU0V3a040SGNCMUJMQXdRVUFBQUlDQUJObXRwT2NadEprTklEQUFBN0NRQUFLZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTlM1amJHRnpjNjFWNzNQYlJCQjlGOXRSN2FpdENVa0twYlNsTmFuai9MaVV0SVdTRUhBZHB3MVZISWlOUzRBWlJwR3Vzb0lzR2VtY3BIOE1YNW5oVzJGb1MyR0c2V2YrS0lZOTJjUzBNY1FaYW8xUDB0N3V1N2Q3ZTA5Ly9QbnI3d0N1NGFzMFhzRkNCcU80bHNaVlhNL1FjRVBEdXhta2xDV0Y5ekxJNGVZSTNzZWlocVVSWlBDQmhtVTE4NkVhUHRKUXpCREVMUTBsRFNzYXlnekRzdUZHdVhtR25PRUd2T1daOG40UU5tOXdXelFESGxtODZqWmJucWpLSURRZHNVaitTNjd2eW1XR0svbEJBcWJxRE1sU1lBdUcwNGJyaTBxN3VTM0Ntcm50a1dYVUNDelRxNXVocTk2N3hxUWl4S0N2K2I0SVM1NFpSWUplSndkWUxIZWQrS1hNVnN0N3dIQmVHWVc5WWtxejFEQjlSOWpsWGVITFRSRzFBaitpZGFLOEVZUU8zeFBiQ3p1OEZRWXlzQUtQV3hURW0wSTJBanZpWWRlWkc0R3pPRFVJZy85ZWxPZ2x2TUJobUR2ZTBnd2pRdUhVVGE4dElnMjNxWFRsbnVHZUt4dUdnaTM4QTFidTgxTGd5OUMwWk82d0wwR2VsQTlhd3U3Vm8vUlM4cHZNR3p2bXJzazltdVViMnp2Q2tsUzVReWFHVEhuZkVpM3BVcHlHT3d6cHF1djRwbXlIUk9YN3d3R0tYQ2dvR1hkWDdQUDdiZCtLUS9scTkybnBlQlY5Q2JrdXF5U3FRVHUweEtvYmQvTno0WE1xQldyNnNtOTVRZVQ2em5yTVE4T2Fqbzl4VjhjWXhuVk13TkN4am9xT0RYekNVUHpmdEhTOGhVczZQc1dtaHFxT0dqNWpPTmNyamJudGNwdEMxZDVIdkVhampqcnVNWXpGRlcrYXNzRnZ1YzZhTDRValFoMmZZMHZIRjloaW1EbE9mWFdjeDBXU2xFSE9MRVAyeGQxbXVIREVkbXY0a2lFL2FMY3p2TnBiNHFEdkdDNGR6WStFSk9wYjhGVXYyT3NJbGpHSWtIeExiQ1F2eXdiMWloUmhSMDE2R2Y2TnBoUWlyelR6VExXMnNWbGVXU25XaXFVN3hjcnQ4c3JYNVhxNVVxUFNHUCsyblRFdjFaV21aWW1JUkgyZVpQMjdnV1Q2Q016akt1VXhaQ2pyQ0xubTIySmYySjBwT2tqNXJtSzBwZXR4dzQxVVVxZWV0MUNkS0pCaFBML1dWMTVPMEd5TVI2MmQ3KzhSZUhiWFk4TG8xLzNLeHhkN1haL3h2am5oSW4xT1IwRU5CcGJOcWpOTkgrb0UvU2R3aHF5djBkTXlodWdDTW9YcFIyQ0ZKeGo2a2Q2RzhEcU53K1FET0RnYlI4UmVlQU52QXZHVFFtTjAwVm5xWXYxQTJFbTZyeGQrQnZzSmllbGZrRnovRGFtdEp4aXV6QksrTmp2ekdDY1NUNUVld2pOa25tS0UwVjEvaEpQeFJQTHd4S25aaHdkMHpoSWhZQWM2dnFIRlBiSTE4UTU4M0VVUVV5eDBGaitndUs3RWhxanBLT0l5SmdsbEREZHhCWGtrc2tXaVBVVVdSWHVoVzRKMFlmb1pUajlHOW1IZkN1anhjN29MWDZCL2tpelROTTdFL3JPWWkrOGM4L0hjVlNKM0xxYWRvRjNvL0ZKa3ZVQVlPYXppYmFUL0FsQkxBd1FVQUFBSUNBQk5tdHBPQ0swYVRFY0FBQUJNQUFBQVNnQUFBRTFGVkVFdFNVNUdMMjFoZG1WdUwyTnZiUzVoYldGc2RHOHVjR3hoZEdadmNtMDJMMlJsYlc4dFlYQndMWE50WVhKMExXTnZiblJ5WVdOMEwzQnZiUzV3Y205d1pYSjBhV1Z6RGNuQkRZQWdEQVhRTzd0QTlPS05BUnlqS1dCSUtMOHAxZm5sK3Q1WGJYWE1mS1lqUElaWDc1SVpra2hvT0pJTzhnYVRLNUI1YjhTK3YxUkJKTlc0Wkd0a1RMYzk0UWRRU3dNRUZBQUFDQWdBVFpyYVRoeit6dHlnQVFBQTV3SUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TUM1amJHRnpjNVZTUVU4VU1SVCt1Z3c3N0RyS2lvZ2lhanh3MkFXelJUUmNJSHRnSTRsbU5SSElYamgxWng1RHlXeTd0aDBOUDRzRE1mSGdEL0JIR2QrTUhvd3hCdEswNzczMisxNi9yK24zSDErL0FYaUZweTNNWWFXTkNBOWlQSXl4S3RBTVo5cXZid2xzanJTVnMwS0ZVK3VtT3pLanFaVStsWWYwc1NRZkRxejdVTnFnZ3JiRzd6SnRUeHNkQmdMOTdnMTR2YkZBTkxRWkNTeU90S0gzNVhSQzdsaE5DdDVaR3RsVUZXUGxkRlgvM293cWVRTEpHMlBJRFF2bFBYSFp2LzZkNjl0YkxMZDFwSE9qUXVtNDVkdVJkYm44VEpPWDUxSk50RHkrbU5FaG5aSWprOUxlWDRlWjRqNE04REluVnFBQ1pYTC9JcEIvc2JNNzRNYnRJMXU2bEE1MEpYYjFYd0w2NStxVFlyK3ZUVnBZcjAzK2pzS1p6V0k4U3JDR3h3bm0wVXdRNDRuQTg1dTRFbGo3ancrQjNyV2JDU3prRktxYWFkM3V5WDd2ajBlWU9SdHNhZ3VaV2tkTW56SnFxSXFDdmM5MWUyTTg0eDhWOGVjU25VN2xwTXA0eGxqZzJPSnNnQVlQb0wyeGVRV3g4UVdOUzY0YWFQUGFyTEVXdDNoZCtZVkNnanRBbmMzWDV4RVdhM3dIZCt1NGhIc2NJeXpqUG03WE9CWlNNL0FUVUVzREJCUUFBQWdJQUUyYTJrNldVaXdaVGdRQUFGUUtBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpjdVkyeGhjM090Vmx0ejIwUVUvamF4bzloUlc5TmNXa0lnWEVKd25JdENBZzJRRXNoRkRnYkZJWmU2bEVLTExHOXNCVmx5cEhXYVB2UEdJODlNbjNqaHJUQ2twVEREOUprL3dneDMrQUVNWjJVVDA4U2R4ak94ck5YdStjNStlODdSMmJQNjhaL3ZmZ0R3RXNveG5NT3JjWnpIYXpITVlEWk96VVVGcjhjUmxaSW81dUpJNFkwdXZJbDVCUXRkaUdOUndaSkVkSW1rRlN6THdWdXl5U2g0V3o3ZmtZMmhZQ1ZPNUZrRnF3cmVWYkRHMENGS2RqQTB5VEJxMko1V2NVeXg1Zm5sQzFxQmx6MHRzTFIxdmxQbGdVaDcvbHJWRTZhd1BUZVlwV2tYYmRjV2N3d1R5UmJtamVRWUlvdGVnVE9jTVd5WFo2dmxQUGMzemJ4RGtyT0daNWxPenZSdE9hNExJOUk4QmpYanV0eGZkTXdnNERTY09QNmFRMU16Wkc3VXJGU2Ntd3o5RXVEcjNPTDJMaS9vdTl3VjZ6eW9rQjZ0dFpzMFBMK28zZUQ1NlcydDRudkNzenhIc3p5ZmEyVXVTbDRoMFB5NnNtWjR4ZG1SRnF4NCtMcGtYYnZqRmFWVExhM08wTVVsVDg1MGFEa0ZHeFJCdlNHNGJJdVNJV2xULzZNVmU5cWk1d3JmdE1UUVVWMmlQQ1Z1Vm5paEVaTDBTYms0bkRTMnpWMVRjMHkzcUszbXQ3a2xLSDVIUkF4eGZjL2lsWkJSd1NaRGJNTXV1cWFvK21UTmwwY25TUHQ4VHY3UW9udmFWdFcxd3FsYXV0NjcyRnBRVDhiZE9lbkhobGYxTFo2MlpSWS8zb3hoUWpwREcwRjNMY2NMYkxlNEVscWs0SktLSEM2cjZNY1RLZ2J3bm9vcmVGL0ZWWHpBc0hRU0JxcDRBVWtWSCtLYWd1c3FQZ0taTWRDSWs1bTN0WUpKTkpRTGdiWkpyWW84TElaRUkvd2J3aWVMVlJSQTRCYXVNYlJkWFZCUnhMS0tFcFlaZWtMZHNpbEsyb0pkekxpQ0Y3bXZ3c2EyaW85Qk1SbHI1Y1dvR01Jd3pXbGwyejlnYnkxZEdBWWZrUzhLSElia2NYY01RM2RqaVlQRVpSZzV0cDFVa25hT3ZLZTA0OTJvbFQvak9DVXBaTlYwVWFKa0U5eXYxYVdHay8reHlVS1RsQlc0ZSszUzZxYStyaS9xbVp5K2RGM1A2Vm5hYUlQR3d6SWd0RW1tdEdsWlBBaUdwaWZwdVBpaWxici9DT3BXeTI0TEJTMVI1Q0xqRnZnZUw5UWdxcExKZXVHcEN0dlJERHVRdnAxK1VFS2hvb2tNdmNsTTB5clZTV2pJUjRtZWJLNFJWT25Jc2JrdkQ3YkQrNGJ3Ym1MSWV1NGgyNkwrMWs2bXdLQ0VTU0Y3blhZUVZIbGhub3pwTTVydEtmbGFxM25LMnQ2bVljSFRkT0NmQjlVZ3NFUkMxaFQ2eUdpbmV3QlBrdlFwNnMyaGpTNGduaHJkQjB2ZFJkdFhOR3JESUxVZHBBUDhSQ3hBWDAwTHorQTVJT3hKTmtZWGJjNGFGK3NnN2doaHQxTGZnSDJOOXRGdkVWbjVIdEVyZDlHUkhTZCtaWHpzRGpyYjd5SFdodnVJMzBNWG82ZTZqMU1TT0gwWU9FUC9mU1JDTE5JVWV5ekVvb2V3cy92b0RvR09veXYxak44KzhHOFlNV3AvaG9wZjBJTmZLVXEvWVFxL0k0cy9zSTAvOFFuK3d1ZjRPL1EvVmZQc3dQOWJzb3lTM3lvK3d3akdpTEVIbjJJY0UyaFB6Rk5NTkpMSStFN1g0eHRMamQ1SDd4MzAzVzRhWGpYc3grcjBrM1JIU1BJaXRWT2gvalI5Rzhybnk3Z1FZak40QmM5U3I1OUNmZzYxWDVTa3p4TkhDdXNZUmV4ZlVFc0RCQlFBQUFnSUFFMmEyazZhUzQzSm1RRUFBTjBDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qRXVZMnhoYzNPVlV0Rk9FMEVVUFZPV0xxMnJWRlFRVWNNRER5MllqZ3J4QmRLb2pTUW1sVVFnZmVGcHVuc3BRN1l6ZFdaV3cyZnhRRWg4OEFQOEtNUGQxUWRqaUlGTVp1NjljOCs1YzA0eVAzOTkvd0ZnQzg4Ym1NRmlFeEdXWWp5T3NTeFFEeWZhcjcwVTJCaG9LNmU1Q3NmV1RkN0lqQ1pXK2xUdTA1ZUNmTmkxN25OaGd3cmFHci9OdEIxdGRPZ0pkTnUzNEhXR0FsSGZaaVF3UDlDRzlvckppTnloR3VWOHN6Q3dxY3FIeXVteS9uTVpsZklFa28vR2tPdm55bnZpc252ek45ZGV2Mks1alFNOU5pb1Vqa2UrSFZnM2x0OW90SGtxMVVqTHc3TXA3ZE14T1RJcDdmelR6QlRQWVlDWDc3TE1rZmZiUFI3WFBMQ0ZTMmxYbHhLWHIzdTJlNnErS25iNXdhUzU5ZHFNUDFFNHNWbU1Kd2xXOERUQkxPb0pZandUZUhFYkx3SXIvMUV2MExueE1JRzVNWVd5WmxxN2ZmUys4NWYxcWJQQnBqYVhxWFhFOUFtaitpclAyZnRNdXpQRUt2K2ppTCtVYUxWS0oyWEdPOFljeHdablBkUjRBYzMxalF1STlVdlV6cm1xb2NsbnZjSmEzT0Z6OFRjS0NlNEJWVFpiOVNQTVYvZ1c3bGR4QVE4NFJuaUlSN2hiNFZoSXhjQVZVRXNEQkJRQUFBZ0lBRTJhMms2Nm9rUWVrd0VBQUxRQ0FBQXFBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1EwTG1Oc1lYTnpqVkpMYnhNeEVQNmNiTE5OV0dnb1VCNEZWRlZSU1ZvSkkvcTR0TW9sQWdrVU9EUnQ3czd1ZE92S3NTT3ZBK3JQNnFHcXhLRS9nQjlWZGJMMEFCd2dzand2ZnpQempUVS9iMzVjQTlqQjZ6cXFXR2tnd3RNWXoySThGNmlGVTEyMDNnbTArdHJKaVZIaHhQbnhuc3hvN0dTUnlvRWVUd3dOZ3ZNcXAzM0dIMmlyUTFmZ1RYdWVoTTVRSU9xNWpBU1crdHJTMStsNFJQNUlqUXhIbHZzdVZXYW92Sjc1ZDhGb1JrZ2crV1F0K1o1UlJVSHNic3pSckxYRC9Pb0RuVnNWcHA1TGZlNDduOHZ2Tk5vK2sycWs1ZEg1aEE3cGhEelpsQTcrZXN4VVVJRUJoY3lKTzZ0QW1UeldOcnpmM2R2dmN1SEd3RTE5U2g5MXlmeVB4bS9QMURmRkEzNndxWEdGdHZrWENxY3VpL0Vpd1NwZUpsaEFMVUdNVi96TDg0d2hzUG9QNGdMci95OGlVTTBwOEwrMU83L05PZkV1dU5RWm1UcFA4cEFUQS9XVU1UeGV0ZDBaWW8zWEkrSk5FYzNtalBQTTRodGprWFdkclM0cWZJREc1dFlseE9ZVktoZnNWZEJnV1N1eHg3akhjdVVYQ2drZUFLVzFVTDVIV0NyeFRUd3M5VEllc1k3d0dFOXd2OFF4a1RJRHQxQkxBd1FVQUFBSUNBQk5tdHBPQVRUMXVwY0JBQUM3QWdBQUtnQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtNeTVqYkdGemM0MVNRVTlUUVJEK3RqejZiSDFLUlVBRk1jWTAybUxpR2xBdWtGNHFKSkRLZ1dMdjIvZUd4NUx0YnJOdkMvRm5jU0FtSHZnQi9pamo5TWxCUEdpejJaMlozVzltdm04elAzNSt2d0h3QVM5cW1NTktIUkdleEhnYTQ1bEFOWnpwb3ZsZW9OblRUbzZOQ3FmT2o3WmxSaU1uaTFUMjlXaHNxQitjVnpudE1INVhXeDA2QW05YXN5UzBCd0pSMTJVa3NORFRsbzRtb3lINUV6VTBmTFBZYzZreUErWDFOTDY5akthRUJKSURhOGwzalNvSzR2RDFETTJhVzh5djF0ZTVWV0hpdWRSaHovbGNYdEp3NjF5cW9aWW5YOGQwVEtma3lhYTArOWRqcG9JS0RDaGtUdHhaQmNya0YyM0Q1c2Z0blE0WHJ2ZmR4S2UwcjB2bWR4cS9PMWNYaWdYdTJkUzRRdHY4TTRVemw4VllUYkNHNXdubVVVMFFZNTEvZVJZWkFtdi9JQzd3NnY5Rm1HL0JIbVdmV0JaL1g2djloOXl4ZDhHbHpzaVVFZktZOHdOMWxUR3NjcTdWSHVBbFQwbkVBeU1halNuMXFjYzd4ajIyTmZZNnFQQUM2aHR2cnlFMnZxRnl4VkVGZFQ2ckpYWWY5L2xjK1kxQ2dvZEE2YzJYN3hFV1Nud0RqMHE3aU1kc0l5eGhHUTlLSEJNcE0vQUxVRXNEQkJRQUFBZ0lBRTJhMms2ZDl1dUJMd1FBQUJrS0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNamd1WTJ4aGMzT3RWbTFURzFVVWZpNGtMQWxMRzk2bHJiWldyQ0c4TEZMRUtvanlrbWgwU2VWRmFtMjFibll2eVRMTDNyQjdRK0d6MDMvaWpGK3JJNjIxTTA0LyswLzhFNDduYmlLeGtFN0oyQ1I3WDg0NTk3blBPWHZ1dWZuejc5Ly9BRENEblFRR2NTT0pJWHlRd0N3K1RGSXpwMkUraWJpU3hQRlJFcU5ZNk1MSCtFVERZaGVTV05Ld3JEUXJTcFBWa0ZPVFQxWHptWWE4NmovWDhFV1NjRTBOcXhvS0dtNHlkTWl5RzQ1TU1ZeVpyakFxbmlXM1JiQTdhemg4VnhpaGJhenp2U29QWlU0RWExVWhMZWtLUDV5alpmT3U3OG9GaHNsMEMrdEd0eGhpeThMaERPZE4xK2VGNm02UkI1dFcwU05Kcnlsc3k5dXlBbGZONjhLWW9zZWc1MzJmQjh1ZUZZYWNwcE5uMzNOaytnYlJqVnVWaW5mSThOcDZibTJGMng3dDdXVDN1Uy9YZVZnaEs5cEpwazBSbEl6N3ZIaDl4NmdFUWdwYmVJWXRBbTdzY2xrV1RtZ0VkV1BERktXNTBSWTR2R2hYWXRidWlaSnlxS1c5R2JxNHd0bXlQTnBNd3hwRkw5c1EzSEpsMlZTd21mL0F5Z05qV2ZneXNHdzVjdHFXSUx2bFlZVTdqWUNzdkJvSHI2WE5IV3ZmTWp6TEx4azNpenZjbGhTN1V5S0daUGJBNXBVSVQ4TTZRMkxETGZtV3JBYkU1YWZUQ3hTN2dKTTM3ajQvTUxhcnZoMHROWEwxMFh4cklYMFZ6aTRvTHpaRU5iQjV6bFhaTzl4cy9hUnloUTVBMXJjOUVicCthVFhpbzJGRHh5YSswakdNQ3pvdVlrdkhMWHl0NHphK1lWajYvL1IwWE1NN091N2dyb1p2ZFh5SGV3eVhHakd5aXE3aFdBUkNXUkFhbTlUcStCNUVOTlVJL1lZTWlLK09JbXdkRHU0eXROMVowc0dSMDdHTkhFTi9aTHRyeWJLeDVKYnl2dVFsSHVnb29jd3czc3I3MFBFVzNxWTFyWnp6NTZqV3NvVGg4a3ZTUklQTGtEN3JNV0hvYTJ4eG5LOE1vMmZtU1RVb09QR0NjcDY0WDZ0MjVsbHFVSVJwWkdXWmNrenlvRmFJR2k3K2k2WnFTMW9WM0I2VkVObGxNMS9JcnR6TGJtVUxteFFWODBVdlBtS2s4dGl5YlI2R0l6TlRkRGY4MkVxUmZ3bDBxMVcyaFFxV0tuR1o5eDErd0oyYWlzcGl1bDVycXRMMUROTU5sVy9ubnBkUW9HZ2h3MEE2MzdRd2RaSTJ3cVA4VGplM0NLdDB2N2c4VUxmWXllTkMrajVDS0FqL0JMZDRzTDJYZHhpMFBRb2VWNk5PTnd5cjNGa2tNb05tczZORVdBTk5BNElyZEs4UGdiSUxMSlZTSllUK1JyVFRjeEdYU1BvNmpSYlFSbDhnbVJrN0FzczhSdHZQTkd2REc5UjJrQTFZTnk3VGVMQm1SWWhYZ1dpazBCaDk2VWpXc2Y0aTdCajFEeksvZ3YyQzlySGZFRnQ5aXZqdHgrZ29UQkMrTmpIK0NKM3RUNUJvd3pNa242Q0xVYThmb1ZzcHpwMVVuS2ZmRVZLUkx0WlUxeFBwNGlkMHZVZm9tM2g0N01aVmRKSWJLZWlzQi8yc0Y4T3NEOU9zSHdVMmdCMDJpQi9ZVU9SaXBrYisyTVVIcWpTU2F6b09rY1lZb2ZWakQrT1lRSHRxa2R5ZUpJbHkrM285aEluTTJEUDBQOExBdzZZUjFOVVlpVHE4UVUrTUpGUFV2aHZaVHhPUTZtZndYcVNieGZ0NGswWVhLS3FEcUgzaUpCMGhqRkY4U1hRVC93QlFTd01FRkFBQUNBZ0FUWnJhVG1qQmo1dVFBUUFBbkFJQUFFZ0FBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UlNSbEZFWldOc2FXNWxaRVYyWlc1MFVtVnpjRzl1YzJVdVkyeGhjM09sVWsxckZFRVFmYjFKZGpicmFyNDBKbjRjQkE4bWgvUWh3WXNpdUlrTEM0T1NqZVFpQ0wwemxkbGVlcnBudTN2aTcvSVU4T0FQOEVlSk5aTUZMd3FDbDNwZEg2L3FWZEUvZm43N0R1QUVUL3RZd1Y2Q1J3a2VDNndZVndnY3BjNFg4Z3ROaitleThpNjZ6Qm1aT1UreXBEaHplWkNlUXVWc0lKbTY0cFZBTDlSVlpUUjVnZTEwcnE2Vk5Nb1c4aUo2Ylp2OG1yOWFqSE9CenFlaFFMS29YYVRHN2VrUWFzcmZSb0hkVzFxcDRrd09kVEcya1FyeVRPMisxbGJITnl6dHhjR2x3T3FweTBsZ0k5V1czdGZsbFB4SE5UWFV6SFdaTXBmSzY4WmZCbGZqVEFlQnZjbm8vSXd5dzV6ODNUWFpPRm5LRnhpTXJTVi9hbFFJeEpWbnFYYXlNaXBlT1YrK2xEbVZUb1pNVG1oUlU0Z2o1ODladTRxYXljLy8xcFJGOXk5YzdUTWE2VWJFL3AvWVI4MjZBOXpGdlFSUEJJYi9QMVpnOC9mbFAwem5sUEZaRC82NUw1Nmh3ejhCV0FQZmpTMFl1MGhhN0dHOXhmNFM3MkRRb21nV1lMdkJubXg5NWgvZVFIemxSd2ViYkx0TlVIekdGcjhIdHdYWXhvTTJ2OXZhaDdqUDJPZGNCL3ZZd2ZvdlVFc0RCQlFBQUFnSUFFMmEyazU0cjZLWG5BRUFBT0lDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qVXVZMnhoYzNPVlV0Rk9GREVVUFYyR0hYWWRaVVZCRVRVK0VMTUxabXNFZllGczFJMGtKcXVKUVBhOU8zTlpTbWJicGUxQStDckNBekh4d1Evd280eDNSaDZNTVFiU3RQZmU5dHpUYzVyKytQbnRPNEJOUEcxZ0JrdE5SSGdRNDJHTVpZRjZPTlIrOWFYQStrQmJPYzFWT0xCdThrWm1OTEhTcDNLWGpndnlZY2U2TDRVTkttaHIvQmEzYld1alEwK2cyNzVCWDJjb0VQVnRSZ0x6QTIzb2N6RVprZHRYbzV4M0ZnWTJWZmxRT1YzV1Y1dFJLVThnK1dnTXVYNnV2Q2N1dTllL2MvWFZhNWJiMk5Oam8wTGhtUEx0d0xxeFBLWFJ4cEZVSXkzM3o2YTBTd2ZreUtTMC9kZGhwcGlIQVY2K3l6SkgzbS8xbUs2NVp3dVgwbzR1SlM3LzY5cnVrVHBSN1BLRFNYUHJ0Umwvb25Cb3N4aVBFcXpnY1lKWjFCUEVlQ0x3NGlaZUJGYitvMTZnYzIweUZqZW04TDQ0STNkbFRlQjV1L09ILzZtendhWTJsNmwxeEJ3VEc2aXY4cHdmWUtiZEdlSVpmNmFJLzVWb3RVbzdaY1l6eGh6SEJtYzkxSGdBemJYMVM0aTFyNmhkY0ZWRGs5ZDZoVDNITFY2WGZxT1E0QTVRWmJQVmVZVDVDdC9DM1NvdTRCN0hDUGV4aU5zVmpvVlVIZmdGVUVzREJCUUFBQWdJQUUyYTJrN25mQVpjUmdFQUFDRUNBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTmk1amJHRnpjNVZSUzA4Q01SQ2U4Z1pSRkIrSjhlcEJORnFOaGd1RUEwUVN6V29pRU81bGQ0Q1NwY1cycStGbmVUTHg0QS93UnhsblYwL0dHSjFrWGwrblg3OUozOTVmWGdIZ0FuWktrSVpxSGpienNNVWcxNVJLdWhhRDlFRnR5Q0RUMFFFeXFIaFM0VzAwSDZFWmlGRklTTlhUdmdpSHdzaTQvd0l6YmlvdGcvS1ZVbWc2b2JBV3FUMzJwT2FMVUxpeE52TTZEM0N1dWZWNUQrOGp0SzZyelYya25YQlNLN3RmYnpBbzl1VkVDUmNaWXJ6MnRKbndSeHlkejdnWVNUNVlMckNIWXpTb2ZHeCtPd3dFMGRDQTVSTWtBY0pod050TGgvYXMzbWdSY2FtdkkrTmpWOFphZDM5Ni8yUW1IZ1N0ZTZuOFVGdXBKamZvcGpySXczWVpNcEJsY1BTUFZSanMvU0tlUWUzUFhIQUtLZnFrMkJnNUthR2NvNHBUanBIczRUT3dKeXBTa0tlWVM4QTJGQ2lXUHdlZ0NDdkoxWEl5dFFwclNhN0Flb0p1VUN3bHpnaU5yZkFCVUVzREJCUUFBQWdJQUUyYTJrN0tJeXBtUGdNQUFKTUhBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTVRZdVkyeGhjM085VmV0T0UwRVUvcVlVVnNxS1ZSSHZDb2phQzdJb2lwZFdWQ3JWa25yRmtCaC82SFE3TEV1Mk8zVjNGdlZGZkFJZlFCUHZKc2JmUHBUeHpOTEl4UXFZR05OMForYWJjNzd6blROblo3Ly8rUHdWd0ZsVXVyRWRwL1JqTklWZVdDbmtNV2JnZEEvT1lOekEyUjRZT0dkZ3dzRDVGRHB4SVVXV0Z3MWNNbEF3VUdRd2w3ZzNQQi81dG5LbHp6QlVsWUZqUFJPMThVV0wxMXlyemhWWEw1b2l0TW90bXdKRGwxcHd3K0V4aG56VmxWYlQ0MnBlQm8wSnF5NGEwZ3B0Njc1NEdvbFFsV1Z3TDVMa1QxNmhkaXU2dnFzbUdlNW0vc0p2YzBIWk9ZWmtTZFlGdzQ2cTY0dmJVYU1tZ2dlODVoR3lxeXB0N3MzeHdOWHJGcGpVQ1ZEdUZkOFhRY25qWVNob09icDFWY09uSnlpaEpERjdETWN6MlZVaVZkVDBTSjBqaUpvclViY2VhR0NjekkxQWhKR25LRks2dXNpWHVCVXAxN09xYnFob3MzK3RUc3F3cFhWc25XM3hqd1hSVG9WSjRrcE5QN2RGTXhacTRESkQ5NnpyK0Z4RkFkR0pyWWd0THNkc2NMVmdUYmxPeFZmQ0VVRmhHZlc0NzFpektuQjlwOURlVG12b296Z3I1bmRxaThMV2FiNzhIVnlWbnkxOU93b0M0U3VyUktYVkJTaitCN1Z4eldabEZOaWk3T3FhNzI5MzVxUGFtMXBzMnJjOUdSTGZMYUVXWk4zQXBJa3J1R3BpRjNhYlNHT25pVDVjTXpHRkVzUGdwdW9OWERjeGpUTERvWTBPMXNRTm5LQ3l0a3VCR21wOXJsckRUUk9IY0poaDVHL2FlZzNYOGdreEhON3dpQmgycjdqOGFqMkc3SmJqMHQzZ0NIVy9mSThoazNrMHRicERtNEZVMHBZNmNDREl1U0dWMElIcHlEb3krczFQY2RzV0lWMUhZM1FoUGY3SE44dnY3Mm52V29SVWtIS0dQWmxLMjM3ZlJydHozSXVvU0JjemYrcjlqWkhzSEFibzB1NEY5UjRTNmJSdU1ZQkc2amY2QkhUUXZ3OTdhTGVmWmlVa1ltUkhMdjhPTERmeURvbmNCM1M4SVNpQnZmVHNJa1BnQ2ZiUnM1OHdNc1YrSEFUaW1hWms5S08rSVJwTitJbzh0TlZNN2kzeHZVWGlJNUxWTCtoOG1PLzRoSzRFdnNINGhHMk14dTU4Y2gyU3luZXV0L21BbnRleGFLM2xBSEVETmt6VUtiTEFNT1l4QVFjVldxL29tMm5wTXpHSkl6aEs2Z2JpRldzaGd6UWJJaVJKNHpIaTBKa2VUMStqSEU3UVRPZGd4VGtCbmJuM01GKzNMWVc1Yk5BS3RVS1hiQkdlUkNZZXM4akZlM21Na0h3Z1JWYmI0K0xoSjFCTEF3UVVBQUFJQ0FCTm10cE9tMWZIbUVJQkFBQWFBZ0FBTVFBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRNdVkyeGhjM09WVVV0TEF6RVFudlMxYlYydDFnZUlWdzlXMFFnVkVWcDZLUmFFVmJDdHZhZTcwNXF5VFdxU1ZmeFpuZ1FQL2dCL2xEaTdlaElSSFpqWE56TmZac2piKzhzckFKekFWaFh5VVBkZzNZTU5CcVcyVk5KMUdPVDNHaU1HaGE2T2tFRXRrQXF2a3ZrWXpWQ01ZMExxZ1E1RlBCSkdwdmtYV0hDMzBqTHdMNVJDMDQyRnRVanBZU0ExWDhUQ1RiU1puL0lJNTVyYmtQZnhMa0hyZXRwY0o5b0pKN1d5dTgwV2c4cEFUcFZ3aVNIR2JxRE5sRC9ndURuallpejU4SEdCZlp5Z1FSVmkrMXN4RWtSRERaYmZ1TW5ad0JtcHBxME9NVllIT2pFaDltUzY1UFpQRHgvTnhMMmdPODlWR0d0TGM1Zm9iblhrd2FZUEJTZ3lPUGpIRFF4MmZ0bWFRZVBQWEhBTU9mcWRWQmdwYlVLK1JCRW5ueUxGL1dkZ1R4VGt3Q05ieXNBT2xNbjZudzFRZ2FWczFNKzZsbUVsOHpWWXpkQTFzdFZNR2FHcGxEOEFVRXNEQkJRQUFBZ0lBQW1aMms2RjE4azEwQUlBQUlnSkFBQkRBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2WkdWdGJ5MWhjSEF0YzIxaGNuUXRZMjl1ZEhKaFkzUXZjRzl0TG5odGJKMVdTMi9iTUF5KzUxZG93VTRGTENWTk1SU0Y2MTY2QWgzYWJVQzJZVmRWWmx4bDFtT1NuTFFZOXQ4blM0bnJKTGFiTHJlUUg4bVBMOUhwMVpNbzBRcU01VXBlanFkNE1rWWdtY3E1TEM3SDM3L2RKT2ZqcTJ5VWFxT1d3Qnp5YUdrdng0L082UXRDQkYyQnhGUlQ5Z2hZbVlKOC9YSlB6dkRFZXhtaDdTK1lYRHhaM3BpdDEydThuZ1dEMDhsa1NuN2UzODI5QjBFVExxMmpra0hiM1BJTEc3UjNpbEVYYUw0YUh2VWhubXdlaFVuQVlmOS9uSVZncVZBNWxEOWlKYktnVGNtT2JCUnhoVkdWdnMwenBnU21ncFpPWVYxU3QxQkdmRWpKVmh1eDFEaStvTXg1UVE1Q0pWVHJ4QW92VFppU3puaE5TbHFZYUxUcFJqYXRHYXgyZy9zK2FQQUdZTE9tUkduTTB2UFJ2QVNEcmFvTUEyOStucEp1VmErcG82WUExMm02VVVVYXBNMGppbkxRSUhNL083dmNHdkh6aTNDbmpMNHJlQTBQcytWZTdScGdxejVNR1Rnc1dJTmNOYzJiNFdtcmRBMkE3TE5wU1ZxcFBGUzhiUGxPZFZrVmZqTDNva1hwcnZBZ3M4M294VnB1L1BRa3VwOXNITk1sTlVtMDYwOThKM21mT2o3dFNMNEIrc2xiOEtJeVlaY085UnNhN0pHdm9Gc2JFWGwrWHhPOEJzc00xMDZaekptcTdzNmhvdCtMb0pJdndMcCt5RGJZTlN4b1ZicGJvVXNRSUYxZy85SHZVTjIzSnZJZzZ0Z1ljdzJNTHpnYkRORUo2aytVdko1cFU0emorTzdtbUZ4VEI5bjdQM0hRd2dCang0WDNSb1grbTVJdTlCRnNCNm5VQTlrekppa1ptREwvZW5Tc3puSDdOUFJTQkhCclJ3STJpV3YwcGhVNnc2ZnRwemQ5bHlTSVVTbVZRNVV1RE0wQk9ZWHFFekZERDhCb1pRRnhod3o4cnJnQml6N1JGVVhUS1VxUy8xdy8vMmo4b2dWOHBnSXkzam92dUQ0aTJESmZ3UmFpMjBkODZ2MFdPaTVqTEd1WWJ5eVhaT241a1pRY0l2bzhsVHpuN25rZThEZitHZ3hOZXU1THdQeldQNy9FOHpVSnB2N2xlOUgyZStDU2xWWCs2Z0pzWU5uSkNUbnhoNjFNeVZZeU1OakR2dXVhSEpIckc2ZDdLN0hibTdPNUw2TndSdXZQcW16MEQxQkxBUUlVQXhRQUFBZ0lBRTZhMms0TGw0dGRuQUFBQUJFQkFBQVVBQUFBQUFBQUFBQUFBQUNrZ1FBQUFBQk5SVlJCTFVsT1JpOU5RVTVKUmtWVFZDNU5SbEJMQVFJVUF3b0FBQWdBQUU2YTJrNEFBQUFBQUFBQUFBQUFBQUFKQUFBQUFBQUFBQUFBRUFEdFFjNEFBQUJOUlZSQkxVbE9SaTlRU3dFQ0ZBTUtBQUFJQUFCTm10cE9BQUFBQUFBQUFBQUFBQUFBQXdBQUFBQUFBQUFBQUJBQTdVSDFBQUFBYVc4dlVFc0JBaFFEQ2dBQUNBQUFUWnJhVGdBQUFBQUFBQUFBQUFBQUFBMEFBQUFBQUFBQUFBQVFBTzFCRmdFQUFHbHZMM0JzWVhSbWIzSnROaTlRU3dFQ0ZBTUtBQUFJQUFCTm10cE9BQUFBQUFBQUFBQUFBQUFBRWdBQUFBQUFBQUFBQUJBQTdVRkJBUUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2VUVzQkFoUURDZ0FBQ0FBQVRacmFUZ0FBQUFBQUFBQUFBQUFBQUJVQUFBQUFBQUFBQUFBUUFPMUJjUUVBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxQkxBUUlVQXdvQUFBZ0FBRTZhMms0QUFBQUFBQUFBQUFBQUFBQVBBQUFBQUFBQUFBQUFFQUR0UWFRQkFBQk5SVlJCTFVsT1JpOXRZWFpsYmk5UVN3RUNGQU1LQUFBSUFBQk9tdHBPQUFBQUFBQUFBQUFBQUFBQUpBQUFBQUFBQUFBQUFCQUE3VUhSQVFBQVRVVlVRUzFKVGtZdmJXRjJaVzR2WTI5dExtRnRZV3gwYnk1d2JHRjBabTl5YlRZdlVFc0JBaFFEQ2dBQUNBQUFUcHJhVGdBQUFBQUFBQUFBQUFBQUFEd0FBQUFBQUFBQUFBQVFBTzFCRXdJQUFFMUZWRUV0U1U1R0wyMWhkbVZ1TDJOdmJTNWhiV0ZzZEc4dWNHeGhkR1p2Y20wMkwyUmxiVzh0WVhCd0xYTnRZWEowTFdOdmJuUnlZV04wTDFCTEFRSVVBeFFBQUFnSUFFMmEyazdZODZmQW9nRUFBT2dDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVzBDQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TkM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNnc0SkR4bXdFQUFPQUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dWOEVBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhPQzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms3RWd1ZmdRZ0VBQUJvQ0FBQXhBQUFBQUFBQUFBQUFBQUNrZ1VvR0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRNExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUbXBzUzZzMEFnQUFHZ1FBQUNRQUFBQUFBQUFBQUFBQUFLU0Iyd2NBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSkdVVk4wWVhSMWN5NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazZEQlBhR293RUFBT01DQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVkVLQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrN1B3cUJOb0FFQUFPVUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dVUU1BQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhPUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms3RmtzNDVvd0VBQU9ZQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1RRT0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU15NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazdZaHZ2UWdRRUFBSUlDQUFCSUFBQUFBQUFBQUFBQUFBQ2tnU2NRQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVJTUmxGU1pXTmxhWFpsWkVWMlpXNTBVbVZ6Y0c5dWMyVXVZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQk5tdHBPb2pMWDUwZ0JBQUFoQWdBQU1RQUFBQUFBQUFBQUFBQUFwSUVPRWdBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTnk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNFVXS2tCRVJ3QUFFbHBBQUF2QUFBQUFBQUFBQUFBQUFDa2dhVVRBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazdLTVBPK0JnUUFBTUFKQUFBeUFBQUFBQUFBQUFBQUFBQ2tnUU13QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5Tmk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNU8xN0xkbFFFQUFMQUNBQUJLQUFBQUFBQUFBQUFBQUFDa2dWazBBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UlJkVzkwWlZKbFkyVnBkbVZrUlhabGJuUlNaWE53YjI1elpTNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazV5TGMzOVJ3RUFBQ01DQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVlkyQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TUM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrN25BdDdZUmdFQUFDRUNBQUF4QUFBQUFBQUFBQUFBQUFDa2dlMDNBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTFMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHVJM096NUhBUUFBSXdJQUFESUFBQUFBQUFBQUFBQUFBS1NCZ2prQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFeExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUaStNdk9CUkFRQUFHZ0lBQUNvQUFBQUFBQUFBQUFBQUFLU0JHVHNBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTVM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNmhaeCt6UmdFQUFDRUNBQUF4QUFBQUFBQUFBQUFBQUFDa2diSThBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG9uWUFyZ2tEZ0FBalRNQUFDZ0FBQUFBQUFBQUFBQUFBS1NCUno0QUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE9ZMUk3bFZFQkFBQWFBZ0FBS2dBQUFBQUFBQUFBQUFBQXBJR3hUQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1F5TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRpRmN6aUtlQVFBQTNnSUFBRElBQUFBQUFBQUFBQUFBQUtTQlNrNEFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTBMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG4yQ3F2dWtBUUFBNVFJQUFESUFBQUFBQUFBQUFBQUFBS1NCT0ZBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFekxtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUaFE1RkZmYUFBQUEwQUVBQUJFQUFBQUFBQUFBQUFBQUFLU0JMRklBQUZOcGJYQnNaVk4wYjNKaFoyVXVjMjlzVUVzQkFoUURGQUFBQ0FnQVRacmFUckpmRzNWWEF3QUFHQWdBQURJQUFBQUFBQUFBQUFBQUFLU0JOVk1BQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl5TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRtZ3lJYWRJQVFBQUl3SUFBRElBQUFBQUFBQUFBQUFBQUtTQjNGWUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERXlMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHVSOVh2QkhBUUFBSVFJQUFERUFBQUFBQUFBQUFBQUFBS1NCZEZnQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRJdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE94NjhWUTZJQkFBRG5BZ0FBTWdBQUFBQUFBQUFBQUFBQXBJRUtXZ0FBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNVGN1WTJ4aGMzTlFTd0VDRkFNVUFBQUlDQUJObXRwT0VwTWErS0lEQUFCcUVBQUFHQUFBQUFBQUFBQUFBQUFBcElIOFd3QUFVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk11YzI5c1VFc0JBaFFERkFBQUNBZ0FUWnJhVHBZQUFXRy9FQUFBRXkwQUFCOEFBQUFBQUFBQUFBQUFBS1NCMUY4QUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMVJsYzNRdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE8zZDJ6VVZFQkFBQXNBZ0FBTVFBQUFBQUFBQUFBQUFBQXBJSFFjQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtPUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms0VDlKdkdZUUVBQUZZQ0FBQkhBQUFBQUFBQUFBQUFBQUNrZ1hCeUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlUYVcxd2JHVlRkRzl5WVdkbEpGTjBiM0psWkVSaGRHRkRhR0Z1WjJWa1JYWmxiblJTWlhOd2IyNXpaUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms0UW44elBVUUVBQUN3Q0FBQXhBQUFBQUFBQUFBQUFBQUNrZ1RaMEFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRMExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQVRacmFUbkdiU1pEU0F3QUFPd2tBQUNvQUFBQUFBQUFBQUFBQUFLU0IxblVBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNElyUnBNUndBQUFFd0FBQUJLQUFBQUFBQUFBQUFBQUFDa2dmQjVBQUJOUlZSQkxVbE9SaTl0WVhabGJpOWpiMjB1WVcxaGJIUnZMbkJzWVhSbWIzSnROaTlrWlcxdkxXRndjQzF6YldGeWRDMWpiMjUwY21GamRDOXdiMjB1Y0hKdmNHVnlkR2xsYzFCTEFRSVVBeFFBQUFnSUFFMmEyazRjL3M3Y29BRUFBT2NDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnWjk2QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TUM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUUyYTJrNldVaXdaVGdRQUFGUUtBQUF5QUFBQUFBQUFBQUFBQUFDa2dZOThBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXlOeTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms2YVM0M0ptUUVBQU4wQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1MyQkFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU1TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazY2b2tRZWt3RUFBTFFDQUFBcUFBQUFBQUFBQUFBQUFBQ2tnUmFEQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVRhVzF3YkdWVGRHOXlZV2RsSkRRdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FCTm10cE9BVFQxdXBjQkFBQzdBZ0FBS2dBQUFBQUFBQUFBQUFBQXBJSHhoQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1F6TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRwMzI2NEV2QkFBQUdRb0FBRElBQUFBQUFBQUFBQUFBQUtTQjBJWUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpESTRMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVG1qQmo1dVFBUUFBbkFJQUFFZ0FBQUFBQUFBQUFBQUFBS1NCVDRzQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkZKR1VVUmxZMnhwYm1Wa1JYWmxiblJTWlhOd2IyNXpaUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBRTJhMms1NHI2S1huQUVBQU9JQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1VXTkFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU5TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFFMmEyazduZkFaY1JnRUFBQ0VDQUFBeEFBQUFBQUFBQUFBQUFBQ2tnVEdQQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVEyTG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBVFpyYVRzb2pLbVkrQXdBQWt3Y0FBRElBQUFBQUFBQUFBQUFBQUtTQnhwQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTJMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FUWnJhVHB0WHg1aENBUUFBR2dJQUFERUFBQUFBQUFBQUFBQUFBS1NCVkpRQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRNdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FBSm1kcE9oZGZKTmRBQ0FBQ0lDUUFBUXdBQUFBQUFBQUFBQUFBQXBJSGxsUUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2WkdWdGJ5MWhjSEF0YzIxaGNuUXRZMjl1ZEhKaFkzUXZjRzl0TG5odGJGQkxCUVlBQUFBQU5nQTJBQ2tUQUFBV21RQUFBQUE9XCIsXCJ0YXJnZXRSb290XCI6XCIke0IyQk9YX0RBVEF9XCIsXCJ0YXJnZXRQYXRoXCI6XCIvbGliL2RlbW8tYXBwLXNtYXJ0LWNvbnRyYWN0LTEuMS5qYXJcIixcInByb3BzXCI6e30sXCJkZXBsb3llZFwiOmZhbHNlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJkZW1vLWFwcC1zbWFydC1jb250cmFjdC0xLjEuamFyXCIsXCJhdHRhY2htZW50U2l6ZVwiOjQ0MTE3fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MzE4MjM3NDc2MX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5idW5kbGVkcmVzb3VyY2VzIiwibmFtZSI6IlBPUmV2aWV3IiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUE9SZXZpZXdcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiVGVtcGxhdGUgZmlsZSBmb3IgZW1haWwgbm90aWZpY2F0aW9uIGZyb20gdGhlIHdvcmtmbG93IHNlcnZpY2UgZm9yIFB1cmNoYXNlT3JkZXJcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1NzU1OTg4MjYsXCJyZXZpc2lvbklkXCI6XCJjOGI3ODVjNTgzMWVhNjI4ZDkwNzA1NzA4MjBjMzRkNFwiLFwiaXRlbUJ5dGVzXCI6XCJQQ0ZrYjJOMGVYQmxJR2gwYld3K0NqeG9kRzFzSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUwzaG9kRzFzSWlCNGJXeHVjenAyUFNKMWNtNDZjMk5vWlcxaGN5MXRhV055YjNOdlpuUXRZMjl0T25adGJDSWdlRzFzYm5NNmJ6MGlkWEp1T25OamFHVnRZWE10YldsamNtOXpiMlowTFdOdmJUcHZabVpwWTJVNmIyWm1hV05sSWo0S0NUeG9aV0ZrUGdvSkNUd2hMUzBnVGtGTlJUb2dNU0JEVDB4VlRVNGdMU0JDUVU1RVJVUWdMUzArQ2drSlBDRXRMVnRwWmlCbmRHVWdiWE52SURFMVhUNEtDUWs4ZUcxc1Bnb0pDUWs4YnpwUFptWnBZMlZFYjJOMWJXVnVkRk5sZEhScGJtZHpQZ29KQ1FrOGJ6cEJiR3h2ZDFCT1J5OCtDZ2tKQ1R4dk9sQnBlR1ZzYzFCbGNrbHVZMmcrT1RZOEwyODZVR2w0Wld4elVHVnlTVzVqYUQ0S0NRa0pQQzl2T2s5bVptbGpaVVJ2WTNWdFpXNTBVMlYwZEdsdVozTStDZ2tKUEM5NGJXdytDZ2tKUENGYlpXNWthV1pkTFMwK0Nna0pQRzFsZEdFZ1kyaGhjbk5sZEQwaVZWUkdMVGdpUGdvSkNUeHRaWFJoSUdoMGRIQXRaWEYxYVhZOUlsZ3RWVUV0UTI5dGNHRjBhV0pzWlNJZ1kyOXVkR1Z1ZEQwaVNVVTlaV1JuWlNJK0Nna0pQRzFsZEdFZ2JtRnRaVDBpZG1sbGQzQnZjblFpSUdOdmJuUmxiblE5SW5kcFpIUm9QV1JsZG1salpTMTNhV1IwYUN3Z2FXNXBkR2xoYkMxelkyRnNaVDB4SWo0S0NRazhkR2wwYkdVK1NXNWpiMjFwYm1jZ1VIVnlZMmhoYzJVZ1QzSmtaWElnZEc4Z1VtVjJhV1YzUEM5MGFYUnNaVDRLQ1FrS0NRazhjM1I1YkdVZ2RIbHdaVDBpZEdWNGRDOWpjM01pUGdvSkNRa0pjSHNLQ1FrSkNRbHRZWEpuYVc0Nk1UQndlQ0F3T3dvSkNRa0pDWEJoWkdScGJtYzZNRHNLQ1FrSkNYMEtDUWtKQ1hSaFlteGxld29KQ1FrSkNXSnZjbVJsY2kxamIyeHNZWEJ6WlRwamIyeHNZWEJ6WlRzS0NRa0pDWDBLQ1FrSkNXZ3hMR2d5TEdnekxHZzBMR2cxTEdnMmV3b0pDUWtKQ1dScGMzQnNZWGs2WW14dlkyczdDZ2tKQ1FrSmJXRnlaMmx1T2pBN0Nna0pDUWtKY0dGa1pHbHVaem93T3dvSkNRa0pmUW9KQ1FrSmFXMW5MR0VnYVcxbmV3b0pDUWtKQ1dKdmNtUmxjam93T3dvSkNRa0pDV2hsYVdkb2REcGhkWFJ2T3dvSkNRa0pDVzkxZEd4cGJtVTZibTl1WlRzS0NRa0pDUWwwWlhoMExXUmxZMjl5WVhScGIyNDZibTl1WlRzS0NRa0pDWDBLQ1FrSkNXSnZaSGtzSTJKdlpIbFVZV0pzWlN3alltOWtlVU5sYkd4N0Nna0pDUWtKYUdWcFoyaDBPakV3TUNVN0Nna0pDUWtKYldGeVoybHVPakE3Q2drSkNRa0pjR0ZrWkdsdVp6b3dPd29KQ1FrSkNYZHBaSFJvT2pFd01DVTdDZ2tKQ1FsOUNna0pDUWtqYjNWMGJHOXZheUJoZXdvSkNRa0pDWEJoWkdScGJtYzZNRHNLQ1FrSkNYMEtDUWtKQ1dsdFozc0tDUWtKQ1FrdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPbUpwWTNWaWFXTTdDZ2tKQ1FsOUNna0pDUWwwWVdKc1pYc0tDUWtKQ1FsdGMyOHRkR0ZpYkdVdGJITndZV05sT2pCd2REc0tDUWtKQ1FsdGMyOHRkR0ZpYkdVdGNuTndZV05sT2pCd2REc0tDUWtKQ1gwS0NRa0pDUzVTWldGa1RYTm5RbTlrZVhzS0NRa0pDUWwzYVdSMGFEb3hNREFsT3dvSkNRa0pmUW9KQ1FrSkxrVjRkR1Z5Ym1Gc1EyeGhjM043Q2drSkNRa0pkMmxrZEdnNk1UQXdKVHNLQ1FrSkNYMEtDUWtKQ1hBc1lTeHNhU3gwWkN4aWJHOWphM0YxYjNSbGV3b0pDUWtKQ1cxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9tVjRZV04wYkhrN0Nna0pDUWw5Q2drSkNRbGhXMmh5WldaZVBYUmxiRjBzWVZ0b2NtVm1YajF6YlhOZGV3b0pDUWtKQ1dOdmJHOXlPbWx1YUdWeWFYUTdDZ2tKQ1FrSlkzVnljMjl5T21SbFptRjFiSFE3Q2drSkNRa0pkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9tNXZibVU3Q2drSkNRbDlDZ2tKQ1Fsd0xHRXNiR2tzZEdRc1ltOWtlU3gwWVdKc1pTeGliRzlqYTNGMWIzUmxld29KQ1FrSkNTMXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPakV3TUNVN0Nna0pDUWtKTFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPakV3TUNVN0Nna0pDUWw5Q2drSkNRa3VSWGgwWlhKdVlXeERiR0Z6Y3l3dVJYaDBaWEp1WVd4RGJHRnpjeUJ3TEM1RmVIUmxjbTVoYkVOc1lYTnpJSFJrTEM1RmVIUmxjbTVoYkVOc1lYTnpJR1JwZGl3dVJYaDBaWEp1WVd4RGJHRnpjeUJ6Y0dGdUxDNUZlSFJsY201aGJFTnNZWE56SUdadmJuUjdDZ2tKQ1FrSmJHbHVaUzFvWldsbmFIUTZNVEF3SlRzS0NRa0pDWDBLQ1FrSkNXRmJlQzFoY0hCc1pTMWtZWFJoTFdSbGRHVmpkRzl5YzExN0Nna0pDUWtKWTI5c2IzSTZhVzVvWlhKcGRDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYUmxlSFF0WkdWamIzSmhkR2x2YmpwdWIyNWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pabTl1ZEMxemFYcGxPbWx1YUdWeWFYUWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNRbG1iMjUwTFdaaGJXbHNlVHBwYm1obGNtbDBJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pabTl1ZEMxM1pXbG5hSFE2YVc1b1pYSnBkQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDV3hwYm1VdGFHVnBaMmgwT21sdWFHVnlhWFFnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNTNTBaVzF3YkdGMFpVTnZiblJoYVc1bGNuc0tDUWtKQ1FsdFlYZ3RkMmxrZEdnNk5qQXdjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNXRXViV051UW5WMGRHOXVld29KQ1FrSkNXUnBjM0JzWVhrNllteHZZMnM3Q2drSkNRbDlDZ2tKQ1FrdWJXTnVTVzFoWjJWN0Nna0pDUWtKZG1WeWRHbGpZV3d0WVd4cFoyNDZZbTkwZEc5dE93b0pDUWtKZlFvSkNRa0pMbTFqYmxSbGVIUkRiMjUwWlc1MGV3b0pDUWtKQ1hkdmNtUXRZbkpsWVdzNlluSmxZV3N0ZDI5eVpEc0tDUWtKQ1gwS0NRa0pDUzV0WTI1VVpYaDBRMjl1ZEdWdWRDQnBiV2Q3Q2drSkNRa0phR1ZwWjJoME9tRjFkRzhnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSkNTNXRZMjVFYVhacFpHVnlRbXh2WTJ0N0Nna0pDUWtKZEdGaWJHVXRiR0Y1YjNWME9tWnBlR1ZrSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQkNZV05yWjNKdmRXNWtJRk4wZVd4bENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUdGdVpDQjBiM0FnWW05eVpHVnlJR1p2Y2lCNWIzVnlJR1Z0WVdsc0xpQlpiM1VnYldGNUlIZGhiblFnZEc4Z1kyaHZiM05sSUdOdmJHOXljeUIwYUdGMElHMWhkR05vSUhsdmRYSWdZMjl0Y0dGdWVTZHpJR0p5WVc1a2FXNW5MZ29KQ1FrcUx3b0pDUWtKWW05a2VTd2pZbTlrZVZSaFlteGxld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpWVdOclozSnZkVzVrTFdOdmJHOXlPaU5tTW1ZeVpqSTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUdGblpRb0pDUWxBYzJWamRHbHZiaUJDWVdOclozSnZkVzVrSUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0IwYjNBZ1ltOXlaR1Z5SUdadmNpQjViM1Z5SUdWdFlXbHNMaUJaYjNVZ2JXRjVJSGRoYm5RZ2RHOGdZMmh2YjNObElHTnZiRzl5Y3lCMGFHRjBJRzFoZEdOb0lIbHZkWElnWTI5dGNHRnVlU2R6SUdKeVlXNWthVzVuTGdvSkNRa3FMd29KQ1FrSkkySnZaSGxEWld4c2V3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdGRHOXdPakE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1VHRm5aUW9KQ1FsQWMyVmpkR2x2YmlCSVpXRmthVzVuSURFS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlHRnNiQ0JtYVhKemRDMXNaWFpsYkNCb1pXRmthVzVuY3lCcGJpQjViM1Z5SUdWdFlXbHNjeTRnVkdobGMyVWdjMmh2ZFd4a0lHSmxJSFJvWlNCc1lYSm5aWE4wSUc5bUlIbHZkWElnYUdWaFpHbHVaM011Q2drSkNVQnpkSGxzWlNCb1pXRmthVzVuSURFS0NRa0pLaThLQ1FrSkNXZ3hld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pOakEyTURZd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFdaaGJXbHNlVHBCY21saGJDd2dKMGhsYkhabGRHbGpZU0JPWlhWbEp5d2dTR1ZzZG1WMGFXTmhMQ0J6WVc1ekxYTmxjbWxtT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk16QndlRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMXpkSGxzWlRwdWIzSnRZV3c3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRkMlZwWjJoME9tSnZiR1E3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRXlOU1U3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4bGRIUmxjaTF6Y0dGamFXNW5PaTB4Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzUmxlSFF0WVd4cFoyNDZiR1ZtZERzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQlFZV2RsQ2drSkNVQnpaV04wYVc5dUlFaGxZV1JwYm1jZ01nb0pDUWxBZEdsd0lGTmxkQ0IwYUdVZ2MzUjViR2x1WnlCbWIzSWdZV3hzSUhObFkyOXVaQzFzWlhabGJDQm9aV0ZrYVc1bmN5QnBiaUI1YjNWeUlHVnRZV2xzY3k0S0NRa0pRSE4wZVd4bElHaGxZV1JwYm1jZ01nb0pDUWtxTHdvSkNRa0phREo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTURZd05qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2tobGJIWmxkR2xqWVRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qSTBjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjM1I1YkdVNmJtOXliV0ZzT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcGliMnhrT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c1pYUjBaWEl0YzNCaFkybHVaem90TVhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklETUtDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJR0ZzYkNCMGFHbHlaQzFzWlhabGJDQm9aV0ZrYVc1bmN5QnBiaUI1YjNWeUlHVnRZV2xzY3k0S0NRa0pRSE4wZVd4bElHaGxZV1JwYm1jZ013b0pDUWtxTHdvSkNRa0phRE43Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTURZd05qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2tobGJIWmxkR2xqWVRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qRTRjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjM1I1YkdVNmJtOXliV0ZzT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcGliMnhrT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c1pYUjBaWEl0YzNCaFkybHVaem90TVhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklEUUtDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJR0ZzYkNCbWIzVnlkR2d0YkdWMlpXd2dhR1ZoWkdsdVozTWdhVzRnZVc5MWNpQmxiV0ZwYkhNdUlGUm9aWE5sSUhOb2IzVnNaQ0JpWlNCMGFHVWdjMjFoYkd4bGMzUWdiMllnZVc5MWNpQm9aV0ZrYVc1bmN5NEtDUWtKUUhOMGVXeGxJR2hsWVdScGJtY2dOQW9KQ1FrcUx3b0pDUWtKYURSN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNMk1EWXdOakE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRabUZ0YVd4NU9raGxiSFpsZEdsallUc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakUyY0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzNSNWJHVTZibTl5YldGc093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhkbGFXZG9kRHBpYjJ4a093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TWpVbE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNaWFIwWlhJdGMzQmhZMmx1WnpvdE1YQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTkwWlhoMExXRnNhV2R1T214bFpuUTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUhKbGFHVmhaR1Z5Q2drSkNVQnpaV04wYVc5dUlGQnlaV2hsWVdSbGNpQlRkSGxzWlFvSkNRbEFkR2x3SUZObGRDQjBhR1VnWW1GamEyZHliM1Z1WkNCamIyeHZjaUJoYm1RZ1ltOXlaR1Z5Y3lCbWIzSWdlVzkxY2lCbGJXRnBiQ2R6SUhCeVpXaGxZV1JsY2lCaGNtVmhMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsVUhKbGFHVmhaR1Z5ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5aVlXTnJaM0p2ZFc1a0xXTnZiRzl5T2lObVptWm1abVk3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKdmNtUmxjaTEwYjNBNk1Ec0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZbTl5WkdWeUxXSnZkSFJ2YlRvd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXdZV1JrYVc1bkxYUnZjRG95Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdFltOTBkRzl0T2pKd2VEc0tDUWtKQ1gwS0NRa0pMeW9LQ1FrSlFIUmhZaUJRY21Wb1pXRmtaWElLQ1FrSlFITmxZM1JwYjI0Z1VISmxhR1ZoWkdWeUlGUmxlSFFLQ1FrSlFIUnBjQ0JUWlhRZ2RHaGxJSE4wZVd4cGJtY2dabTl5SUhsdmRYSWdaVzFoYVd3bmN5QndjbVZvWldGa1pYSWdkR1Y0ZEM0Z1EyaHZiM05sSUdFZ2MybDZaU0JoYm1RZ1kyOXNiM0lnZEdoaGRDQnBjeUJsWVhONUlIUnZJSEpsWVdRdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVlFjbVZvWldGa1pYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MExDTjBaVzF3YkdGMFpWQnlaV2hsWVdSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NIc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZMjlzYjNJNkl6WTFOalUyTlRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzFtWVcxcGJIazZWR0ZvYjIxaExDQldaWEprWVc1aExDQlRaV2R2WlN3Z2MyRnVjeTF6WlhKcFpqc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakV3Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzUmxlSFF0WVd4cFoyNDZiR1ZtZERzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQlFjbVZvWldGa1pYSUtDUWtKUUhObFkzUnBiMjRnVUhKbGFHVmhaR1Z5SUV4cGJtc0tDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJSGx2ZFhJZ1pXMWhhV3duY3lCd2NtVm9aV0ZrWlhJZ2JHbHVhM011SUVOb2IyOXpaU0JoSUdOdmJHOXlJSFJvWVhRZ2FHVnNjSE1nZEdobGJTQnpkR0Z1WkNCdmRYUWdabkp2YlNCNWIzVnlJSFJsZUhRdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVlFjbVZvWldGa1pYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MElHRXNJM1JsYlhCc1lYUmxVSEpsYUdWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndJR0Y3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTlRZMU5qVTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGQyVnBaMmgwT201dmNtMWhiRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292ZEdWNGRDMWtaV052Y21GMGFXOXVPblZ1WkdWeWJHbHVaVHNLQ1FrSkNYMEtDUWtKTHlvS0NRa0pRSFJoWWlCSVpXRmtaWElLQ1FrSlFITmxZM1JwYjI0Z1NHVmhaR1Z5SUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0JpYjNKa1pYSnpJR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdhR1ZoWkdWeUlHRnlaV0V1Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWSVpXRmtaWEo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKaFkydG5jbTkxYm1RdFkyOXNiM0k2STJZeVpqSm1NanNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WW05eVpHVnlMWFJ2Y0Rvd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdFltOTBkRzl0T2pBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdGRHOXdPakl3Y0hnN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdFltOTBkRzl0T2pJd2NIZzdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnU0dWaFpHVnlDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUmxjaUJVWlhoMENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nYUdWaFpHVnlJSFJsZUhRdUlFTm9iMjl6WlNCaElITnBlbVVnWVc1a0lHTnZiRzl5SUhSb1lYUWdhWE1nWldGemVTQjBieUJ5WldGa0xnb0pDUWtxTHdvSkNRa0pJM1JsYlhCc1lYUmxTR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZEN3amRHVnRjR3hoZEdWSVpXRmtaWElnTG0xamJsUmxlSFJEYjI1MFpXNTBJSEI3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU16TXpNek16TTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2xSaGFHOXRZU3dnVm1WeVpHRnVZU3dnVTJWbmIyVXNJSE5oYm5NdGMyVnlhV1k3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5uQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTkwWlhoMExXRnNhV2R1T214bFpuUTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnU0dWaFpHVnlDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUmxjaUJNYVc1ckNna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nYUdWaFpHVnlJR3hwYm10ekxpQkRhRzl2YzJVZ1lTQmpiMnh2Y2lCMGFHRjBJR2hsYkhCeklIUm9aVzBnYzNSaGJtUWdiM1YwSUdaeWIyMGdlVzkxY2lCMFpYaDBMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsU0dWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQmhMQ04wWlcxd2JHRjBaVWhsWVdSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NDQmhld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pPRGxpWXpVMU93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhkbGFXZG9kRHB1YjNKdFlXdzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM1JsZUhRdFpHVmpiM0poZEdsdmJqcDFibVJsY214cGJtVTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnUW05a2VRb0pDUWxBYzJWamRHbHZiaUJDYjJSNUlGTjBlV3hsQ2drSkNVQjBhWEFnVTJWMElIUm9aU0JpWVdOclozSnZkVzVrSUdOdmJHOXlJR0Z1WkNCaWIzSmtaWEp6SUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWW05a2VTQmhjbVZoTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFFtOWtlWHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WW1GamEyZHliM1Z1WkMxamIyeHZjam9qUmtaR1JrWkdPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpYjNKa1pYSXRkRzl3T2pBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwySnZjbVJsY2kxaWIzUjBiMjA2TURzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmNHRmtaR2x1WnkxMGIzQTZPWEI0T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5d1lXUmthVzVuTFdKdmRIUnZiVG94TW5CNE93b0pDUWtKZlFvSkNRa3ZLZ29KQ1FsQWRHRmlJRUp2WkhrS0NRa0pRSE5sWTNScGIyNGdRbTlrZVNCVVpYaDBDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQnpkSGxzYVc1bklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ1ltOWtlU0IwWlhoMExpQkRhRzl2YzJVZ1lTQnphWHBsSUdGdVpDQmpiMnh2Y2lCMGFHRjBJR2x6SUdWaGMza2dkRzhnY21WaFpDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwTENOMFpXMXdiR0YwWlVKdlpIa2dMbTFqYmxSbGVIUkRiMjUwWlc1MElIQjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTXpNek16TXpNN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0Wm1GdGFXeDVPbFJoYUc5dFlTd2dWbVZ5WkdGdVlTd2dVMlZuYjJVc0lITmhibk10YzJWeWFXWTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94TkhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TlRBbE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdRbTlrZVFvSkNRbEFjMlZqZEdsdmJpQkNiMlI1SUV4cGJtc0tDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJSGx2ZFhJZ1pXMWhhV3duY3lCaWIyUjVJR3hwYm10ekxpQkRhRzl2YzJVZ1lTQmpiMnh2Y2lCMGFHRjBJR2hsYkhCeklIUm9aVzBnYzNSaGJtUWdiM1YwSUdaeWIyMGdlVzkxY2lCMFpYaDBMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsUW05a2VTQXViV051VkdWNGRFTnZiblJsYm5RZ1lTd2pkR1Z0Y0d4aGRHVkNiMlI1SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0J3SUdGN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNNE9XSmpOVFU3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRkMlZwWjJoME9tNXZjbTFoYkRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmRHVjRkQzFrWldOdmNtRjBhVzl1T25WdVpHVnliR2x1WlRzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQkdiMjkwWlhJS0NRa0pRSE5sWTNScGIyNGdSbTl2ZEdWeUlGTjBlV3hsQ2drSkNVQjBhWEFnVTJWMElIUm9aU0JpWVdOclozSnZkVzVrSUdOdmJHOXlJR0Z1WkNCaWIzSmtaWEp6SUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWm05dmRHVnlJR0Z5WldFdUNna0pDU292Q2drSkNRa2pkR1Z0Y0d4aGRHVkdiMjkwWlhKN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwySmhZMnRuY205MWJtUXRZMjlzYjNJNkkyWXlaakptTWpzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlltOXlaR1Z5TFhSdmNEb3dPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpYjNKa1pYSXRZbTkwZEc5dE9qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM0JoWkdScGJtY3RkRzl3T2psd2VEc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZjR0ZrWkdsdVp5MWliM1IwYjIwNk9YQjRPd29KQ1FrSmZRb0pDUWt2S2dvSkNRbEFkR0ZpSUVadmIzUmxjZ29KQ1FsQWMyVmpkR2x2YmlCR2IyOTBaWElnVkdWNGRBb0pDUWxBZEdsd0lGTmxkQ0IwYUdVZ2MzUjViR2x1WnlCbWIzSWdlVzkxY2lCbGJXRnBiQ2R6SUdadmIzUmxjaUIwWlhoMExpQkRhRzl2YzJVZ1lTQnphWHBsSUdGdVpDQmpiMnh2Y2lCMGFHRjBJR2x6SUdWaGMza2dkRzhnY21WaFpDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVVp2YjNSbGNpQXViV051VkdWNGRFTnZiblJsYm5Rc0kzUmxiWEJzWVhSbFJtOXZkR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0J3ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5amIyeHZjam9qTmpVMk5UWTFPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExXWmhiV2xzZVRwVVlXaHZiV0VzSUZabGNtUmhibUVzSUZObFoyOWxMQ0J6WVc1ekxYTmxjbWxtT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk1USndlRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292YkdsdVpTMW9aV2xuYUhRNk1UVXdKVHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292ZEdWNGRDMWhiR2xuYmpwalpXNTBaWEk3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1JtOXZkR1Z5Q2drSkNVQnpaV04wYVc5dUlFWnZiM1JsY2lCTWFXNXJDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQnpkSGxzYVc1bklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ1ptOXZkR1Z5SUd4cGJtdHpMaUJEYUc5dmMyVWdZU0JqYjJ4dmNpQjBhR0YwSUdobGJIQnpJSFJvWlcwZ2MzUmhibVFnYjNWMElHWnliMjBnZVc5MWNpQjBaWGgwTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFJtOXZkR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ0JoTENOMFpXMXdiR0YwWlVadmIzUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUWdjQ0JoZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5amIyeHZjam9qTmpVMk5UWTFPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYZGxhV2RvZERwdWIzSnRZV3c3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNSbGVIUXRaR1ZqYjNKaGRHbHZianAxYm1SbGNteHBibVU3Q2drSkNRbDlDZ2tKQ1VCdFpXUnBZU0J2Ym14NUlITmpjbVZsYmlCaGJtUWdLRzFwYmkxM2FXUjBhRG8zTmpod2VDbDdDZ2tKQ1FrdWRHVnRjR3hoZEdWRGIyNTBZV2x1WlhKN0Nna0pDUWtKZDJsa2RHZzZOakF3Y0hnZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1dKdlpIa3NkR0ZpYkdVc2RHUXNjQ3hoTEd4cExHSnNiMk5yY1hWdmRHVjdDZ2tKQ1FrSkxYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT201dmJtVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNXSnZaSGw3Q2drSkNRa0pkMmxrZEdnNk1UQXdKU0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDVzFwYmkxM2FXUjBhRG94TURBbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FralltOWtlVU5sYkd4N0Nna0pDUWtKY0dGa1pHbHVaeTEwYjNBNk1UQndlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pmUW9KQ1FsOUNVQnRaV1JwWVNCdmJteDVJSE5qY21WbGJpQmhibVFnS0cxaGVDMTNhV1IwYURvZ05EZ3djSGdwZXdvSkNRa0pMbTFqYmtsdFlXZGxld29KQ1FrSkNYZHBaSFJvT2pFd01DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNTNXRZMjVEWVhKMFEyOXVkR0ZwYm1WeUxDNXRZMjVEWVhCMGFXOXVWRzl3UTI5dWRHVnVkQ3d1YldOdVVtVmpRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051UTJGd2RHbHZia0p2ZEhSdmJVTnZiblJsYm5Rc0xtMWpibFJsZUhSRGIyNTBaVzUwUTI5dWRHRnBibVZ5TEM1dFkyNUNiM2hsWkZSbGVIUkRiMjUwWlc1MFEyOXVkR0ZwYm1WeUxDNXRZMjVKYldGblpVZHliM1Z3UTI5dWRHVnVkRU52Ym5SaGFXNWxjaXd1YldOdVEyRndkR2x2Ymt4bFpuUlVaWGgwUTI5dWRHVnVkRU52Ym5SaGFXNWxjaXd1YldOdVEyRndkR2x2YmxKcFoyaDBWR1Y0ZEVOdmJuUmxiblJEYjI1MFlXbHVaWElzTG0xamJrTmhjSFJwYjI1TVpXWjBTVzFoWjJWRGIyNTBaVzUwUTI5dWRHRnBibVZ5TEM1dFkyNURZWEIwYVc5dVVtbG5hSFJKYldGblpVTnZiblJsYm5SRGIyNTBZV2x1WlhJc0xtMWpia2x0WVdkbFEyRnlaRXhsWm5SVVpYaDBRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051U1cxaFoyVkRZWEprVW1sbmFIUlVaWGgwUTI5dWRHVnVkRU52Ym5SaGFXNWxjbnNLQ1FrSkNRbHRZWGd0ZDJsa2RHZzZNVEF3SlNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hkcFpIUm9PakV3TUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1M1dFkyNUNiM2hsWkZSbGVIUkRiMjUwWlc1MFEyOXVkR0ZwYm1WeWV3b0pDUWtKQ1cxcGJpMTNhV1IwYURveE1EQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNRa3ViV051U1cxaFoyVkhjbTkxY0VOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp6bzVjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pDUzV0WTI1RFlYQjBhVzl1VEdWbWRFTnZiblJsYm5SUGRYUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNMbTFqYmtOaGNIUnBiMjVTYVdkb2RFTnZiblJsYm5SUGRYUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUjdDZ2tKQ1FrSmNHRmtaR2x1WnkxMGIzQTZPWEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUWt1YldOdVNXMWhaMlZEWVhKa1ZHOXdTVzFoWjJWRGIyNTBaVzUwTEM1dFkyNURZWEIwYVc5dVFteHZZMnRKYm01bGNpQXViV051UTJGd2RHbHZibFJ2Y0VOdmJuUmxiblE2YkdGemRDMWphR2xzWkNBdWJXTnVWR1Y0ZEVOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp5MTBiM0E2TVRod2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSmZRb0pDUWw5Q1VCdFpXUnBZU0J2Ym14NUlITmpjbVZsYmlCaGJtUWdLRzFoZUMxM2FXUjBhRG9nTkRnd2NIZ3Bld29KQ1FrSkxtMWpia2x0WVdkbFEyRnlaRUp2ZEhSdmJVbHRZV2RsUTI5dWRHVnVkSHNLQ1FrSkNRbHdZV1JrYVc1bkxXSnZkSFJ2YlRvNWNIZ2dJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNTNXRZMjVKYldGblpVZHliM1Z3UW14dlkydEpibTVsY25zS0NRa0pDUWx3WVdSa2FXNW5MWFJ2Y0Rvd0lDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSmNHRmtaR2x1WnkxaWIzUjBiMjA2TUNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSkNRbDlDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMWhlQzEzYVdSMGFEb2dORGd3Y0hncGV3b0pDUWtKTG0xamJrbHRZV2RsUjNKdmRYQkNiRzlqYTA5MWRHVnlld29KQ1FrSkNYQmhaR1JwYm1jdGRHOXdPamx3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hCaFpHUnBibWN0WW05MGRHOXRPamx3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSkNRbDlDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMWhlQzEzYVdSMGFEb2dORGd3Y0hncGV3b0pDUWtKTG0xamJsUmxlSFJEYjI1MFpXNTBMQzV0WTI1Q2IzaGxaRlJsZUhSRGIyNTBaVzUwUTI5c2RXMXVld29KQ1FrSkNYQmhaR1JwYm1jdGNtbG5hSFE2TVRod2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYQmhaR1JwYm1jdGJHVm1kRG94T0hCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FrdWJXTnVTVzFoWjJWRFlYSmtUR1ZtZEVsdFlXZGxRMjl1ZEdWdWRDd3ViV051U1cxaFoyVkRZWEprVW1sbmFIUkpiV0ZuWlVOdmJuUmxiblI3Q2drSkNRa0pjR0ZrWkdsdVp5MXlhV2RvZERveE9IQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pjR0ZrWkdsdVp5MWliM1IwYjIwNk1DQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNYQmhaR1JwYm1jdGJHVm1kRG94T0hCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FrdWJXTndjbVYyYVdWM0xXbHRZV2RsTFhWd2JHOWhaR1Z5ZXdvSkNRa0pDV1JwYzNCc1lYazZibTl1WlNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hkcFpIUm9PakV3TUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUnBibWNnTVFvSkNRbEFkR2x3SUUxaGEyVWdkR2hsSUdacGNuTjBMV3hsZG1Wc0lHaGxZV1JwYm1keklHeGhjbWRsY2lCcGJpQnphWHBsSUdadmNpQmlaWFIwWlhJZ2NtVmhaR0ZpYVd4cGRIa2diMjRnYzIxaGJHd2djMk55WldWdWN5NEtDUWtKS2k4S0NRa0pDV2d4ZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWE5wZW1VNk1UaHdlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUzhxQ2drSkNVQjBZV0lnVFc5aWFXeGxJRk4wZVd4bGN3b0pDUWxBYzJWamRHbHZiaUJJWldGa2FXNW5JRElLQ1FrSlFIUnBjQ0JOWVd0bElIUm9aU0J6WldOdmJtUXRiR1YyWld3Z2FHVmhaR2x1WjNNZ2JHRnlaMlZ5SUdsdUlITnBlbVVnWm05eUlHSmxkSFJsY2lCeVpXRmtZV0pwYkdsMGVTQnZiaUJ6YldGc2JDQnpZM0psWlc1ekxnb0pDUWtxTHdvSkNRa0phREo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5uQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRXlOU1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pMeW9LQ1FrSlFIUmhZaUJOYjJKcGJHVWdVM1I1YkdWekNna0pDVUJ6WldOMGFXOXVJRWhsWVdScGJtY2dNd29KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJSFJvYVhKa0xXeGxkbVZzSUdobFlXUnBibWR6SUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNXZ3pld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRad2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE1qVWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklEUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQm1iM1Z5ZEdndGJHVjJaV3dnYUdWaFpHbHVaM01nYkdGeVoyVnlJR2x1SUhOcGVtVWdabTl5SUdKbGRIUmxjaUJ5WldGa1lXSnBiR2wwZVNCdmJpQnpiV0ZzYkNCelkzSmxaVzV6TGdvSkNRa3FMd29KQ1FrSmFEUjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94Tm5CNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFMU1DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkx5b0tDUWtKUUhSaFlpQk5iMkpwYkdVZ1UzUjViR1Z6Q2drSkNVQnpaV04wYVc5dUlFSnZlR1ZrSUZSbGVIUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQmliM2hsWkNCMFpYaDBJR3hoY21kbGNpQnBiaUJ6YVhwbElHWnZjaUJpWlhSMFpYSWdjbVZoWkdGaWFXeHBkSGtnYjI0Z2MyMWhiR3dnYzJOeVpXVnVjeTRnVjJVZ2NtVmpiMjF0Wlc1a0lHRWdabTl1ZENCemFYcGxJRzltSUdGMElHeGxZWE4wSURFMmNIZ3VDZ2tKQ1NvdkNna0pDUWt1YldOdVFtOTRaV1JVWlhoMFEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFzTG0xamJrSnZlR1ZrVkdWNGRFTnZiblJsYm5SRGIyNTBZV2x1WlhJZ0xtMWpibFJsZUhSRGIyNTBaVzUwSUhCN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzJsNlpUb3hOSEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUZCeVpXaGxZV1JsY2lCV2FYTnBZbWxzYVhSNUNna0pDVUIwYVhBZ1UyVjBJSFJvWlNCMmFYTnBZbWxzYVhSNUlHOW1JSFJvWlNCbGJXRnBiQ2R6SUhCeVpXaGxZV1JsY2lCdmJpQnpiV0ZzYkNCelkzSmxaVzV6TGlCWmIzVWdZMkZ1SUdocFpHVWdhWFFnZEc4Z2MyRjJaU0J6Y0dGalpTNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVkJ5WldobFlXUmxjbnNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WkdsemNHeGhlVHB1YjI1bElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1M4cUNna0pDVUIwWVdJZ1RXOWlhV3hsSUZOMGVXeGxjd29KQ1FsQWMyVmpkR2x2YmlCUWNtVm9aV0ZrWlhJZ1ZHVjRkQW9KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJSEJ5WldobFlXUmxjaUIwWlhoMElHeGhjbWRsY2lCcGJpQnphWHBsSUdadmNpQmlaWFIwWlhJZ2NtVmhaR0ZpYVd4cGRIa2diMjRnYzIxaGJHd2djMk55WldWdWN5NEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVkJ5WldobFlXUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNJM1JsYlhCc1lYUmxVSEpsYUdWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRKd2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQklaV0ZrWlhJZ1ZHVjRkQW9KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJR2hsWVdSbGNpQjBaWGgwSUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpVaGxZV1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFzSTNSbGJYQnNZWFJsU0dWaFpHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRad2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE5UQWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQkNiMlI1SUZSbGVIUUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQmliMlI1SUhSbGVIUWdiR0Z5WjJWeUlHbHVJSE5wZW1VZ1ptOXlJR0psZEhSbGNpQnlaV0ZrWVdKcGJHbDBlU0J2YmlCemJXRnNiQ0J6WTNKbFpXNXpMaUJYWlNCeVpXTnZiVzFsYm1RZ1lTQm1iMjUwSUhOcGVtVWdiMllnWVhRZ2JHVmhjM1FnTVRad2VDNEtDUWtKS2k4S0NRa0pDU04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwTENOMFpXMXdiR0YwWlVKdlpIa2dMbTFqYmxSbGVIUkRiMjUwWlc1MElIQjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94TkhCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFMU1DVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkx5b0tDUWtKUUhSaFlpQk5iMkpwYkdVZ1UzUjViR1Z6Q2drSkNVQnpaV04wYVc5dUlFWnZiM1JsY2lCVVpYaDBDZ2tKQ1VCMGFYQWdUV0ZyWlNCMGFHVWdabTl2ZEdWeUlHTnZiblJsYm5RZ2RHVjRkQ0JzWVhKblpYSWdhVzRnYzJsNlpTQm1iM0lnWW1WMGRHVnlJSEpsWVdSaFltbHNhWFI1SUc5dUlITnRZV3hzSUhOamNtVmxibk11Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWR2IyOTBaWElnTG0xamJsUmxlSFJEYjI1MFpXNTBMQ04wWlcxd2JHRjBaVVp2YjNSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NIc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemFYcGxPakV6Y0hnZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZiR2x1WlMxb1pXbG5hSFE2TVRVd0pTQWhhVzF3YjNKMFlXNTBPd29KQ1FrSmZRb0pmVHd2YzNSNWJHVStQQzlvWldGa1Bnb0pQR0p2WkhrZ2MzUjViR1U5SW1obGFXZG9kRG9nTVRBd0pUdHRZWEpuYVc0NklEQTdjR0ZrWkdsdVp6b2dNRHQzYVdSMGFEb2dNVEF3SlRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMll5WmpKbU1qc2lQZ29KQ1R4alpXNTBaWEkrQ2drSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQm9aV2xuYUhROUlqRXdNQ1VpSUhkcFpIUm9QU0l4TURBbElpQnBaRDBpWW05a2VWUmhZbXhsSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0b1pXbG5hSFE2SURFd01DVTdiV0Z5WjJsdU9pQXdPM0JoWkdScGJtYzZJREE3ZDJsa2RHZzZJREV3TUNVN1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ0kyWXlaakptTWpzaVBnb0pDUWs4ZEhJK0Nna0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlHbGtQU0ppYjJSNVEyVnNiQ0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdG9aV2xuYUhRNklERXdNQ1U3YldGeVoybHVPaUF3TzNCaFpHUnBibWM2SURBN2QybGtkR2c2SURFd01DVTdZbTl5WkdWeUxYUnZjRG9nTURzaVBnb0pDUWtKQ1R3aExTMGdRa1ZIU1U0Z1ZFVk5VRXhCVkVVZ0x5OGdMUzArQ2drSkNRa0pQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQnBaRDBpZEdWdGNHeGhkR1ZRY21Wb1pXRmtaWElpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMlptWm1abVpqdGliM0prWlhJdGRHOXdPaUF3TzJKdmNtUmxjaTFpYjNSMGIyMDZJREE3Y0dGa1pHbHVaeTEwYjNBNklESndlRHR3WVdSa2FXNW5MV0p2ZEhSdmJUb2dNbkI0T3lJK0Nna0pDUWtKQ1FrSlBDRXRMVnRwWmlCbmRHVWdiWE52SURsZFBnb0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpWTJWdWRHVnlJaUJpYjNKa1pYSTlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnWTJ4aGMzTTlJblJsYlhCc1lYUmxRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHR0WVhndGQybGtkR2c2SURZd01IQjRJQ0ZwYlhCdmNuUmhiblE3SWo0S0NRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaWNISmxhR1ZoWkdWeVEyOXVkR0ZwYm1WeUlpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK1BIUmhZbXhsSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJsUmxlSFJDYkc5amF5SWdjM1I1YkdVOUltMXBiaTEzYVdSMGFEb2dNVEF3SlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1SUdOc1lYTnpQU0p0WTI1VVpYaDBRbXh2WTJ0UGRYUmxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnWTJ4aGMzTTlJbTFqYmxSbGVIUkNiRzlqYTBsdWJtVnlJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp5MTBiM0E2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJUzB0VzJsbUlHMXpiMTArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJSE4wZVd4bFBTSjNhV1IwYURveE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGliR1ZtZENJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhOMGVXeGxQU0p0WVhndGQybGtkR2c2SURFd01DVTdiV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJsUmxlSFJEYjI1MFpXNTBRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVOdmJuUmxiblFpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ01EdHdZV1JrYVc1bkxYSnBaMmgwT2lBeE9IQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQTVjSGc3Y0dGa1pHbHVaeTFzWldaME9pQXhPSEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHQzYjNKa0xXSnlaV0ZyT2lCaWNtVmhheTEzYjNKa08yTnZiRzl5T2lBak5qVTJOVFkxTzJadmJuUXRabUZ0YVd4NU9pQlVZV2h2YldFc0lGWmxjbVJoYm1Fc0lGTmxaMjlsTENCellXNXpMWE5sY21sbU8yWnZiblF0YzJsNlpUb2dNVEJ3ZUR0c2FXNWxMV2hsYVdkb2REb2dNVFV3SlR0MFpYaDBMV0ZzYVdkdU9pQnNaV1owT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pXVzkxY2lCb1lYWmxJR0VnYm1WM0lHbHVZbTkxYm1RZ1VIVnlZMmhoYzJVZ1QzSmtaWElnZEc4Z2NtVjJhV1YzTGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFZ0cFppQnRjMjlkUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNEtDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWs4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnWjNSbElHMXpieUE1WFQ0S0NRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJblJ2Y0NJZ2FXUTlJblJsYlhCc1lYUmxTR1ZoWkdWeUlpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsTzJKaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObU1tWXlaakk3WW05eVpHVnlMWFJ2Y0RvZ01EdGliM0prWlhJdFltOTBkRzl0T2lBd08zQmhaR1JwYm1jdGRHOXdPaUF5TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBeU1IQjRPeUkrQ2drSkNRa0pDUWtKUENFdExWdHBaaUJuZEdVZ2JYTnZJRGxkUGdvSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQmliM0prWlhJOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ2QybGtkR2c5SWpZd01DSWdjM1I1YkdVOUluZHBaSFJvT2pZd01IQjRPeUkrQ2drSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJblJ2Y0NJZ2QybGtkR2c5SWpZd01DSWdjM1I1YkdVOUluZHBaSFJvT2pZd01IQjRPeUkrQ2drSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSmpaVzUwWlhJaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUluUmxiWEJzWVhSbFEyOXVkR0ZwYm1WeUlpQnpkSGxzWlQwaVltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdHRZWGd0ZDJsa2RHZzZJRFl3TUhCNElDRnBiWEJ2Y25SaGJuUTdJajRLQ1FrSkNRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJSFpoYkdsbmJqMGlkRzl3SWlCamJHRnpjejBpYUdWaFpHVnlRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUltMWpia2x0WVdkbFFteHZZMnNpSUhOMGVXeGxQU0p0YVc0dGQybGtkR2c2SURFd01DVTdZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VTQmpiR0Z6Y3owaWJXTnVTVzFoWjJWQ2JHOWphMDkxZEdWeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ01IQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJR05zWVhOelBTSnRZMjVKYldGblpVSnNiMk5yU1c1dVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaWJHVm1kQ0lnZDJsa2RHZzlJakV3TUNVaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCamJHRnpjejBpYldOdVNXMWhaMlZEYjI1MFpXNTBRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JqYkdGemN6MGliV051U1cxaFoyVkRiMjUwWlc1MElpQjJZV3hwWjI0OUluUnZjQ0lnYzNSNWJHVTlJbkJoWkdScGJtY3RjbWxuYUhRNklEQndlRHR3WVdSa2FXNW5MV3hsWm5RNklEQndlRHR3WVdSa2FXNW5MWFJ2Y0RvZ01EdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ01EdDBaWGgwTFdGc2FXZHVPaUJqWlc1MFpYSTdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQR2x0WnlCaGJHbG5iajBpWTJWdWRHVnlJaUJoYkhROUlpSWdjM0pqUFNKb2RIUndjem92TDNCdmNuUmhiQzV3YkdGMFptOXliVFl1YVc4dmMzUmhkR2xqTDJ4dloybHVYM0JoWjJVdmNHeGhkR1p2Y20wMkwyeHZaMjh1Y0c1bklpQjNhV1IwYUQwaU1qWXdJaUJ6ZEhsc1pUMGliV0Y0TFhkcFpIUm9PaUF5TmpCd2VEdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ01EdGthWE53YkdGNU9pQnBibXhwYm1VZ0lXbHRjRzl5ZEdGdWREdDJaWEowYVdOaGJDMWhiR2xuYmpvZ1ltOTBkRzl0TzJKdmNtUmxjam9nTUR0b1pXbG5hSFE2SUdGMWRHODdiM1YwYkdsdVpUb2dibTl1WlR0MFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUc1dmJtVTdMVzF6TFdsdWRHVnljRzlzWVhScGIyNHRiVzlrWlRvZ1ltbGpkV0pwWXpzaUlHTnNZWE56UFNKdFkyNUpiV0ZuWlNJK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0S0NRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdGaWJHVStQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRazhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdaM1JsSUcxemJ5QTVYVDRLQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSlBDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQjJZV3hwWjI0OUluUnZjQ0lnYVdROUluUmxiWEJzWVhSbFFtOWtlU0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdGlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpSa1pHUmtaR08ySnZjbVJsY2kxMGIzQTZJREE3WW05eVpHVnlMV0p2ZEhSdmJUb2dNRHR3WVdSa2FXNW5MWFJ2Y0RvZ09YQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQXhNbkI0T3lJK0Nna0pDUWtKQ1FrSlBDRXRMVnRwWmlCbmRHVWdiWE52SURsZFBnb0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpWTJWdWRHVnlJaUJpYjNKa1pYSTlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnWTJ4aGMzTTlJblJsYlhCc1lYUmxRMjl1ZEdGcGJtVnlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHR0WVhndGQybGtkR2c2SURZd01IQjRJQ0ZwYlhCdmNuUmhiblE3SWo0S0NRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaVltOWtlVU52Ym5SaGFXNWxjaUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVVWlhoMFFteHZZMnNpSUhOMGVXeGxQU0p0YVc0dGQybGtkR2c2SURFd01DVTdZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VTQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVKc2IyTnJUM1YwWlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlHTnNZWE56UFNKdFkyNVVaWGgwUW14dlkydEpibTVsY2lJZ2MzUjViR1U5SW5CaFpHUnBibWN0ZEc5d09pQTVjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaWJHVm1kQ0lnWW05eVpHVnlQU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCemRIbHNaVDBpZDJsa2RHZzZNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lIWmhiR2xuYmowaWRHOXdJaUIzYVdSMGFEMGlOakF3SWlCemRIbHNaVDBpZDJsa2RHZzZOakF3Y0hnN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQnpkSGxzWlQwaWJXRjRMWGRwWkhSb09pQXhNREFsTzIxcGJpMTNhV1IwYURvZ01UQXdKVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVVWlhoMFEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnWTJ4aGMzTTlJbTFqYmxSbGVIUkRiMjUwWlc1MElpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ01IQjRJREU0Y0hnZ09YQjRPMlp2Ym5RdFptRnRhV3g1T2lCVVlXaHZiV0VzSUZabGNtUmhibUVzSUZObFoyOWxMQ0J6WVc1ekxYTmxjbWxtTzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHQzYjNKa0xXSnlaV0ZyT2lCaWNtVmhheTEzYjNKa08yTnZiRzl5T2lBak16TXpNek16TzJadmJuUXRjMmw2WlRvZ01UUndlRHRzYVc1bExXaGxhV2RvZERvZ01UVXdKVHQwWlhoMExXRnNhV2R1T2lCc1pXWjBPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHZ3pJSE4wZVd4bFBTSjBaWGgwTFdGc2FXZHVPaUJzWldaME8yUnBjM0JzWVhrNklHSnNiMk5yTzIxaGNtZHBiam9nTUR0d1lXUmthVzVuT2lBd08yTnZiRzl5T2lBak5qQTJNRFl3TzJadmJuUXRabUZ0YVd4NU9pQklaV3gyWlhScFkyRTdabTl1ZEMxemFYcGxPaUF4T0hCNE8yWnZiblF0YzNSNWJHVTZJRzV2Y20xaGJEdG1iMjUwTFhkbGFXZG9kRG9nWW05c1pEdHNhVzVsTFdobGFXZG9kRG9nTVRJMUpUdHNaWFIwWlhJdGMzQmhZMmx1WnpvZ0xURndlRHNpUGtsdVltOTFibVFnVUhWeVkyaGhjMlVnVDNKa1pYSWdkRzhnY21WMmFXVjNQQzlvTXo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4WkdsMklITjBlV3hsUFNKMFpYaDBMV0ZzYVdkdU9pQnNaV1owT3lJK1BHSnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJMmxtSUhWelpYSXVabWx5YzNST1lXMWxQejhnSmlZZ2RYTmxjaTVtYVhKemRFNWhiV1UvYUdGelgyTnZiblJsYm5RK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThJMmxtSUhWelpYSXViR0Z6ZEU1aGJXVS9QeUFtSmlCMWMyVnlMbXhoYzNST1lXMWxQMmhoYzE5amIyNTBaVzUwUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRWhsYkd4dklDUjdkWE5sY2k1bWFYSnpkRTVoYldWOUxBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQQ05sYkhObFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUVobGJHeHZJQ1I3ZFhObGNpNW1hWEp6ZEU1aGJXVjlMQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEM4amFXWStDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd2paV3h6WlQ0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lFaGxiR3h2SUNSN2RYTmxjaTVsYldGcGJIMHNDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEd3ZJMmxtUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0E4WW5JK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4aWNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSldXOTFJR2hoZG1VZ1lTQnVaWGNnYVc1aWIzVnVaQ0JQY21SbGNpQjBieUJ5WlhacFpYY3VJRkJzWldGelpTQThZU0JvY21WbVBTSWtlMmh5WldaOUlpQjBZWEpuWlhROUlsOWliR0Z1YXlJK2JHOW5JRzl1SUdGdVpDQmhZMk5sY0hRZ2IzSWdjbVZxWldOMExqd3ZZVDQ4WW5JK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKSm01aWMzQTdQQzlrYVhZK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQZ29KQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZV0pzWlQ0OGRHRmliR1VnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdkR0ZpYkdVdGJHRjViM1YwT2lCbWFYaGxaQ0FoYVcxd2IzSjBZVzUwT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIa2dZMnhoYzNNOUltMWpia1JwZG1sa1pYSkNiRzlqYTA5MWRHVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRazhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJTVzV1WlhJaUlITjBlV3hsUFNKdGFXNHRkMmxrZEdnNklERXdNQ1U3Y0dGa1pHbHVaem9nTlhCNElERTRjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkRiMjUwWlc1MElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJSE4wZVd4bFBTSnRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFhSdmNDMTNhV1IwYURvZ01uQjRPMkp2Y21SbGNpMTBiM0F0YzNSNWJHVTZJRzV2Ym1VN1ltOXlaR1Z5TFhSdmNDMWpiMnh2Y2pvZ0kwVkJSVUZGUVR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeHpjR0Z1UGp3dmMzQmhiajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFFvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHTnNZWE56UFNKdFkyNUVhWFpwWkdWeVFteHZZMnRKYm01bGNpSWdjM1I1YkdVOUluQmhaR1JwYm1jNklERTRjSGc3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGFISWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkRiMjUwWlc1MElpQnpkSGxzWlQwaVltOXlaR1Z5TFdKdmRIUnZiUzFqYjJ4dmNqcHViMjVsT3lCaWIzSmtaWEl0YkdWbWRDMWpiMnh2Y2pwdWIyNWxPeUJpYjNKa1pYSXRjbWxuYUhRdFkyOXNiM0k2Ym05dVpUc2dZbTl5WkdWeUxXSnZkSFJ2YlMxM2FXUjBhRG93T3lCaWIzSmtaWEl0YkdWbWRDMTNhV1IwYURvd095QmliM0prWlhJdGNtbG5hSFF0ZDJsa2RHZzZNRHNnYldGeVoybHVMWFJ2Y0Rvd095QnRZWEpuYVc0dGNtbG5hSFE2TURzZ2JXRnlaMmx1TFdKdmRIUnZiVG93T3lCdFlYSm5hVzR0YkdWbWREb3dPeUlnTHo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDRLQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0ZpYkdVK1BDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ1ozUmxJRzF6YnlBNVhUNEtDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdhV1E5SW5SbGJYQnNZWFJsUm05dmRHVnlJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE8ySmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1NbVl5WmpJN1ltOXlaR1Z5TFhSdmNEb2dNRHRpYjNKa1pYSXRZbTkwZEc5dE9pQXdPM0JoWkdScGJtY3RkRzl3T2lBNWNIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEbHdlRHNpUGdvSkNRa0pDUWtKQ1R3aExTMWJhV1lnWjNSbElHMXpieUE1WFQ0S0NRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbU5sYm5SbGNpSWdZbTl5WkdWeVBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlIZHBaSFJvUFNJMk1EQWlJSE4wZVd4bFBTSjNhV1IwYURvMk1EQndlRHNpUGdvSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSjBaVzF3YkdGMFpVTnZiblJoYVc1bGNpSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdiV0Y0TFhkcFpIUm9PaUEyTURCd2VDQWhhVzF3YjNKMFlXNTBPeUkrQ2drSkNRa0pDUWtKQ1FrSkNUeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ1kyeGhjM005SW1admIzUmxja052Ym5SaGFXNWxjaUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYXlJZ2MzUjViR1U5SW0xcGJpMTNhV1IwYURvZ01UQXdKVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYTA5MWRHVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWNHRmtaR2x1WnpvZ09YQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJR05zWVhOelBTSnRZMjVHYjJ4c2IzZENiRzlqYTBsdWJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRFTnZiblJoYVc1bGNpSWdjM1I1YkdVOUltMXBiaTEzYVdSMGFEb2dNVEF3SlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2MzUjViR1U5SW5CaFpHUnBibWN0YkdWbWREb2dPWEI0TzNCaFpHUnBibWN0Y21sbmFIUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQnpkSGxzWlQwaWJXbHVMWGRwWkhSb09pQXhNREFsTzJKdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZENJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSjBiM0FpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ09YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklEbHdlRHR3WVdSa2FXNW5MV3hsWm5RNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKalpXNTBaWElpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdsdWJHbHVaVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKd1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwTnZiblJsYm5SSmRHVnRRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZEVsMFpXMGlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW14bFpuUWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQnpkSGxzWlQwaWNHRmtaR2x1WnkxMGIzQTZJRFZ3ZUR0d1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBMWNIZzdjR0ZrWkdsdVp5MXNaV1owT2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlpSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQjNhV1IwYUQwaU1qUWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZEpZMjl1UTI5dWRHVnVkQ0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4aElHaHlaV1k5SW1oMGRIQTZMeTkzZDNjdVlXMWhiSFJ2TG1OdmJTOGlJSFJoY21kbGREMGlYMkpzWVc1cklpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK1BHbHRaeUJ6Y21NOUltaDBkSEE2THk5alpHNHRhVzFoWjJWekxtMWhhV3hqYUdsdGNDNWpiMjB2YVdOdmJuTXZjMjlqYVdGc0xXSnNiMk5yTFhZeUwyTnZiRzl5TFd4cGJtc3RORGd1Y0c1bklpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ1lteHZZMnM3WW05eVpHVnlPaUF3TzJobGFXZG9kRG9nWVhWMGJ6dHZkWFJzYVc1bE9pQnViMjVsTzNSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUc3RiWE10YVc1MFpYSndiMnhoZEdsdmJpMXRiMlJsT2lCaWFXTjFZbWxqT3lJZ2FHVnBaMmgwUFNJeU5DSWdkMmxrZEdnOUlqSTBJaUJqYkdGemN6MGlJajQ4TDJFK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCemRIbHNaVDBpWkdsemNHeGhlVG9nYVc1c2FXNWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ2MzUjViR1U5SW5CaFpHUnBibWN0Y21sbmFIUTZJREV3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZEVsMFpXMURiMjUwWVdsdVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZV0pzWlNCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnZDJsa2RHZzlJakV3TUNVaUlHTnNZWE56UFNKdFkyNUdiMnhzYjNkRGIyNTBaVzUwU1hSbGJTSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpYkdWbWRDSWdkbUZzYVdkdVBTSnRhV1JrYkdVaUlITjBlV3hsUFNKd1lXUmthVzVuTFhSdmNEb2dOWEI0TzNCaFpHUnBibWN0Y21sbmFIUTZJREV3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURWd2VEdHdZV1JrYVc1bkxXeGxablE2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaUlpQnpkSGxzWlQwaVltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSnRhV1JrYkdVaUlIZHBaSFJvUFNJeU5DSWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwbGpiMjVEYjI1MFpXNTBJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEdFZ2FISmxaajBpYUhSMGNITTZMeTkzZDNjdVptRmpaV0p2YjJzdVkyOXRMMkZ0WVd4MGIzUmxZMmh1YjJ4dloybGxjeUlnZEdGeVoyVjBQU0pmWW14aGJtc2lJSE4wZVd4bFBTSnRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNDhhVzFuSUhOeVl6MGlhSFIwY0RvdkwyTmtiaTFwYldGblpYTXViV0ZwYkdOb2FXMXdMbU52YlM5cFkyOXVjeTl6YjJOcFlXd3RZbXh2WTJzdGRqSXZZMjlzYjNJdFptRmpaV0p2YjJzdE5EZ3VjRzVuSWlCemRIbHNaVDBpWkdsemNHeGhlVG9nWW14dlkyczdZbTl5WkdWeU9pQXdPMmhsYVdkb2REb2dZWFYwYnp0dmRYUnNhVzVsT2lCdWIyNWxPM1JsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlRzdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPaUJpYVdOMVltbGpPeUlnYUdWcFoyaDBQU0l5TkNJZ2QybGtkR2c5SWpJMElpQmpiR0Z6Y3owaUlqNDhMMkUrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdiWE52WFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGlkRzl3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJ6ZEhsc1pUMGlaR2x6Y0d4aGVUb2dhVzVzYVc1bE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnYzNSNWJHVTlJbkJoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcxRGIyNTBZV2x1WlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2REYjI1MFpXNTBTWFJsYlNJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGliR1ZtZENJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ05YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRFZ3ZUR0d1lXUmthVzVuTFd4bFpuUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrK1BIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhkcFpIUm9QU0l5TkNJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBsamIyNURiMjUwWlc1MElpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0VnYUhKbFpqMGlhSFIwY0hNNkx5OTNkM2N1YkdsdWEyVmthVzR1WTI5dEwyTnZiWEJoYm5rdllXMWhiSFJ2TFhSbFkyaHViMnh2WjJsbGN5SWdkR0Z5WjJWMFBTSmZZbXhoYm1zaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0OGFXMW5JSE55WXowaWFIUjBjRG92TDJOa2JpMXBiV0ZuWlhNdWJXRnBiR05vYVcxd0xtTnZiUzlwWTI5dWN5OXpiMk5wWVd3dFlteHZZMnN0ZGpJdlkyOXNiM0l0YkdsdWEyVmthVzR0TkRndWNHNW5JaUJ6ZEhsc1pUMGlaR2x6Y0d4aGVUb2dZbXh2WTJzN1ltOXlaR1Z5T2lBd08yaGxhV2RvZERvZ1lYVjBienR2ZFhSc2FXNWxPaUJ1YjI1bE8zUmxlSFF0WkdWamIzSmhkR2x2YmpvZ2JtOXVaVHN0YlhNdGFXNTBaWEp3YjJ4aGRHbHZiaTF0YjJSbE9pQmlhV04xWW1sak95SWdhR1ZwWjJoMFBTSXlOQ0lnZDJsa2RHZzlJakkwSWlCamJHRnpjejBpSWo0OEwyRStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0V0TFZ0cFppQnRjMjlkUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlIWmhiR2xuYmowaWRHOXdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW14bFpuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ2FXNXNhVzVsTzJKdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCMllXeHBaMjQ5SW5SdmNDSWdjM1I1YkdVOUluQmhaR1JwYm1jdGNtbG5hSFE2SURFd2NIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRFbDBaVzFEYjI1MFlXbHVaWElpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZERiMjUwWlc1MFNYUmxiU0lnYzNSNWJHVTlJbUp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaWJHVm1kQ0lnZG1Gc2FXZHVQU0p0YVdSa2JHVWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYUnZjRG9nTlhCNE8zQmhaR1JwYm1jdGNtbG5hSFE2SURFd2NIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEVndlRHR3WVdSa2FXNW5MV3hsWm5RNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHSnZaSGsrUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnZG1Gc2FXZHVQU0p0YVdSa2JHVWlJSGRwWkhSb1BTSXlOQ0lnWTJ4aGMzTTlJbTFqYmtadmJHeHZkMGxqYjI1RGIyNTBaVzUwSWlCemRIbHNaVDBpYlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHRWdhSEpsWmowaWFIUjBjSE02THk5MGQybDBkR1Z5TG1OdmJTOUJiV0ZzZEc4aUlIUmhjbWRsZEQwaVgySnNZVzVySWlCemRIbHNaVDBpYlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrUEdsdFp5QnpjbU05SW1oMGRIQTZMeTlqWkc0dGFXMWhaMlZ6TG0xaGFXeGphR2x0Y0M1amIyMHZhV052Ym5NdmMyOWphV0ZzTFdKc2IyTnJMWFl5TDJOdmJHOXlMWFIzYVhSMFpYSXRORGd1Y0c1bklpQnpkSGxzWlQwaVpHbHpjR3hoZVRvZ1lteHZZMnM3WW05eVpHVnlPaUF3TzJobGFXZG9kRG9nWVhWMGJ6dHZkWFJzYVc1bE9pQnViMjVsTzNSbGVIUXRaR1ZqYjNKaGRHbHZiam9nYm05dVpUc3RiWE10YVc1MFpYSndiMnhoZEdsdmJpMXRiMlJsT2lCaWFXTjFZbWxqT3lJZ2FHVnBaMmgwUFNJeU5DSWdkMmxrZEdnOUlqSTBJaUJqYkdGemN6MGlJajQ4TDJFK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCemRIbHNaVDBpWkdsemNHeGhlVG9nYVc1c2FXNWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0IyWVd4cFoyNDlJblJ2Y0NJZ2MzUjViR1U5SW5CaFpHUnBibWN0Y21sbmFIUTZJREE3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcxRGIyNTBZV2x1WlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2REYjI1MFpXNTBTWFJsYlNJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGliR1ZtZENJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWFJ2Y0RvZ05YQjRPM0JoWkdScGJtY3RjbWxuYUhRNklERXdjSGc3Y0dGa1pHbHVaeTFpYjNSMGIyMDZJRFZ3ZUR0d1lXUmthVzVuTFd4bFpuUTZJRGx3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbXhsWm5RaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpSWlCemRIbHNaVDBpWW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrK1BIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKdGFXUmtiR1VpSUhkcFpIUm9QU0l5TkNJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBsamIyNURiMjUwWlc1MElpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0VnYUhKbFpqMGlhSFIwY0hNNkx5OTNkM2N1ZVc5MWRIVmlaUzVqYjIwdlkyaGhibTVsYkM5VlF6bFhXQzFxUldGRFdHMDRWRll6Y21SalEyazNZM2NpSUhSaGNtZGxkRDBpWDJKc1lXNXJJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStQR2x0WnlCemNtTTlJbWgwZEhBNkx5OWpaRzR0YVcxaFoyVnpMbTFoYVd4amFHbHRjQzVqYjIwdmFXTnZibk12YzI5amFXRnNMV0pzYjJOckxYWXlMMk52Ykc5eUxYbHZkWFIxWW1VdE5EZ3VjRzVuSWlCemRIbHNaVDBpWkdsemNHeGhlVG9nWW14dlkyczdZbTl5WkdWeU9pQXdPMmhsYVdkb2REb2dZWFYwYnp0dmRYUnNhVzVsT2lCdWIyNWxPM1JsZUhRdFpHVmpiM0poZEdsdmJqb2dibTl1WlRzdGJYTXRhVzUwWlhKd2IyeGhkR2x2YmkxdGIyUmxPaUJpYVdOMVltbGpPeUlnYUdWcFoyaDBQU0l5TkNJZ2QybGtkR2c5SWpJMElpQmpiR0Z6Y3owaUlqNDhMMkUrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdiWE52WFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK0Nna0pDUWtKQ1FrSkNRa0pDUWs4TDNSaFlteGxQangwWVdKc1pTQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWpFd01DVWlJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJzaUlITjBlV3hsUFNKdGFXNHRkMmxrZEdnNklERXdNQ1U3WW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0MFlXSnNaUzFzWVhsdmRYUTZJR1pwZUdWa0lDRnBiWEJ2Y25SaGJuUTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVNCamJHRnpjejBpYldOdVJHbDJhV1JsY2tKc2IyTnJUM1YwWlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJ0SmJtNWxjaUlnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdHdZV1JrYVc1bk9pQTFjSGdnTVRod2VDQXlNSEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRMjl1ZEdWdWRDSWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxMGIzQXRkMmxrZEdnNklESndlRHRpYjNKa1pYSXRkRzl3TFhOMGVXeGxPaUJ6YjJ4cFpEdGliM0prWlhJdGRHOXdMV052Ykc5eU9pQWpSVVZGUlVWRk8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSE53WVc0K1BDOXpjR0Z1UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdENna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZMnhoYzNNOUltMWpia1JwZG1sa1pYSkNiRzlqYTBsdWJtVnlJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp6b2dNVGh3ZURzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeG9jaUJqYkdGemN6MGliV051UkdsMmFXUmxja052Ym5SbGJuUWlJSE4wZVd4bFBTSmliM0prWlhJdFltOTBkRzl0TFdOdmJHOXlPbTV2Ym1VN0lHSnZjbVJsY2kxc1pXWjBMV052Ykc5eU9tNXZibVU3SUdKdmNtUmxjaTF5YVdkb2RDMWpiMnh2Y2pwdWIyNWxPeUJpYjNKa1pYSXRZbTkwZEc5dExYZHBaSFJvT2pBN0lHSnZjbVJsY2kxc1pXWjBMWGRwWkhSb09qQTdJR0p2Y21SbGNpMXlhV2RvZEMxM2FXUjBhRG93T3lCdFlYSm5hVzR0ZEc5d09qQTdJRzFoY21kcGJpMXlhV2RvZERvd095QnRZWEpuYVc0dFltOTBkRzl0T2pBN0lHMWhjbWRwYmkxc1pXWjBPakE3SWlBdlBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGdvSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWVdKc1pUNDhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVKc2IyTnJJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVNCamJHRnpjejBpYldOdVZHVjRkRUpzYjJOclQzVjBaWElpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lIWmhiR2xuYmowaWRHOXdJaUJqYkdGemN6MGliV051VkdWNGRFSnNiMk5yU1c1dVpYSWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYUnZjRG9nT1hCNE8yMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnZDJsa2RHZzlJakV3TUNVaUlITjBlV3hsUFNKM2FXUjBhRG94TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQjNhV1IwYUQwaU5qQXdJaUJ6ZEhsc1pUMGlkMmxrZEdnNk5qQXdjSGc3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnYzNSNWJHVTlJbTFoZUMxM2FXUjBhRG9nTVRBd0pUdHRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVZHVjRkRU52Ym5SbGJuUkRiMjUwWVdsdVpYSWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdkbUZzYVdkdVBTSjBiM0FpSUdOc1lYTnpQU0p0WTI1VVpYaDBRMjl1ZEdWdWRDSWdjM1I1YkdVOUluQmhaR1JwYm1jdGRHOXdPaUF3TzNCaFpHUnBibWN0Y21sbmFIUTZJREU0Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURsd2VEdHdZV1JrYVc1bkxXeGxablE2SURFNGNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE8zZHZjbVF0WW5KbFlXczZJR0p5WldGckxYZHZjbVE3WTI5c2IzSTZJQ00yTlRZMU5qVTdabTl1ZEMxbVlXMXBiSGs2SUZSaGFHOXRZU3dnVm1WeVpHRnVZU3dnVTJWbmIyVXNJSE5oYm5NdGMyVnlhV1k3Wm05dWRDMXphWHBsT2lBeE1uQjRPMnhwYm1VdGFHVnBaMmgwT2lBeE5UQWxPM1JsZUhRdFlXeHBaMjQ2SUdObGJuUmxjanNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOFpHbDJJSE4wZVd4bFBTSjBaWGgwTFdGc2FXZHVPaUJqWlc1MFpYSTdJajVRYkdWaGMyVWdaRzhnYm05MElISmxjR3g1SUhSdklIUm9hWE1nWlMxdFlXbHNMaUJVYUdVZ2MyVnVaR1Z5SUdWdFlXbHNJR0ZrWkhKbGMzTWdhWE1nYm05MElHMXZibWwwYjNKbFpDNDhZbkkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pSbTl5SUdGdWVTQnhkV1Z6ZEdsdmJpd2djR3hsWVhObElEeGhJR2h5WldZOUltMWhhV3gwYnpwamIyNTBZV04wUUhCc1lYUm1iM0p0Tmk1cGJ5SWdkR0Z5WjJWMFBTSmZZbXhoYm1zaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3WTI5c2IzSTZJQ00yTlRZMU5qVTdabTl1ZEMxM1pXbG5hSFE2SUc1dmNtMWhiRHQwWlhoMExXUmxZMjl5WVhScGIyNDZJSFZ1WkdWeWJHbHVaVHNpUG5ObGJtUWdkWE1nWVNCdFpYTnpZV2RsUEM5aFBpNDhZbkkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQR0p5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHh6ZEhKdmJtYytVR3hoZEdadmNtMGdOaUJpZVNCQmJXRnNkRzhnVkdWamFHNXZiRzluYVdWelBDOXpkSEp2Ym1jK1BHSnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeGljajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNjS3BKbTVpYzNBN0pIc3VibTkzUDNOMGNtbHVaeTU1ZVhsNWZTWnVZbk53TzBOdmNIbHlhV2RvZEM0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNDhMMlJwZGo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoVzJWdVpHbG1YUzB0UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGdvSkNRa0pDUWtKQ1FrSkNRazhMM1JoWW14bFBqd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUdkMFpTQnRjMjhnT1YwK0Nna0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNUd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRazhMM1J5UGdvSkNRa0pQQzkwWVdKc1pUNEtDUWtKQ1R3aExTMGdMeThnUlU1RUlGUkZUVkJNUVZSRklDMHRQZ29KQ1FrOEwzUmtQZ29KQ1R3dmRISStDZ2s4TDNSaFlteGxQZ29KUEM5alpXNTBaWEkrQ2p3dlltOWtlVDRLUEM5b2RHMXNQZ289XCIsXCJ0YXJnZXRSb290XCI6XCIke0IyQk9YX0RBVEF9XCIsXCJ0YXJnZXRQYXRoXCI6XCIvcmVzb3VyY2VzL3RlbXBsYXRlcy9wNmRlbW9fUE9SZXZpZXcuZnRsXCIsXCJwcm9wc1wiOnt9LFwiZGVwbG95ZWRcIjp0cnVlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJwNmRlbW9fUE9SZXZpZXcuZnRsXCIsXCJhdHRhY2htZW50U2l6ZVwiOjUxMjY2fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU2MTU3NTU5ODgyNn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5idW5kbGVkcmVzb3VyY2VzIiwibmFtZSI6IlRhYmxlSXRlbXNEYXRhIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVGFibGVJdGVtc0RhdGFcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQ1NWIGZpbGUgdG8gaW1wb3J0IGludG8gdGFibGUgSXRlbXNcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjE1NzU1OTg4NDQsXCJyZXZpc2lvbklkXCI6XCI3Mjg2ODllY2I3YWFiYjMwZDVhN2EwYWQzZWE2NjJlMVwiLFwiaXRlbUJ5dGVzXCI6XCJTV1FzUkdWelkzSnBjSFJwYjI0c1ZXNXBkRkJ5YVdObExFTjFjbkpsYm1ONUxGVlBUU3hEWVhSbFoyOXllUW93TURNME16UTFMRk5wYkhabGNpQklaV3h0WlhRc01qQXNWVk5FTEVWQkxFaGxiRzFsZEFveE1URXhNVEVzVTJ4dmRIUmxaQ0JUWTNKbGQyUnlhWFpsY2l3eU5TeFZVMFFzUlVFc1UyTnlaWGRrY21sMlpYSUtNVE01TkRVeE1URXNVR3hoYzNScFl5QklaV3h0WlhRc01UTXNWVk5FTEVWQkxFaGxiRzFsZEFveE5qYzJOemdzUTJ4aGR5QklZVzF0WlhJc01UVXNWVk5FTEVWQkxFaGhiVzFsY2dveU1qSXlNaklzVUdocGJHbHdjeUJUWTNKbGQyUnlhWFpsY2l3eU55eFZVMFFzUlVFc1UyTnlaWGRrY21sMlpYSUtNakl5TWpJMExGQnZlbWxrY21sMklGTmpjbVYzWkhKcGRtVnlMRE13TEZWVFJDeEZRU3hUWTNKbGQyUnlhWFpsY2dvME5EUTFOallzUTJ4MVlpQklZVzF0WlhJc01qQXNWVk5FTEVWQkxFaGhiVzFsY2dvNE9UTXlNak1zVTJ4bFpHZGxJRWhoYlcxbGNpd3hNREFzVlZORUxFVkJMRWhoYlcxbGNnbz1cIixcInRhcmdldFJvb3RcIjpcIiR7VE1QfVwiLFwidGFyZ2V0UGF0aFwiOlwiL3A2X2RlbW9faXRlbXMuY3N2XCIsXCJwcm9wc1wiOnt9LFwiZGVwbG95ZWRcIjp0cnVlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJ0YWJsZV9wNl9kZW1vLkl0ZW1zX2RhdGFfZXhwb3J0LmNzdlwiLFwiYXR0YWNobWVudFNpemVcIjozODZ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTYxNTc1NTk4ODQ0fV0sInBsYXRmb3JtNi5zdG9yZWRwcm9jZWR1cmVzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zdG9yZWRwcm9jZWR1cmVzIiwibmFtZSI6IkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9ucyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEZWxldGUgYWxsIHA2X2RlbW8gdHJhbnNhY3Rpb24gLSBhdXRvbWF0aWNhbGx5IGNhbGxlZCB3aGVuIHA2X2RlbW8gYXBwbGljYXRpb24gaXMgdW5pbnN0YWxsZWRcIn0sXCJlbmFibGVkXCI6ZmFsc2UsXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NjEzOTMxMTg1MDcsXCJyZXZpc2lvbklkXCI6XCJkMWZhY2FkMDlkMWI2MjVkZDA3ZTM2NWIxY2NkMTE1YlwiLFwidHlwZVwiOlwiVXNlckRlZmluZWRcIixcInVzZXJRdWVyeVZhbHVlXCI6XCJkZWxldGVcXG5mcm9tIHA2Y29yZS5pdGVtXFxud2hlcmUgeHBhdGhfZXhpc3RzKCcvVHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlWy4vS2V5ID0gXFxcIkFwcGxpY2F0aW9uXFxcIiBhbmQgVmFsdWU9XFxcInA2X2RlbW9cXFwiXScgLCBjb250ZW50KTtcXG5cXG5kZWxldGVcXG5mcm9tIHA2Y29yZS5pdGVtXFxud2hlcmUgeHBhdGhfZXhpc3RzKCcvV29ya2Zsb3dUYXNrL2ZsaW5rL3ZpZXdbLj1cXFwicDZfZGVtby5UcmFuc2FjdGlvbnNcXFwiXScgLCBjb250ZW50KTtcXG5cIixcInRhcmdldERhdGFTb3VyY2VOYW1lXCI6bnVsbCxcImRlZmluZWRQYXJhbWV0ZXJzXCI6e30sXCJjYWNoaW5nT3ZlcnJpZGVcIjpmYWxzZSxcImFwcGVuZFRhcmdldERhdGFTb3VyY2VcIjpmYWxzZX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NjEzOTMxMTg1MDd9XX0=", "enabled": false, "version": "0.10.0", "installed": false, "signature": "hC51RvJEqT35PFeY6VdDDc7EiEZGGqshvJCdidPZXYPkHjApL6L+ddV0qL5t8tqE8hzb9aS6Rtt5aPKkgxuZeibkedDvTou+4chv/4xLMdXJlQJESxBik+als34DHQMHcZ1hTpka3OlXhU+exYJ6ZUPBcpzNxXa/NxyK+HkRa60=", "createDate": 1567442840607, "expiryDays": 0, "revisionId": "b15bcc325053308e2795a9760543d44d", "contentMode": "READ", "description": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "publisherId": "4d8c4ac1-9db1-44d9-8d4e-604a845478e9", "appProperties": null, "publisherName": "Platform 6", "lastModifiedBy": "choucri.fahed@amalto.com", "applicationName": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "componentBundle": null, "installationDate": null, "lastModifiedDate": 1567774893482, "underDevelopment": false, "uninstallScriptId": "UninstallApplication", "maxInstanceVersion": "", "minInstanceVersion": "6.0.0-beta-1", "preInstallScriptId": null, "postInstallScriptId": "InitializeApplication"} \N 1567774893500
\.
@@ -523,14 +489,6 @@ ALTER TABLE ONLY p6core.transaction
ADD CONSTRAINT item_pkey PRIMARY KEY (datapartition, datatype, iid1, iid2, iid3, iid4);
---
--- Name: meta meta_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box
---
-
-ALTER TABLE ONLY p6core.meta
- ADD CONSTRAINT meta_pkey PRIMARY KEY (id);
-
-
--
-- Name: rawbytes rawbytes_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box
--